@0xmonaco/mcp-server 1.0.62 → 1.0.64

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 +2 -2
  2. package/package.json +3 -3
package/dist/bin.js CHANGED
@@ -133,7 +133,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
133
133
  `:`[${n[c]}\r
134
134
  ]`;continue}if(o+=n[c],n[c]==="\\")i=!0;else if(s&&n[c]==="]")s=!1;else if(!s&&n[c]==="[")s=!0}try{new RegExp(o)}catch{return console.warn(`Could not convert regex pattern at ${t.currentPath.join("/")} to a flag-independent form! Falling back to the flag-ignorant source`),e.source}return o}function Dg(e,t){if(t.target==="openAi")console.warn("Warning: OpenAI may not support records in schemas! Try an array of key-value pairs instead.");if(t.target==="openApi3"&&e.keyType?._def.typeName===se.ZodEnum)return{type:"object",required:e.keyType._def.values,properties:e.keyType._def.values.reduce((n,o)=>({...n,[o]:De(e.valueType._def,{...t,currentPath:[...t.currentPath,"properties",o]})??Ht(t)}),{}),additionalProperties:t.rejectedAdditionalProperties};let r={type:"object",additionalProperties:De(e.valueType._def,{...t,currentPath:[...t.currentPath,"additionalProperties"]})??t.allowedAdditionalProperties};if(t.target==="openApi3")return r;if(e.keyType?._def.typeName===se.ZodString&&e.keyType._def.checks?.length){let{type:n,...o}=Lg(e.keyType._def,t);return{...r,propertyNames:o}}else if(e.keyType?._def.typeName===se.ZodEnum)return{...r,propertyNames:{enum:e.keyType._def.values}};else if(e.keyType?._def.typeName===se.ZodBranded&&e.keyType._def.type._def.typeName===se.ZodString&&e.keyType._def.type._def.checks?.length){let{type:n,...o}=Bg(e.keyType._def,t);return{...r,propertyNames:o}}return r}function TO(e,t){if(t.mapStrategy==="record")return Dg(e,t);let r=De(e.keyType._def,{...t,currentPath:[...t.currentPath,"items","items","0"]})||Ht(t),n=De(e.valueType._def,{...t,currentPath:[...t.currentPath,"items","items","1"]})||Ht(t);return{type:"array",maxItems:125,items:{type:"array",items:[r,n],minItems:2,maxItems:2}}}function EO(e){let t=e.values,n=Object.keys(e.values).filter((i)=>typeof t[t[i]]!=="number").map((i)=>t[i]),o=Array.from(new Set(n.map((i)=>typeof i)));return{type:o.length===1?o[0]==="string"?"string":"number":["string","number"],enum:n}}function PO(e){return e.target==="openAi"?void 0:{not:Ht({...e,currentPath:[...e.currentPath,"not"]})}}function AO(e){return e.target==="openApi3"?{enum:["null"],nullable:!0}:{type:"null"}}var Kp={ZodString:"string",ZodNumber:"number",ZodBigInt:"integer",ZodBoolean:"boolean",ZodNull:"null"};function kO(e,t){if(t.target==="openApi3")return IO(e,t);let r=e.options instanceof Map?Array.from(e.options.values()):e.options;if(r.every((n)=>(n._def.typeName in Kp)&&(!n._def.checks||!n._def.checks.length))){let n=r.reduce((o,i)=>{let s=Kp[i._def.typeName];return s&&!o.includes(s)?[...o,s]:o},[]);return{type:n.length>1?n:n[0]}}else if(r.every((n)=>n._def.typeName==="ZodLiteral"&&!n.description)){let n=r.reduce((o,i)=>{let s=typeof i._def.value;switch(s){case"string":case"number":case"boolean":return[...o,s];case"bigint":return[...o,"integer"];case"object":if(i._def.value===null)return[...o,"null"];case"symbol":case"undefined":case"function":default:return o}},[]);if(n.length===r.length){let o=n.filter((i,s,a)=>a.indexOf(i)===s);return{type:o.length>1?o:o[0],enum:r.reduce((i,s)=>i.includes(s._def.value)?i:[...i,s._def.value],[])}}}else if(r.every((n)=>n._def.typeName==="ZodEnum"))return{type:"string",enum:r.reduce((n,o)=>[...n,...o._def.values.filter((i)=>!n.includes(i))],[])};return IO(e,t)}var IO=(e,t)=>{let r=(e.options instanceof Map?Array.from(e.options.values()):e.options).map((n,o)=>De(n._def,{...t,currentPath:[...t.currentPath,"anyOf",`${o}`]})).filter((n)=>!!n&&(!t.strictUnions||typeof n==="object"&&Object.keys(n).length>0));return r.length?{anyOf:r}:void 0};function RO(e,t){if(["ZodString","ZodNumber","ZodBigInt","ZodBoolean","ZodNull"].includes(e.innerType._def.typeName)&&(!e.innerType._def.checks||!e.innerType._def.checks.length)){if(t.target==="openApi3")return{type:Kp[e.innerType._def.typeName],nullable:!0};return{type:[Kp[e.innerType._def.typeName],"null"]}}if(t.target==="openApi3"){let n=De(e.innerType._def,{...t,currentPath:[...t.currentPath]});if(n&&"$ref"in n)return{allOf:[n],nullable:!0};return n&&{...n,nullable:!0}}let r=De(e.innerType._def,{...t,currentPath:[...t.currentPath,"anyOf","0"]});return r&&{anyOf:[r,{type:"null"}]}}function OO(e,t){let r={type:"number"};if(!e.checks)return r;for(let n of e.checks)switch(n.kind){case"int":r.type="integer",aS(r,"type",n.message,t);break;case"min":if(t.target==="jsonSchema7")if(n.inclusive)at(r,"minimum",n.value,n.message,t);else at(r,"exclusiveMinimum",n.value,n.message,t);else{if(!n.inclusive)r.exclusiveMinimum=!0;at(r,"minimum",n.value,n.message,t)}break;case"max":if(t.target==="jsonSchema7")if(n.inclusive)at(r,"maximum",n.value,n.message,t);else at(r,"exclusiveMaximum",n.value,n.message,t);else{if(!n.inclusive)r.exclusiveMaximum=!0;at(r,"maximum",n.value,n.message,t)}break;case"multipleOf":at(r,"multipleOf",n.value,n.message,t);break}return r}function CO(e,t){let r=t.target==="openAi",n={type:"object",properties:{}},o=[],i=e.shape();for(let a in i){let c=i[a];if(c===void 0||c._def===void 0)continue;let d=ZY(c);if(d&&r){if(c._def.typeName==="ZodOptional")c=c._def.innerType;if(!c.isNullable())c=c.nullable();d=!1}let l=De(c._def,{...t,currentPath:[...t.currentPath,"properties",a],propertyPath:[...t.currentPath,"properties",a]});if(l===void 0)continue;if(n.properties[a]=l,!d)o.push(a)}if(o.length)n.required=o;let s=VY(e,t);if(s!==void 0)n.additionalProperties=s;return n}function VY(e,t){if(e.catchall._def.typeName!=="ZodNever")return De(e.catchall._def,{...t,currentPath:[...t.currentPath,"additionalProperties"]});switch(e.unknownKeys){case"passthrough":return t.allowedAdditionalProperties;case"strict":return t.rejectedAdditionalProperties;case"strip":return t.removeAdditionalStrategy==="strict"?t.allowedAdditionalProperties:t.rejectedAdditionalProperties}}function ZY(e){try{return e.isOptional()}catch{return!0}}var MO=(e,t)=>{if(t.currentPath.toString()===t.propertyPath?.toString())return De(e.innerType._def,t);let r=De(e.innerType._def,{...t,currentPath:[...t.currentPath,"anyOf","1"]});return r?{anyOf:[{not:Ht(t)},r]}:Ht(t)};var $O=(e,t)=>{if(t.pipeStrategy==="input")return De(e.in._def,t);else if(t.pipeStrategy==="output")return De(e.out._def,t);let r=De(e.in._def,{...t,currentPath:[...t.currentPath,"allOf","0"]}),n=De(e.out._def,{...t,currentPath:[...t.currentPath,"allOf",r?"1":"0"]});return{allOf:[r,n].filter((o)=>o!==void 0)}};function NO(e,t){return De(e.type._def,t)}function zO(e,t){let n={type:"array",uniqueItems:!0,items:De(e.valueType._def,{...t,currentPath:[...t.currentPath,"items"]})};if(e.minSize)at(n,"minItems",e.minSize.value,e.minSize.message,t);if(e.maxSize)at(n,"maxItems",e.maxSize.value,e.maxSize.message,t);return n}function BO(e,t){if(e.rest)return{type:"array",minItems:e.items.length,items:e.items.map((r,n)=>De(r._def,{...t,currentPath:[...t.currentPath,"items",`${n}`]})).reduce((r,n)=>n===void 0?r:[...r,n],[]),additionalItems:De(e.rest._def,{...t,currentPath:[...t.currentPath,"additionalItems"]})};else return{type:"array",minItems:e.items.length,maxItems:e.items.length,items:e.items.map((r,n)=>De(r._def,{...t,currentPath:[...t.currentPath,"items",`${n}`]})).reduce((r,n)=>n===void 0?r:[...r,n],[])}}function LO(e){return{not:Ht(e)}}function DO(e){return Ht(e)}var UO=(e,t)=>De(e.innerType._def,t);var FO=(e,t,r)=>{switch(t){case se.ZodString:return Lg(e,r);case se.ZodNumber:return OO(e,r);case se.ZodObject:return CO(e,r);case se.ZodBigInt:return hO(e,r);case se.ZodBoolean:return gO();case se.ZodDate:return cS(e,r);case se.ZodUndefined:return LO(r);case se.ZodNull:return AO(r);case se.ZodArray:return mO(e,r);case se.ZodUnion:case se.ZodDiscriminatedUnion:return kO(e,r);case se.ZodIntersection:return wO(e,r);case se.ZodTuple:return BO(e,r);case se.ZodRecord:return Dg(e,r);case se.ZodLiteral:return SO(e,r);case se.ZodEnum:return _O(e);case se.ZodNativeEnum:return EO(e);case se.ZodNullable:return RO(e,r);case se.ZodOptional:return MO(e,r);case se.ZodMap:return TO(e,r);case se.ZodSet:return zO(e,r);case se.ZodLazy:return()=>e.getter()._def;case se.ZodPromise:return NO(e,r);case se.ZodNaN:case se.ZodNever:return PO(r);case se.ZodEffects:return xO(e,r);case se.ZodAny:return Ht(r);case se.ZodUnknown:return DO(r);case se.ZodDefault:return bO(e,r);case se.ZodBranded:return Bg(e,r);case se.ZodReadonly:return UO(e,r);case se.ZodCatch:return yO(e,r);case se.ZodPipeline:return $O(e,r);case se.ZodFunction:case se.ZodVoid:case se.ZodSymbol:return;default:return((n)=>{return})(t)}};function De(e,t,r=!1){let n=t.seen.get(e);if(t.override){let a=t.override?.(e,t,n,r);if(a!==lO)return a}if(n&&!r){let a=WY(n,t);if(a!==void 0)return a}let o={def:e,path:t.currentPath,jsonSchema:void 0};t.seen.set(e,o);let i=FO(e,e.typeName,t),s=typeof i==="function"?De(i(),t):i;if(s)KY(e,t,s);if(t.postProcess){let a=t.postProcess(s,e,t);return o.jsonSchema=s,a}return o.jsonSchema=s,s}var WY=(e,t)=>{switch(t.$refStrategy){case"root":return{$ref:e.path.join("/")};case"relative":return{$ref:zg(t.currentPath,e.path)};case"none":case"seen":{if(e.path.length<t.currentPath.length&&e.path.every((r,n)=>t.currentPath[n]===r))return console.warn(`Recursive reference detected at ${t.currentPath.join("/")}! Defaulting to any`),Ht(t);return t.$refStrategy==="seen"?Ht(t):void 0}}},KY=(e,t,r)=>{if(e.description){if(r.description=e.description,t.markdownDescription)r.markdownDescription=e.description}return r};var lS=(e,t)=>{let r=fO(t),n=typeof t==="object"&&t.definitions?Object.entries(t.definitions).reduce((c,[d,l])=>({...c,[d]:De(l._def,{...r,currentPath:[...r.basePath,r.definitionPath,d]},!0)??Ht(r)}),{}):void 0,o=typeof t==="string"?t:t?.nameStrategy==="title"?void 0:t?.name,i=De(e._def,o===void 0?r:{...r,currentPath:[...r.basePath,r.definitionPath,o]},!1)??Ht(r),s=typeof t==="object"&&t.name!==void 0&&t.nameStrategy==="title"?t.name:void 0;if(s!==void 0)i.title=s;if(r.flags.hasReferencedOpenAiAnyType){if(!n)n={};if(!n[r.openAiAnyTypeName])n[r.openAiAnyTypeName]={type:["string","number","integer","boolean","array","null"],items:{$ref:r.$refStrategy==="relative"?"1":[...r.basePath,r.definitionPath,r.openAiAnyTypeName].join("/")}}}let a=o===void 0?n?{...i,[r.definitionPath]:n}:i:{$ref:[...r.$refStrategy==="relative"?[]:r.basePath,r.definitionPath,o].join("/"),[r.definitionPath]:{...n,[o]:i}};if(r.target==="jsonSchema7")a.$schema="http://json-schema.org/draft-07/schema#";else if(r.target==="jsonSchema2019-09"||r.target==="openAi")a.$schema="https://json-schema.org/draft/2019-09/schema#";if(r.target==="openAi"&&(("anyOf"in a)||("oneOf"in a)||("allOf"in a)||("type"in a)&&Array.isArray(a.type)))console.warn("Warning: OpenAI may not support schemas with unions as roots! Try wrapping it in an object property.");return a};function YY(e){if(!e)return"draft-7";if(e==="jsonSchema7"||e==="draft-7")return"draft-7";if(e==="jsonSchema2019-09"||e==="draft-2020-12")return"draft-2020-12";return"draft-7"}function pS(e,t){if(qn(e))return Lw(e,{target:YY(t?.target),io:t?.pipeStrategy??"input"});return lS(e,{strictUnions:t?.strictUnions??!0,pipeStrategy:t?.pipeStrategy??"input"})}function fS(e){let r=js(e)?.method;if(!r)throw Error("Schema is missing a method literal");let n=lg(r);if(typeof n!=="string")throw Error("Schema method literal must be a string");return n}function mS(e,t){let r=Fs(e,t);if(!r.success)throw r.error;return r.data}var JY=60000;class hS{constructor(e){if(this._options=e,this._requestMessageId=0,this._requestHandlers=new Map,this._requestHandlerAbortControllers=new Map,this._notificationHandlers=new Map,this._responseHandlers=new Map,this._progressHandlers=new Map,this._timeoutInfo=new Map,this._pendingDebouncedNotifications=new Set,this._taskProgressTokens=new Map,this._requestResolvers=new Map,this.setNotificationHandler(xg,(t)=>{this._oncancel(t)}),this.setNotificationHandler(wg,(t)=>{this._onprogress(t)}),this.setRequestHandler(_g,(t)=>({})),this._taskStore=e?.taskStore,this._taskMessageQueue=e?.taskMessageQueue,this._taskStore)this.setRequestHandler(Sg,async(t,r)=>{let n=await this._taskStore.getTask(t.params.taskId,r.sessionId);if(!n)throw new ve(Me.InvalidParams,"Failed to retrieve task: Task not found");return{...n}}),this.setRequestHandler(Tg,async(t,r)=>{let n=async()=>{let o=t.params.taskId;if(this._taskMessageQueue){let s;while(s=await this._taskMessageQueue.dequeue(o,r.sessionId)){if(s.type==="response"||s.type==="error"){let a=s.message,c=a.id,d=this._requestResolvers.get(c);if(d)if(this._requestResolvers.delete(c),s.type==="response")d(a);else{let l=a,p=new ve(l.error.code,l.error.message,l.error.data);d(p)}else{let l=s.type==="response"?"Response":"Error";this._onerror(Error(`${l} handler missing for request ${c}`))}continue}await this._transport?.send(s.message,{relatedRequestId:r.requestId})}}let i=await this._taskStore.getTask(o,r.sessionId);if(!i)throw new ve(Me.InvalidParams,`Task not found: ${o}`);if(!Hs(i.status))return await this._waitForTaskUpdate(o,r.signal),await n();if(Hs(i.status)){let s=await this._taskStore.getTaskResult(o,r.sessionId);return this._clearTaskQueue(o),{...s,_meta:{...s._meta,[qs]:{taskId:o}}}}return await n()};return await n()}),this.setRequestHandler(Eg,async(t,r)=>{try{let{tasks:n,nextCursor:o}=await this._taskStore.listTasks(t.params?.cursor,r.sessionId);return{tasks:n,nextCursor:o,_meta:{}}}catch(n){throw new ve(Me.InvalidParams,`Failed to list tasks: ${n instanceof Error?n.message:String(n)}`)}}),this.setRequestHandler(Ag,async(t,r)=>{try{let n=await this._taskStore.getTask(t.params.taskId,r.sessionId);if(!n)throw new ve(Me.InvalidParams,`Task not found: ${t.params.taskId}`);if(Hs(n.status))throw new ve(Me.InvalidParams,`Cannot cancel task in terminal status: ${n.status}`);await this._taskStore.updateTaskStatus(t.params.taskId,"cancelled","Client cancelled task execution.",r.sessionId),this._clearTaskQueue(t.params.taskId);let o=await this._taskStore.getTask(t.params.taskId,r.sessionId);if(!o)throw new ve(Me.InvalidParams,`Task not found after cancellation: ${t.params.taskId}`);return{_meta:{},...o}}catch(n){if(n instanceof ve)throw n;throw new ve(Me.InvalidRequest,`Failed to cancel task: ${n instanceof Error?n.message:String(n)}`)}})}async _oncancel(e){if(!e.params.requestId)return;this._requestHandlerAbortControllers.get(e.params.requestId)?.abort(e.params.reason)}_setupTimeout(e,t,r,n,o=!1){this._timeoutInfo.set(e,{timeoutId:setTimeout(n,t),startTime:Date.now(),timeout:t,maxTotalTimeout:r,resetTimeoutOnProgress:o,onTimeout:n})}_resetTimeout(e){let t=this._timeoutInfo.get(e);if(!t)return!1;let r=Date.now()-t.startTime;if(t.maxTotalTimeout&&r>=t.maxTotalTimeout)throw this._timeoutInfo.delete(e),ve.fromError(Me.RequestTimeout,"Maximum total timeout exceeded",{maxTotalTimeout:t.maxTotalTimeout,totalElapsed:r});return clearTimeout(t.timeoutId),t.timeoutId=setTimeout(t.onTimeout,t.timeout),!0}_cleanupTimeout(e){let t=this._timeoutInfo.get(e);if(t)clearTimeout(t.timeoutId),this._timeoutInfo.delete(e)}async connect(e){if(this._transport)throw Error("Already connected to a transport. Call close() before connecting to a new transport, or use a separate Protocol instance per connection.");this._transport=e;let t=this.transport?.onclose;this._transport.onclose=()=>{t?.(),this._onclose()};let r=this.transport?.onerror;this._transport.onerror=(o)=>{r?.(o),this._onerror(o)};let n=this._transport?.onmessage;this._transport.onmessage=(o,i)=>{if(n?.(o,i),Up(o)||Q5(o))this._onresponse(o);else if(Zw(o))this._onrequest(o,i);else if(J5(o))this._onnotification(o);else this._onerror(Error(`Unknown message type: ${JSON.stringify(o)}`))},await this._transport.start()}_onclose(){let e=this._responseHandlers;this._responseHandlers=new Map,this._progressHandlers.clear(),this._taskProgressTokens.clear(),this._pendingDebouncedNotifications.clear();for(let r of this._timeoutInfo.values())clearTimeout(r.timeoutId);this._timeoutInfo.clear();for(let r of this._requestHandlerAbortControllers.values())r.abort();this._requestHandlerAbortControllers.clear();let t=ve.fromError(Me.ConnectionClosed,"Connection closed");this._transport=void 0,this.onclose?.();for(let r of e.values())r(t)}_onerror(e){this.onerror?.(e)}_onnotification(e){let t=this._notificationHandlers.get(e.method)??this.fallbackNotificationHandler;if(t===void 0)return;Promise.resolve().then(()=>t(e)).catch((r)=>this._onerror(Error(`Uncaught error in notification handler: ${r}`)))}_onrequest(e,t){let r=this._requestHandlers.get(e.method)??this.fallbackRequestHandler,n=this._transport,o=e.params?._meta?.[qs]?.taskId;if(r===void 0){let d={jsonrpc:"2.0",id:e.id,error:{code:Me.MethodNotFound,message:"Method not found"}};if(o&&this._taskMessageQueue)this._enqueueTaskMessage(o,{type:"error",message:d,timestamp:Date.now()},n?.sessionId).catch((l)=>this._onerror(Error(`Failed to enqueue error response: ${l}`)));else n?.send(d).catch((l)=>this._onerror(Error(`Failed to send an error response: ${l}`)));return}let i=new AbortController;this._requestHandlerAbortControllers.set(e.id,i);let s=W5(e.params)?e.params.task:void 0,a=this._taskStore?this.requestTaskStore(e,n?.sessionId):void 0,c={signal:i.signal,sessionId:n?.sessionId,_meta:e.params?._meta,sendNotification:async(d)=>{if(i.signal.aborted)return;let l={relatedRequestId:e.id};if(o)l.relatedTask={taskId:o};await this.notification(d,l)},sendRequest:async(d,l,p)=>{if(i.signal.aborted)throw new ve(Me.ConnectionClosed,"Request was cancelled");let m={...p,relatedRequestId:e.id};if(o&&!m.relatedTask)m.relatedTask={taskId:o};let h=m.relatedTask?.taskId??o;if(h&&a)await a.updateTaskStatus(h,"input_required");return await this.request(d,l,m)},authInfo:t?.authInfo,requestId:e.id,requestInfo:t?.requestInfo,taskId:o,taskStore:a,taskRequestedTtl:s?.ttl,closeSSEStream:t?.closeSSEStream,closeStandaloneSSEStream:t?.closeStandaloneSSEStream};Promise.resolve().then(()=>{if(s)this.assertTaskHandlerCapability(e.method)}).then(()=>r(e,c)).then(async(d)=>{if(i.signal.aborted)return;let l={result:d,jsonrpc:"2.0",id:e.id};if(o&&this._taskMessageQueue)await this._enqueueTaskMessage(o,{type:"response",message:l,timestamp:Date.now()},n?.sessionId);else await n?.send(l)},async(d)=>{if(i.signal.aborted)return;let l={jsonrpc:"2.0",id:e.id,error:{code:Number.isSafeInteger(d.code)?d.code:Me.InternalError,message:d.message??"Internal error",...d.data!==void 0&&{data:d.data}}};if(o&&this._taskMessageQueue)await this._enqueueTaskMessage(o,{type:"error",message:l,timestamp:Date.now()},n?.sessionId);else await n?.send(l)}).catch((d)=>this._onerror(Error(`Failed to send response: ${d}`))).finally(()=>{if(this._requestHandlerAbortControllers.get(e.id)===i)this._requestHandlerAbortControllers.delete(e.id)})}_onprogress(e){let{progressToken:t,...r}=e.params,n=Number(t),o=this._progressHandlers.get(n);if(!o){this._onerror(Error(`Received a progress notification for an unknown token: ${JSON.stringify(e)}`));return}let i=this._responseHandlers.get(n),s=this._timeoutInfo.get(n);if(s&&i&&s.resetTimeoutOnProgress)try{this._resetTimeout(n)}catch(a){this._responseHandlers.delete(n),this._progressHandlers.delete(n),this._cleanupTimeout(n),i(a);return}o(r)}_onresponse(e){let t=Number(e.id),r=this._requestResolvers.get(t);if(r){if(this._requestResolvers.delete(t),Up(e))r(e);else{let i=new ve(e.error.code,e.error.message,e.error.data);r(i)}return}let n=this._responseHandlers.get(t);if(n===void 0){this._onerror(Error(`Received a response for an unknown message ID: ${JSON.stringify(e)}`));return}this._responseHandlers.delete(t),this._cleanupTimeout(t);let o=!1;if(Up(e)&&e.result&&typeof e.result==="object"){let i=e.result;if(i.task&&typeof i.task==="object"){let s=i.task;if(typeof s.taskId==="string")o=!0,this._taskProgressTokens.set(s.taskId,t)}}if(!o)this._progressHandlers.delete(t);if(Up(e))n(e);else{let i=ve.fromError(e.error.code,e.error.message,e.error.data);n(i)}}get transport(){return this._transport}async close(){await this._transport?.close()}async*requestStream(e,t,r){let{task:n}=r??{};if(!n){try{yield{type:"result",result:await this.request(e,t,r)}}catch(i){yield{type:"error",error:i instanceof ve?i:new ve(Me.InternalError,String(i))}}return}let o;try{let i=await this.request(e,Mu,r);if(i.task)o=i.task.taskId,yield{type:"taskCreated",task:i.task};else throw new ve(Me.InternalError,"Task creation did not return a task");while(!0){let s=await this.getTask({taskId:o},r);if(yield{type:"taskStatus",task:s},Hs(s.status)){if(s.status==="completed")yield{type:"result",result:await this.getTaskResult({taskId:o},t,r)};else if(s.status==="failed")yield{type:"error",error:new ve(Me.InternalError,`Task ${o} failed`)};else if(s.status==="cancelled")yield{type:"error",error:new ve(Me.InternalError,`Task ${o} was cancelled`)};return}if(s.status==="input_required"){yield{type:"result",result:await this.getTaskResult({taskId:o},t,r)};return}let a=s.pollInterval??this._options?.defaultTaskPollInterval??1000;await new Promise((c)=>setTimeout(c,a)),r?.signal?.throwIfAborted()}}catch(i){yield{type:"error",error:i instanceof ve?i:new ve(Me.InternalError,String(i))}}}request(e,t,r){let{relatedRequestId:n,resumptionToken:o,onresumptiontoken:i,task:s,relatedTask:a}=r??{};return new Promise((c,d)=>{let l=(w)=>{d(w)};if(!this._transport){l(Error("Not connected"));return}if(this._options?.enforceStrictCapabilities===!0)try{if(this.assertCapabilityForMethod(e.method),s)this.assertTaskCapability(e.method)}catch(w){l(w);return}r?.signal?.throwIfAborted();let p=this._requestMessageId++,m={...e,jsonrpc:"2.0",id:p};if(r?.onprogress)this._progressHandlers.set(p,r.onprogress),m.params={...e.params,_meta:{...e.params?._meta||{},progressToken:p}};if(s)m.params={...m.params,task:s};if(a)m.params={...m.params,_meta:{...m.params?._meta||{},[qs]:a}};let h=(w)=>{this._responseHandlers.delete(p),this._progressHandlers.delete(p),this._cleanupTimeout(p),this._transport?.send({jsonrpc:"2.0",method:"notifications/cancelled",params:{requestId:p,reason:String(w)}},{relatedRequestId:n,resumptionToken:o,onresumptiontoken:i}).catch((v)=>this._onerror(Error(`Failed to send cancellation: ${v}`)));let A=w instanceof ve?w:new ve(Me.RequestTimeout,String(w));d(A)};this._responseHandlers.set(p,(w)=>{if(r?.signal?.aborted)return;if(w instanceof Error)return d(w);try{let A=Fs(t,w.result);if(!A.success)d(A.error);else c(A.data)}catch(A){d(A)}}),r?.signal?.addEventListener("abort",()=>{h(r?.signal?.reason)});let b=r?.timeout??JY,x=()=>h(ve.fromError(Me.RequestTimeout,"Request timed out",{timeout:b}));this._setupTimeout(p,b,r?.maxTotalTimeout,x,r?.resetTimeoutOnProgress??!1);let _=a?.taskId;if(_){let w=(A)=>{let v=this._responseHandlers.get(p);if(v)v(A);else this._onerror(Error(`Response handler missing for side-channeled request ${p}`))};this._requestResolvers.set(p,w),this._enqueueTaskMessage(_,{type:"request",message:m,timestamp:Date.now()}).catch((A)=>{this._cleanupTimeout(p),d(A)})}else this._transport.send(m,{relatedRequestId:n,resumptionToken:o,onresumptiontoken:i}).catch((w)=>{this._cleanupTimeout(p),d(w)})})}async getTask(e,t){return this.request({method:"tasks/get",params:e},vg,t)}async getTaskResult(e,t,r){return this.request({method:"tasks/result",params:e},t,r)}async listTasks(e,t){return this.request({method:"tasks/list",params:e},Pg,t)}async cancelTask(e,t){return this.request({method:"tasks/cancel",params:e},tO,t)}async notification(e,t){if(!this._transport)throw Error("Not connected");this.assertNotificationCapability(e.method);let r=t?.relatedTask?.taskId;if(r){let s={...e,jsonrpc:"2.0",params:{...e.params,_meta:{...e.params?._meta||{},[qs]:t.relatedTask}}};await this._enqueueTaskMessage(r,{type:"notification",message:s,timestamp:Date.now()});return}if((this._options?.debouncedNotificationMethods??[]).includes(e.method)&&!e.params&&!t?.relatedRequestId&&!t?.relatedTask){if(this._pendingDebouncedNotifications.has(e.method))return;this._pendingDebouncedNotifications.add(e.method),Promise.resolve().then(()=>{if(this._pendingDebouncedNotifications.delete(e.method),!this._transport)return;let s={...e,jsonrpc:"2.0"};if(t?.relatedTask)s={...s,params:{...s.params,_meta:{...s.params?._meta||{},[qs]:t.relatedTask}}};this._transport?.send(s,t).catch((a)=>this._onerror(a))});return}let i={...e,jsonrpc:"2.0"};if(t?.relatedTask)i={...i,params:{...i.params,_meta:{...i.params?._meta||{},[qs]:t.relatedTask}}};await this._transport.send(i,t)}setRequestHandler(e,t){let r=fS(e);this.assertRequestHandlerCapability(r),this._requestHandlers.set(r,(n,o)=>{let i=mS(e,n);return Promise.resolve(t(i,o))})}removeRequestHandler(e){this._requestHandlers.delete(e)}assertCanSetRequestHandler(e){if(this._requestHandlers.has(e))throw Error(`A request handler for ${e} already exists, which would be overridden`)}setNotificationHandler(e,t){let r=fS(e);this._notificationHandlers.set(r,(n)=>{let o=mS(e,n);return Promise.resolve(t(o))})}removeNotificationHandler(e){this._notificationHandlers.delete(e)}_cleanupTaskProgressHandler(e){let t=this._taskProgressTokens.get(e);if(t!==void 0)this._progressHandlers.delete(t),this._taskProgressTokens.delete(e)}async _enqueueTaskMessage(e,t,r){if(!this._taskStore||!this._taskMessageQueue)throw Error("Cannot enqueue task message: taskStore and taskMessageQueue are not configured");let n=this._options?.maxTaskQueueSize;await this._taskMessageQueue.enqueue(e,t,r,n)}async _clearTaskQueue(e,t){if(this._taskMessageQueue){let r=await this._taskMessageQueue.dequeueAll(e,t);for(let n of r)if(n.type==="request"&&Zw(n.message)){let o=n.message.id,i=this._requestResolvers.get(o);if(i)i(new ve(Me.InternalError,"Task cancelled or completed")),this._requestResolvers.delete(o);else this._onerror(Error(`Resolver missing for request ${o} during task ${e} cleanup`))}}}async _waitForTaskUpdate(e,t){let r=this._options?.defaultTaskPollInterval??1000;try{let n=await this._taskStore?.getTask(e);if(n?.pollInterval)r=n.pollInterval}catch{}return new Promise((n,o)=>{if(t.aborted){o(new ve(Me.InvalidRequest,"Request cancelled"));return}let i=setTimeout(n,r);t.addEventListener("abort",()=>{clearTimeout(i),o(new ve(Me.InvalidRequest,"Request cancelled"))},{once:!0})})}requestTaskStore(e,t){let r=this._taskStore;if(!r)throw Error("No task store configured");return{createTask:async(n)=>{if(!e)throw Error("No request provided");return await r.createTask(n,e.id,{method:e.method,params:e.params},t)},getTask:async(n)=>{let o=await r.getTask(n,t);if(!o)throw new ve(Me.InvalidParams,"Failed to retrieve task: Task not found");return o},storeTaskResult:async(n,o,i)=>{await r.storeTaskResult(n,o,i,t);let s=await r.getTask(n,t);if(s){let a=Gp.parse({method:"notifications/tasks/status",params:s});if(await this.notification(a),Hs(s.status))this._cleanupTaskProgressHandler(n)}},getTaskResult:(n)=>r.getTaskResult(n,t),updateTaskStatus:async(n,o,i)=>{let s=await r.getTask(n,t);if(!s)throw new ve(Me.InvalidParams,`Task "${n}" not found - it may have been cleaned up`);if(Hs(s.status))throw new ve(Me.InvalidParams,`Cannot update task "${n}" from terminal status "${s.status}" to "${o}". Terminal states (completed, failed, cancelled) cannot transition to other states.`);await r.updateTaskStatus(n,o,i,t);let a=await r.getTask(n,t);if(a){let c=Gp.parse({method:"notifications/tasks/status",params:a});if(await this.notification(c),Hs(a.status))this._cleanupTaskProgressHandler(n)}},listTasks:(n)=>r.listTasks(n,t)}}}function jO(e){return e!==null&&typeof e==="object"&&!Array.isArray(e)}function qO(e,t){let r={...e};for(let n in t){let o=n,i=t[o];if(i===void 0)continue;let s=r[o];if(jO(s)&&jO(i))r[o]={...s,...i};else r[o]=i}return r}var E4=Vr(dv(),1),P4=Vr(T4(),1);function xie(){let e=new E4.default({strict:!1,validateFormats:!0,validateSchema:!1,allErrors:!0});return P4.default(e),e}class _v{constructor(e){this._ajv=e??xie()}getValidator(e){let t="$id"in e&&typeof e.$id==="string"?this._ajv.getSchema(e.$id)??this._ajv.compile(e):this._ajv.compile(e);return(r)=>{if(t(r))return{valid:!0,data:r,errorMessage:void 0};else return{valid:!1,data:void 0,errorMessage:this._ajv.errorsText(t.errors)}}}}class wv{constructor(e){this._server=e}requestStream(e,t,r){return this._server.requestStream(e,t,r)}createMessageStream(e,t){let r=this._server.getClientCapabilities();if((e.tools||e.toolChoice)&&!r?.sampling?.tools)throw Error("Client does not support sampling tools capability.");if(e.messages.length>0){let n=e.messages[e.messages.length-1],o=Array.isArray(n.content)?n.content:[n.content],i=o.some((d)=>d.type==="tool_result"),s=e.messages.length>1?e.messages[e.messages.length-2]:void 0,a=s?Array.isArray(s.content)?s.content:[s.content]:[],c=a.some((d)=>d.type==="tool_use");if(i){if(o.some((d)=>d.type!=="tool_result"))throw Error("The last message must contain only tool_result content if any is present");if(!c)throw Error("tool_result blocks are not matching any tool_use from the previous message")}if(c){let d=new Set(a.filter((p)=>p.type==="tool_use").map((p)=>p.id)),l=new Set(o.filter((p)=>p.type==="tool_result").map((p)=>p.toolUseId));if(d.size!==l.size||![...d].every((p)=>l.has(p)))throw Error("ids of tool_result blocks and tool_use blocks from previous message do not match")}}return this.requestStream({method:"sampling/createMessage",params:e},Wp,t)}elicitInputStream(e,t){let r=this._server.getClientCapabilities(),n=e.mode??"form";switch(n){case"url":{if(!r?.elicitation?.url)throw Error("Client does not support url elicitation.");break}case"form":{if(!r?.elicitation?.form)throw Error("Client does not support form elicitation.");break}}let o=n==="form"&&e.mode===void 0?{...e,mode:"form"}:e;return this.requestStream({method:"elicitation/create",params:o},zu,t)}async getTask(e,t){return this._server.getTask({taskId:e},t)}async getTaskResult(e,t,r){return this._server.getTaskResult({taskId:e},t,r)}async listTasks(e,t){return this._server.listTasks(e?{cursor:e}:void 0,t)}async cancelTask(e,t){return this._server.cancelTask({taskId:e},t)}}function A4(e,t,r){if(!e)throw Error(`${r} does not support task creation (required for ${t})`);switch(t){case"tools/call":if(!e.tools?.call)throw Error(`${r} does not support task creation for tools/call (required for ${t})`);break;default:break}}function I4(e,t,r){if(!e)throw Error(`${r} does not support task creation (required for ${t})`);switch(t){case"sampling/createMessage":if(!e.sampling?.createMessage)throw Error(`${r} does not support task creation for sampling/createMessage (required for ${t})`);break;case"elicitation/create":if(!e.elicitation?.create)throw Error(`${r} does not support task creation for elicitation/create (required for ${t})`);break;default:break}}class Sv extends hS{constructor(e,t){super(t);if(this._serverInfo=e,this._loggingLevels=new Map,this.LOG_LEVEL_SEVERITY=new Map(Zp.options.map((r,n)=>[r,n])),this.isMessageIgnored=(r,n)=>{let o=this._loggingLevels.get(n);return o?this.LOG_LEVEL_SEVERITY.get(r)<this.LOG_LEVEL_SEVERITY.get(o):!1},this._capabilities=t?.capabilities??{},this._instructions=t?.instructions,this._jsonSchemaValidator=t?.jsonSchemaValidator??new _v,this.setRequestHandler(Yw,(r)=>this._oninitialize(r)),this.setNotificationHandler(Jw,()=>this.oninitialized?.()),this._capabilities.logging)this.setRequestHandler(oS,async(r,n)=>{let o=n.sessionId||n.requestInfo?.headers["mcp-session-id"]||void 0,{level:i}=r.params,s=Zp.safeParse(i);if(s.success)this._loggingLevels.set(o,s.data);return{}})}get experimental(){if(!this._experimental)this._experimental={tasks:new wv(this)};return this._experimental}registerCapabilities(e){if(this.transport)throw Error("Cannot register capabilities after connecting to transport");this._capabilities=qO(this._capabilities,e)}setRequestHandler(e,t){let n=js(e)?.method;if(!n)throw Error("Schema is missing a method literal");let o;if(qn(n)){let s=n;o=s._zod?.def?.value??s.value}else{let s=n;o=s._def?.value??s.value}if(typeof o!=="string")throw Error("Schema method literal must be a string");if(o==="tools/call"){let s=async(a,c)=>{let d=Fs(Nu,a);if(!d.success){let h=d.error instanceof Error?d.error.message:String(d.error);throw new ve(Me.InvalidParams,`Invalid tools/call request: ${h}`)}let{params:l}=d.data,p=await Promise.resolve(t(a,c));if(l.task){let h=Fs(Mu,p);if(!h.success){let b=h.error instanceof Error?h.error.message:String(h.error);throw new ve(Me.InvalidParams,`Invalid task creation result: ${b}`)}return h.data}let m=Fs($g,p);if(!m.success){let h=m.error instanceof Error?m.error.message:String(m.error);throw new ve(Me.InvalidParams,`Invalid tools/call result: ${h}`)}return m.data};return super.setRequestHandler(e,s)}return super.setRequestHandler(e,t)}assertCapabilityForMethod(e){switch(e){case"sampling/createMessage":if(!this._clientCapabilities?.sampling)throw Error(`Client does not support sampling (required for ${e})`);break;case"elicitation/create":if(!this._clientCapabilities?.elicitation)throw Error(`Client does not support elicitation (required for ${e})`);break;case"roots/list":if(!this._clientCapabilities?.roots)throw Error(`Client does not support listing roots (required for ${e})`);break;case"ping":break}}assertNotificationCapability(e){switch(e){case"notifications/message":if(!this._capabilities.logging)throw Error(`Server does not support logging (required for ${e})`);break;case"notifications/resources/updated":case"notifications/resources/list_changed":if(!this._capabilities.resources)throw Error(`Server does not support notifying about resources (required for ${e})`);break;case"notifications/tools/list_changed":if(!this._capabilities.tools)throw Error(`Server does not support notifying of tool list changes (required for ${e})`);break;case"notifications/prompts/list_changed":if(!this._capabilities.prompts)throw Error(`Server does not support notifying of prompt list changes (required for ${e})`);break;case"notifications/elicitation/complete":if(!this._clientCapabilities?.elicitation?.url)throw Error(`Client does not support URL elicitation (required for ${e})`);break;case"notifications/cancelled":break;case"notifications/progress":break}}assertRequestHandlerCapability(e){if(!this._capabilities)return;switch(e){case"completion/complete":if(!this._capabilities.completions)throw Error(`Server does not support completions (required for ${e})`);break;case"logging/setLevel":if(!this._capabilities.logging)throw Error(`Server does not support logging (required for ${e})`);break;case"prompts/get":case"prompts/list":if(!this._capabilities.prompts)throw Error(`Server does not support prompts (required for ${e})`);break;case"resources/list":case"resources/templates/list":case"resources/read":if(!this._capabilities.resources)throw Error(`Server does not support resources (required for ${e})`);break;case"tools/call":case"tools/list":if(!this._capabilities.tools)throw Error(`Server does not support tools (required for ${e})`);break;case"tasks/get":case"tasks/list":case"tasks/result":case"tasks/cancel":if(!this._capabilities.tasks)throw Error(`Server does not support tasks capability (required for ${e})`);break;case"ping":case"initialize":break}}assertTaskCapability(e){I4(this._clientCapabilities?.tasks?.requests,e,"Client")}assertTaskHandlerCapability(e){if(!this._capabilities)return;A4(this._capabilities.tasks?.requests,e,"Server")}async _oninitialize(e){let t=e.params.protocolVersion;return this._clientCapabilities=e.params.capabilities,this._clientVersion=e.params.clientInfo,{protocolVersion:G5.includes(t)?t:Gw,capabilities:this.getCapabilities(),serverInfo:this._serverInfo,...this._instructions&&{instructions:this._instructions}}}getClientCapabilities(){return this._clientCapabilities}getClientVersion(){return this._clientVersion}getCapabilities(){return this._capabilities}async ping(){return this.request({method:"ping"},bg)}async createMessage(e,t){if(e.tools||e.toolChoice){if(!this._clientCapabilities?.sampling?.tools)throw Error("Client does not support sampling tools capability.")}if(e.messages.length>0){let r=e.messages[e.messages.length-1],n=Array.isArray(r.content)?r.content:[r.content],o=n.some((c)=>c.type==="tool_result"),i=e.messages.length>1?e.messages[e.messages.length-2]:void 0,s=i?Array.isArray(i.content)?i.content:[i.content]:[],a=s.some((c)=>c.type==="tool_use");if(o){if(n.some((c)=>c.type!=="tool_result"))throw Error("The last message must contain only tool_result content if any is present");if(!a)throw Error("tool_result blocks are not matching any tool_use from the previous message")}if(a){let c=new Set(s.filter((l)=>l.type==="tool_use").map((l)=>l.id)),d=new Set(n.filter((l)=>l.type==="tool_result").map((l)=>l.toolUseId));if(c.size!==d.size||![...c].every((l)=>d.has(l)))throw Error("ids of tool_result blocks and tool_use blocks from previous message do not match")}}if(e.tools)return this.request({method:"sampling/createMessage",params:e},iS,t);return this.request({method:"sampling/createMessage",params:e},Wp,t)}async elicitInput(e,t){switch(e.mode??"form"){case"url":{if(!this._clientCapabilities?.elicitation?.url)throw Error("Client does not support url elicitation.");let n=e;return this.request({method:"elicitation/create",params:n},zu,t)}case"form":{if(!this._clientCapabilities?.elicitation?.form)throw Error("Client does not support form elicitation.");let n=e.mode==="form"?e:{...e,mode:"form"},o=await this.request({method:"elicitation/create",params:n},zu,t);if(o.action==="accept"&&o.content&&n.requestedSchema)try{let s=this._jsonSchemaValidator.getValidator(n.requestedSchema)(o.content);if(!s.valid)throw new ve(Me.InvalidParams,`Elicitation response content does not match requested schema: ${s.errorMessage}`)}catch(i){if(i instanceof ve)throw i;throw new ve(Me.InternalError,`Error validating elicitation response: ${i instanceof Error?i.message:String(i)}`)}return o}}}createElicitationCompletionNotifier(e,t){if(!this._clientCapabilities?.elicitation?.url)throw Error("Client does not support URL elicitation (required for notifications/elicitation/complete)");return()=>this.notification({method:"notifications/elicitation/complete",params:{elicitationId:e}},t)}async listRoots(e,t){return this.request({method:"roots/list",params:e},sS,t)}async sendLoggingMessage(e,t){if(this._capabilities.logging){if(!this.isMessageIgnored(e.level,t))return this.notification({method:"notifications/message",params:e})}}async sendResourceUpdated(e){return this.notification({method:"notifications/resources/updated",params:e})}async sendResourceListChanged(){return this.notification({method:"notifications/resources/list_changed"})}async sendToolListChanged(){return this.notification({method:"notifications/tools/list_changed"})}async sendPromptListChanged(){return this.notification({method:"notifications/prompts/list_changed"})}}var R4=Symbol.for("mcp.completable");function vv(e){return!!e&&typeof e==="object"&&R4 in e}function O4(e){return e[R4]?.complete}var k4;(function(e){e.Completable="McpCompletable"})(k4||(k4={}));var _ie=/^[A-Za-z0-9._-]{1,128}$/;function wie(e){let t=[];if(e.length===0)return{isValid:!1,warnings:["Tool name cannot be empty"]};if(e.length>128)return{isValid:!1,warnings:[`Tool name exceeds maximum length of 128 characters (current: ${e.length})`]};if(e.includes(" "))t.push("Tool name contains spaces, which may cause parsing issues");if(e.includes(","))t.push("Tool name contains commas, which may cause parsing issues");if(e.startsWith("-")||e.endsWith("-"))t.push("Tool name starts or ends with a dash, which may cause parsing issues in some contexts");if(e.startsWith(".")||e.endsWith("."))t.push("Tool name starts or ends with a dot, which may cause parsing issues in some contexts");if(!_ie.test(e)){let r=e.split("").filter((n)=>!/[A-Za-z0-9._-]/.test(n)).filter((n,o,i)=>i.indexOf(n)===o);return t.push(`Tool name contains invalid characters: ${r.map((n)=>`"${n}"`).join(", ")}`,"Allowed characters are: A-Z, a-z, 0-9, underscore (_), dash (-), and dot (.)"),{isValid:!1,warnings:t}}return{isValid:!0,warnings:t}}function Sie(e,t){if(t.length>0){console.warn(`Tool name validation warning for "${e}":`);for(let r of t)console.warn(` - ${r}`);console.warn("Tool registration will proceed, but this may cause compatibility issues."),console.warn("Consider updating the tool name to conform to the MCP tool naming standard."),console.warn("See SEP: Specify Format for Tool Names (https://github.com/modelcontextprotocol/modelcontextprotocol/issues/986) for more details.")}}function Tv(e){let t=wie(e);return Sie(e,t.warnings),t.isValid}class Ev{constructor(e){this._mcpServer=e}registerToolTask(e,t,r){let n={taskSupport:"required",...t.execution};if(n.taskSupport==="forbidden")throw Error(`Cannot register task-based tool '${e}' with taskSupport 'forbidden'. Use registerTool() instead.`);return this._mcpServer._createRegisteredTool(e,t.title,t.description,t.inputSchema,t.outputSchema,t.annotations,n,t._meta,r)}}class Av{constructor(e,t){this._registeredResources={},this._registeredResourceTemplates={},this._registeredTools={},this._registeredPrompts={},this._toolHandlersInitialized=!1,this._completionHandlerInitialized=!1,this._resourceHandlersInitialized=!1,this._promptHandlersInitialized=!1,this.server=new Sv(e,t)}get experimental(){if(!this._experimental)this._experimental={tasks:new Ev(this)};return this._experimental}async connect(e){return await this.server.connect(e)}async close(){await this.server.close()}setToolRequestHandlers(){if(this._toolHandlersInitialized)return;this.server.assertCanSetRequestHandler(Qs(Mg)),this.server.assertCanSetRequestHandler(Qs(Nu)),this.server.registerCapabilities({tools:{listChanged:!0}}),this.server.setRequestHandler(Mg,()=>({tools:Object.entries(this._registeredTools).filter(([,e])=>e.enabled).map(([e,t])=>{let r={name:e,title:t.title,description:t.description,inputSchema:(()=>{let n=Ru(t.inputSchema);return n?pS(n,{strictUnions:!0,pipeStrategy:"input"}):vie})(),annotations:t.annotations,execution:t.execution,_meta:t._meta};if(t.outputSchema){let n=Ru(t.outputSchema);if(n)r.outputSchema=pS(n,{strictUnions:!0,pipeStrategy:"output"})}return r})})),this.server.setRequestHandler(Nu,async(e,t)=>{try{let r=this._registeredTools[e.params.name];if(!r)throw new ve(Me.InvalidParams,`Tool ${e.params.name} not found`);if(!r.enabled)throw new ve(Me.InvalidParams,`Tool ${e.params.name} disabled`);let n=!!e.params.task,o=r.execution?.taskSupport,i="createTask"in r.handler;if((o==="required"||o==="optional")&&!i)throw new ve(Me.InternalError,`Tool ${e.params.name} has taskSupport '${o}' but was not registered with registerToolTask`);if(o==="required"&&!n)throw new ve(Me.MethodNotFound,`Tool ${e.params.name} requires task augmentation (taskSupport: 'required')`);if(o==="optional"&&!n&&i)return await this.handleAutomaticTaskPolling(r,e,t);let s=await this.validateToolInput(r,e.params.arguments,e.params.name),a=await this.executeToolHandler(r,s,t);if(n)return a;return await this.validateToolOutput(r,a,e.params.name),a}catch(r){if(r instanceof ve){if(r.code===Me.UrlElicitationRequired)throw r}return this.createToolError(r instanceof Error?r.message:String(r))}}),this._toolHandlersInitialized=!0}createToolError(e){return{content:[{type:"text",text:e}],isError:!0}}async validateToolInput(e,t,r){if(!e.inputSchema)return;let o=Ru(e.inputSchema)??e.inputSchema,i=await ug(o,t);if(!i.success){let s="error"in i?i.error:"Unknown error",a=dg(s);throw new ve(Me.InvalidParams,`Input validation error: Invalid arguments for tool ${r}: ${a}`)}return i.data}async validateToolOutput(e,t,r){if(!e.outputSchema)return;if(!("content"in t))return;if(t.isError)return;if(!t.structuredContent)throw new ve(Me.InvalidParams,`Output validation error: Tool ${r} has an output schema but no structured content was provided`);let n=Ru(e.outputSchema),o=await ug(n,t.structuredContent);if(!o.success){let i="error"in o?o.error:"Unknown error",s=dg(i);throw new ve(Me.InvalidParams,`Output validation error: Invalid structured content for tool ${r}: ${s}`)}}async executeToolHandler(e,t,r){let n=e.handler;if("createTask"in n){if(!r.taskStore)throw Error("No task store provided.");let i={...r,taskStore:r.taskStore};if(e.inputSchema)return await Promise.resolve(n.createTask(t,i));else return await Promise.resolve(n.createTask(i))}if(e.inputSchema)return await Promise.resolve(n(t,r));else return await Promise.resolve(n(r))}async handleAutomaticTaskPolling(e,t,r){if(!r.taskStore)throw Error("No task store provided for task-capable tool.");let n=await this.validateToolInput(e,t.params.arguments,t.params.name),o=e.handler,i={...r,taskStore:r.taskStore},s=n?await Promise.resolve(o.createTask(n,i)):await Promise.resolve(o.createTask(i)),a=s.task.taskId,c=s.task,d=c.pollInterval??5000;while(c.status!=="completed"&&c.status!=="failed"&&c.status!=="cancelled"){await new Promise((p)=>setTimeout(p,d));let l=await r.taskStore.getTask(a);if(!l)throw new ve(Me.InternalError,`Task ${a} not found during polling`);c=l}return await r.taskStore.getTaskResult(a)}setCompletionRequestHandler(){if(this._completionHandlerInitialized)return;this.server.assertCanSetRequestHandler(Qs(Ng)),this.server.registerCapabilities({completions:{}}),this.server.setRequestHandler(Ng,async(e)=>{switch(e.params.ref.type){case"ref/prompt":return aO(e),this.handlePromptCompletion(e,e.params.ref);case"ref/resource":return cO(e),this.handleResourceCompletion(e,e.params.ref);default:throw new ve(Me.InvalidParams,`Invalid completion reference: ${e.params.ref}`)}}),this._completionHandlerInitialized=!0}async handlePromptCompletion(e,t){let r=this._registeredPrompts[t.name];if(!r)throw new ve(Me.InvalidParams,`Prompt ${t.name} not found`);if(!r.enabled)throw new ve(Me.InvalidParams,`Prompt ${t.name} disabled`);if(!r.argsSchema)return _f;let o=js(r.argsSchema)?.[e.params.argument.name];if(!vv(o))return _f;let i=O4(o);if(!i)return _f;let s=await i(e.params.argument.value,e.params.context);return M4(s)}async handleResourceCompletion(e,t){let r=Object.values(this._registeredResourceTemplates).find((i)=>i.resourceTemplate.uriTemplate.toString()===t.uri);if(!r){if(this._registeredResources[t.uri])return _f;throw new ve(Me.InvalidParams,`Resource template ${e.params.ref.uri} not found`)}let n=r.resourceTemplate.completeCallback(e.params.argument.name);if(!n)return _f;let o=await n(e.params.argument.value,e.params.context);return M4(o)}setResourceRequestHandlers(){if(this._resourceHandlersInitialized)return;this.server.assertCanSetRequestHandler(Qs(Ig)),this.server.assertCanSetRequestHandler(Qs(kg)),this.server.assertCanSetRequestHandler(Qs(Rg)),this.server.registerCapabilities({resources:{listChanged:!0}}),this.server.setRequestHandler(Ig,async(e,t)=>{let r=Object.entries(this._registeredResources).filter(([o,i])=>i.enabled).map(([o,i])=>({uri:o,name:i.name,...i.metadata})),n=[];for(let o of Object.values(this._registeredResourceTemplates)){if(!o.resourceTemplate.listCallback)continue;let i=await o.resourceTemplate.listCallback(t);for(let s of i.resources)n.push({...o.metadata,...s})}return{resources:[...r,...n]}}),this.server.setRequestHandler(kg,async()=>({resourceTemplates:Object.entries(this._registeredResourceTemplates).map(([t,r])=>({name:t,uriTemplate:r.resourceTemplate.uriTemplate.toString(),...r.metadata}))})),this.server.setRequestHandler(Rg,async(e,t)=>{let r=new URL(e.params.uri),n=this._registeredResources[r.toString()];if(n){if(!n.enabled)throw new ve(Me.InvalidParams,`Resource ${r} disabled`);return n.readCallback(r,t)}for(let o of Object.values(this._registeredResourceTemplates)){let i=o.resourceTemplate.uriTemplate.match(r.toString());if(i)return o.readCallback(r,i,t)}throw new ve(Me.InvalidParams,`Resource ${r} not found`)}),this._resourceHandlersInitialized=!0}setPromptRequestHandlers(){if(this._promptHandlersInitialized)return;this.server.assertCanSetRequestHandler(Qs(Og)),this.server.assertCanSetRequestHandler(Qs(Cg)),this.server.registerCapabilities({prompts:{listChanged:!0}}),this.server.setRequestHandler(Og,()=>({prompts:Object.entries(this._registeredPrompts).filter(([,e])=>e.enabled).map(([e,t])=>({name:e,title:t.title,description:t.description,arguments:t.argsSchema?Tie(t.argsSchema):void 0}))})),this.server.setRequestHandler(Cg,async(e,t)=>{let r=this._registeredPrompts[e.params.name];if(!r)throw new ve(Me.InvalidParams,`Prompt ${e.params.name} not found`);if(!r.enabled)throw new ve(Me.InvalidParams,`Prompt ${e.params.name} disabled`);if(r.argsSchema){let n=Ru(r.argsSchema),o=await ug(n,e.params.arguments);if(!o.success){let a="error"in o?o.error:"Unknown error",c=dg(a);throw new ve(Me.InvalidParams,`Invalid arguments for prompt ${e.params.name}: ${c}`)}let i=o.data,s=r.callback;return await Promise.resolve(s(i,t))}else{let n=r.callback;return await Promise.resolve(n(t))}}),this._promptHandlersInitialized=!0}resource(e,t,...r){let n;if(typeof r[0]==="object")n=r.shift();let o=r[0];if(typeof t==="string"){if(this._registeredResources[t])throw Error(`Resource ${t} is already registered`);let i=this._createRegisteredResource(e,void 0,t,n,o);return this.setResourceRequestHandlers(),this.sendResourceListChanged(),i}else{if(this._registeredResourceTemplates[e])throw Error(`Resource template ${e} is already registered`);let i=this._createRegisteredResourceTemplate(e,void 0,t,n,o);return this.setResourceRequestHandlers(),this.sendResourceListChanged(),i}}registerResource(e,t,r,n){if(typeof t==="string"){if(this._registeredResources[t])throw Error(`Resource ${t} is already registered`);let o=this._createRegisteredResource(e,r.title,t,r,n);return this.setResourceRequestHandlers(),this.sendResourceListChanged(),o}else{if(this._registeredResourceTemplates[e])throw Error(`Resource template ${e} is already registered`);let o=this._createRegisteredResourceTemplate(e,r.title,t,r,n);return this.setResourceRequestHandlers(),this.sendResourceListChanged(),o}}_createRegisteredResource(e,t,r,n,o){let i={name:e,title:t,metadata:n,readCallback:o,enabled:!0,disable:()=>i.update({enabled:!1}),enable:()=>i.update({enabled:!0}),remove:()=>i.update({uri:null}),update:(s)=>{if(typeof s.uri<"u"&&s.uri!==r){if(delete this._registeredResources[r],s.uri)this._registeredResources[s.uri]=i}if(typeof s.name<"u")i.name=s.name;if(typeof s.title<"u")i.title=s.title;if(typeof s.metadata<"u")i.metadata=s.metadata;if(typeof s.callback<"u")i.readCallback=s.callback;if(typeof s.enabled<"u")i.enabled=s.enabled;this.sendResourceListChanged()}};return this._registeredResources[r]=i,i}_createRegisteredResourceTemplate(e,t,r,n,o){let i={resourceTemplate:r,title:t,metadata:n,readCallback:o,enabled:!0,disable:()=>i.update({enabled:!1}),enable:()=>i.update({enabled:!0}),remove:()=>i.update({name:null}),update:(c)=>{if(typeof c.name<"u"&&c.name!==e){if(delete this._registeredResourceTemplates[e],c.name)this._registeredResourceTemplates[c.name]=i}if(typeof c.title<"u")i.title=c.title;if(typeof c.template<"u")i.resourceTemplate=c.template;if(typeof c.metadata<"u")i.metadata=c.metadata;if(typeof c.callback<"u")i.readCallback=c.callback;if(typeof c.enabled<"u")i.enabled=c.enabled;this.sendResourceListChanged()}};this._registeredResourceTemplates[e]=i;let s=r.uriTemplate.variableNames;if(Array.isArray(s)&&s.some((c)=>!!r.completeCallback(c)))this.setCompletionRequestHandler();return i}_createRegisteredPrompt(e,t,r,n,o){let i={title:t,description:r,argsSchema:n===void 0?void 0:nc(n),callback:o,enabled:!0,disable:()=>i.update({enabled:!1}),enable:()=>i.update({enabled:!0}),remove:()=>i.update({name:null}),update:(s)=>{if(typeof s.name<"u"&&s.name!==e){if(delete this._registeredPrompts[e],s.name)this._registeredPrompts[s.name]=i}if(typeof s.title<"u")i.title=s.title;if(typeof s.description<"u")i.description=s.description;if(typeof s.argsSchema<"u")i.argsSchema=nc(s.argsSchema);if(typeof s.callback<"u")i.callback=s.callback;if(typeof s.enabled<"u")i.enabled=s.enabled;this.sendPromptListChanged()}};if(this._registeredPrompts[e]=i,n){if(Object.values(n).some((a)=>{let c=a instanceof mg?a._def?.innerType:a;return vv(c)}))this.setCompletionRequestHandler()}return i}_createRegisteredTool(e,t,r,n,o,i,s,a,c){Tv(e);let d={title:t,description:r,inputSchema:C4(n),outputSchema:C4(o),annotations:i,execution:s,_meta:a,handler:c,enabled:!0,disable:()=>d.update({enabled:!1}),enable:()=>d.update({enabled:!0}),remove:()=>d.update({name:null}),update:(l)=>{if(typeof l.name<"u"&&l.name!==e){if(typeof l.name==="string")Tv(l.name);if(delete this._registeredTools[e],l.name)this._registeredTools[l.name]=d}if(typeof l.title<"u")d.title=l.title;if(typeof l.description<"u")d.description=l.description;if(typeof l.paramsSchema<"u")d.inputSchema=nc(l.paramsSchema);if(typeof l.outputSchema<"u")d.outputSchema=nc(l.outputSchema);if(typeof l.callback<"u")d.handler=l.callback;if(typeof l.annotations<"u")d.annotations=l.annotations;if(typeof l._meta<"u")d._meta=l._meta;if(typeof l.enabled<"u")d.enabled=l.enabled;this.sendToolListChanged()}};return this._registeredTools[e]=d,this.setToolRequestHandlers(),this.sendToolListChanged(),d}tool(e,...t){if(this._registeredTools[e])throw Error(`Tool ${e} is already registered`);let r,n,o,i;if(typeof t[0]==="string")r=t.shift();if(t.length>1){let a=t[0];if(Pv(a)){if(n=t.shift(),t.length>1&&typeof t[0]==="object"&&t[0]!==null&&!Pv(t[0]))i=t.shift()}else if(typeof a==="object"&&a!==null){if(Object.values(a).some((c)=>typeof c==="object"&&c!==null))throw Error(`Tool ${e} expected a Zod schema or ToolAnnotations, but received an unrecognized object`);i=t.shift()}}let s=t[0];return this._createRegisteredTool(e,void 0,r,n,o,i,{taskSupport:"forbidden"},void 0,s)}registerTool(e,t,r){if(this._registeredTools[e])throw Error(`Tool ${e} is already registered`);let{title:n,description:o,inputSchema:i,outputSchema:s,annotations:a,_meta:c}=t;return this._createRegisteredTool(e,n,o,i,s,a,{taskSupport:"forbidden"},c,r)}prompt(e,...t){if(this._registeredPrompts[e])throw Error(`Prompt ${e} is already registered`);let r;if(typeof t[0]==="string")r=t.shift();let n;if(t.length>1)n=t.shift();let o=t[0],i=this._createRegisteredPrompt(e,void 0,r,n,o);return this.setPromptRequestHandlers(),this.sendPromptListChanged(),i}registerPrompt(e,t,r){if(this._registeredPrompts[e])throw Error(`Prompt ${e} is already registered`);let{title:n,description:o,argsSchema:i}=t,s=this._createRegisteredPrompt(e,n,o,i,r);return this.setPromptRequestHandlers(),this.sendPromptListChanged(),s}isConnected(){return this.server.transport!==void 0}async sendLoggingMessage(e,t){return this.server.sendLoggingMessage(e,t)}sendResourceListChanged(){if(this.isConnected())this.server.sendResourceListChanged()}sendToolListChanged(){if(this.isConnected())this.server.sendToolListChanged()}sendPromptListChanged(){if(this.isConnected())this.server.sendPromptListChanged()}}var vie={type:"object",properties:{}};function $4(e){return e!==null&&typeof e==="object"&&"parse"in e&&typeof e.parse==="function"&&"safeParse"in e&&typeof e.safeParse==="function"}function N4(e){return"_def"in e||"_zod"in e||$4(e)}function Pv(e){if(typeof e!=="object"||e===null)return!1;if(N4(e))return!1;if(Object.keys(e).length===0)return!0;return Object.values(e).some($4)}function C4(e){if(!e)return;if(Pv(e))return nc(e);if(!N4(e))throw Error("inputSchema must be a Zod schema or raw shape, received an unrecognized object");return e}function Tie(e){let t=js(e);if(!t)return[];return Object.entries(t).map(([r,n])=>{let o=c5(n),i=u5(n);return{name:r,description:o,required:!i}})}function Qs(e){let r=js(e)?.method;if(!r)throw Error("Schema is missing a method literal");let n=lg(r);if(typeof n==="string")return n;throw Error("Schema method literal must be a string")}function M4(e){return{completion:{values:e.slice(0,100),total:e.length,hasMore:e.length>100}}}var _f={completion:{values:[],hasMore:!1}};import B4 from"node:process";class Iv{append(e){this._buffer=this._buffer?Buffer.concat([this._buffer,e]):e}readMessage(){if(!this._buffer)return null;let e=this._buffer.indexOf(`
135
135
  `);if(e===-1)return null;let t=this._buffer.toString("utf8",0,e).replace(/\r$/,"");return this._buffer=this._buffer.subarray(e+1),Eie(t)}clear(){this._buffer=void 0}}function Eie(e){return X5.parse(JSON.parse(e))}function z4(e){return JSON.stringify(e)+`
136
- `}class kv{constructor(e=B4.stdin,t=B4.stdout){this._stdin=e,this._stdout=t,this._readBuffer=new Iv,this._started=!1,this._ondata=(r)=>{this._readBuffer.append(r),this.processReadBuffer()},this._onerror=(r)=>{this.onerror?.(r)}}async start(){if(this._started)throw Error("StdioServerTransport already started! If using Server class, note that connect() calls start() automatically.");this._started=!0,this._stdin.on("data",this._ondata),this._stdin.on("error",this._onerror)}processReadBuffer(){while(!0)try{let e=this._readBuffer.readMessage();if(e===null)break;this.onmessage?.(e)}catch(e){this.onerror?.(e)}}async close(){if(this._stdin.off("data",this._ondata),this._stdin.off("error",this._onerror),this._stdin.listenerCount("data")===0)this._stdin.pause();this._readBuffer.clear(),this.onclose?.()}send(e){return new Promise((t)=>{let r=z4(e);if(this._stdout.write(r))t();else this._stdout.once("drain",t)})}}var S0={name:"@0xmonaco/mcp-server",version:"1.0.62",type:"module",homepage:"https://docs.0xmonaco.com/sdk/typescript",description:"MCP server for the Monaco SDK",engines:{node:">=18"},bin:"./dist/bin.js",files:["dist"],scripts:{build:"bun build src/bin.ts --outdir dist --target node --format esm --minify",dev:"bun --watch src/bin.ts",start:"bun dist/bin.js",clean:"rm -rf dist",lint:"biome lint .",test:"bun test"},author:"@codebycarson",dependencies:{"@0xmonaco/core":"1.0.62","@0xmonaco/types":"1.0.62","@modelcontextprotocol/sdk":"^1.29.0","node-fetch":"^3.3.2",viem:"^2.56.3",ws:"^8.21.0",zod:"^4.4.3"},devDependencies:{"@types/bun":"latest","@types/ws":"^8.18.1"}};var v0=["read","market-maker","full"],Wo=[{name:"search_docs",description:"Search the Monaco documentation for protocol, SDK, trading, and development guides.",category:"search",authMode:"public",sideEffect:"read-only"},{name:"get_trading_pairs",description:"List trading pairs with optional filters (market type, base/quote token, active status).",category:"market",authMode:"public",sideEffect:"read-only"},{name:"get_trading_pair_by_symbol",description:"Look up a trading pair by symbol (e.g. `BTC/USDC`).",category:"market",authMode:"public",sideEffect:"read-only"},{name:"get_candlesticks",description:"Fetch OHLCV candlestick data for a trading pair.",category:"market",authMode:"public",sideEffect:"read-only"},{name:"get_market_metadata",description:"Get tick size, minimum order size, and trading rules for a pair.",category:"market",authMode:"public",sideEffect:"read-only"},{name:"get_screener",description:"Screen trading pairs with market stats (price, volume, change), filtered by market type, category, and active status.",category:"market",authMode:"public",sideEffect:"read-only"},{name:"get_market_stats",description:"Get exchange-wide life-to-date cumulative volume and trade count across all markets.",category:"market",authMode:"public",sideEffect:"read-only"},{name:"get_perp_market_config",description:"Get a perpetual market's configuration (leverage limits, margin requirements, funding parameters).",category:"perp",authMode:"public",sideEffect:"read-only"},{name:"get_perp_market_summary",description:"Get a perpetual market's live summary (mark/index price, funding rate, open interest, 24h stats).",category:"perp",authMode:"public",sideEffect:"read-only"},{name:"get_mark_price",description:"Get the current mark price for a perpetual market.",category:"perp",authMode:"public",sideEffect:"read-only"},{name:"get_index_price",description:"Get the current index (oracle) price for a perpetual market.",category:"perp",authMode:"public",sideEffect:"read-only"},{name:"get_funding_state",description:"Get the current funding rate and next funding time for a perpetual market.",category:"perp",authMode:"public",sideEffect:"read-only"},{name:"get_open_interest",description:"Get the current open interest for a perpetual market.",category:"perp",authMode:"public",sideEffect:"read-only"},{name:"get_funding_history",description:"List historical funding-rate records for a perpetual market.",category:"perp",authMode:"public",sideEffect:"read-only"},{name:"get_all_funding_history",description:"List historical funding-rate records across all perpetual markets.",category:"perp",authMode:"public",sideEffect:"read-only"},{name:"get_orderbook",description:"Fetch a current orderbook snapshot with bids and asks.",category:"orderbook",authMode:"public",sideEffect:"read-only"},{name:"get_trades",description:"Fetch historical trades for a trading pair.",category:"trades",authMode:"public",sideEffect:"read-only"},{name:"place_limit_order",description:"Place a limit order with price, quantity, and time-in-force. The SDK supplies an idempotency key if omitted. Retain an explicit key to retry the same submission within 24 hours of acceptance. Calling again without the original key is not idempotent; never retry an ambiguous failure with a new key. If the original key is unavailable, report the ambiguity.",category:"trading",authMode:"authenticated",capability:"market-maker",sideEffect:"mutating"},{name:"place_market_order",description:"Place a market order — executes immediately inside a mandatory 1,000 bps protective price band, so it may partially fill or be rejected. The SDK supplies an idempotency key if omitted. Retain an explicit key to retry the same submission within 24 hours of acceptance. Calling again without the original key is not idempotent; never retry an ambiguous failure with a new key. If the original key is unavailable, report the ambiguity.",category:"trading",authMode:"authenticated",capability:"market-maker",sideEffect:"mutating"},{name:"replace_order",description:"Modify an existing order's price and/or quantity. Not idempotent — an ambiguous failure (timeout/network error/5xx with no order) cannot be resolved from inside MCP, which has no order-stream tool; never retry, and report the ambiguity instead.",category:"trading",authMode:"authenticated",capability:"market-maker",sideEffect:"mutating"},{name:"cancel_order",description:"Cancel a single order by ID.",category:"trading",authMode:"authenticated",capability:"market-maker",sideEffect:"mutating"},{name:"batch_cancel_orders",description:"Cancel multiple orders by ID (non-atomic — a failed leg does not stop the others).",category:"trading",authMode:"authenticated",capability:"market-maker",sideEffect:"mutating"},{name:"batch_cancel_all_orders",description:"Cancel all open orders, optionally filtered to a trading pair (unfiltered, it cancels your entire open-order book).",category:"trading",authMode:"authenticated",capability:"market-maker",sideEffect:"mutating"},{name:"batch_close_all_positions",description:"Close all open perpetual positions with market reduce-only orders (best-effort, optional pair filter).",category:"trading",authMode:"authenticated",capability:"market-maker",sideEffect:"mutating"},{name:"get_orders",description:"List your orders with optional filters.",category:"trading",authMode:"authenticated",capability:"read",sideEffect:"read-only"},{name:"get_order",description:"Get details for a specific order by ID.",category:"trading",authMode:"authenticated",capability:"read",sideEffect:"read-only"},{name:"get_positions",description:"List your perpetual positions with optional filters (margin account, trading pair, status).",category:"positions",authMode:"authenticated",capability:"read",sideEffect:"read-only"},{name:"get_position",description:"Get details for a specific perpetual position by ID.",category:"positions",authMode:"authenticated",capability:"read",sideEffect:"read-only"},{name:"get_position_risk",description:"Get liquidation price, margin ratio, and risk metrics for a perpetual position.",category:"positions",authMode:"authenticated",capability:"read",sideEffect:"read-only"},{name:"get_position_history",description:"List historical (closed/reduced) perpetual position records with optional filters.",category:"positions",authMode:"authenticated",capability:"read",sideEffect:"read-only"},{name:"get_position_pnl_history",description:"Get the PnL history time series for a perpetual position over an interval.",category:"positions",authMode:"authenticated",capability:"read",sideEffect:"read-only"},{name:"close_position",description:"Close a perpetual position with a market, limit, or IOC reduce order.",category:"positions",authMode:"authenticated",capability:"market-maker",sideEffect:"mutating"},{name:"get_profile",description:"Fetch your core profile (address, username, account type, withdrawal status).",category:"profile",authMode:"authenticated",capability:"read",sideEffect:"read-only"},{name:"get_balances",description:"List token balances with pagination.",category:"profile",authMode:"authenticated",capability:"read",sideEffect:"read-only"},{name:"get_balance_by_asset",description:"Get balance for a specific asset.",category:"profile",authMode:"authenticated",capability:"read",sideEffect:"read-only"},{name:"get_movements",description:"Fetch transaction and movement history with optional filters.",category:"profile",authMode:"authenticated",capability:"read",sideEffect:"read-only"},{name:"get_user_trades",description:"List your own trade fills with optional filters and cursor pagination.",category:"profile",authMode:"authenticated",capability:"read",sideEffect:"read-only"},{name:"get_funding_payments",description:"List your perpetual funding payments with optional filters (trading pair, position, margin account).",category:"profile",authMode:"authenticated",capability:"read",sideEffect:"read-only"},{name:"get_portfolio_summary",description:"Get your authoritative portfolio summary (equity, PnL, exposure) over a period.",category:"portfolio",authMode:"authenticated",capability:"read",sideEffect:"read-only"},{name:"get_portfolio_performance",description:"Get your portfolio performance time series over a period.",category:"portfolio",authMode:"authenticated",capability:"read",sideEffect:"read-only"},{name:"get_portfolio_realized_pnl",description:"Get your realized PnL breakdown over a period.",category:"portfolio",authMode:"authenticated",capability:"read",sideEffect:"read-only"},{name:"get_portfolio_assets",description:"Get your per-asset portfolio allocation and balances over a period.",category:"portfolio",authMode:"authenticated",capability:"read",sideEffect:"read-only"},{name:"get_portfolio_margin",description:"Get your portfolio margin overview (collateral, maintenance margin, health).",category:"portfolio",authMode:"authenticated",capability:"read",sideEffect:"read-only"},{name:"get_margin_accounts",description:"List your margin accounts with optional filters (state, trading pair).",category:"margin",authMode:"authenticated",capability:"read",sideEffect:"read-only"},{name:"get_parent_margin_account_summary",description:"Get your parent (cross) margin account summary.",category:"margin",authMode:"authenticated",capability:"read",sideEffect:"read-only"},{name:"get_available_collateral",description:"Get available (unlocked) collateral for allocating to margin accounts or risk buckets.",category:"margin",authMode:"authenticated",capability:"read",sideEffect:"read-only"},{name:"get_parent_margin_account_movements",description:"List collateral movements for your parent (cross) margin account.",category:"margin",authMode:"authenticated",capability:"read",sideEffect:"read-only"},{name:"simulate_parent_margin_order_risk",description:"Preview the risk impact of a prospective order against your parent (cross) margin account (read-only simulation).",category:"margin",authMode:"authenticated",capability:"read",sideEffect:"read-only"},{name:"simulate_risk_bucket_order_risk",description:"Preview the risk impact of a prospective order for a new or existing risk bucket (read-only simulation).",category:"margin",authMode:"authenticated",capability:"read",sideEffect:"read-only"},{name:"transfer_collateral_to_parent_margin_account",description:"Move collateral from spot into your parent (cross) margin account.",category:"margin",authMode:"authenticated",capability:"full",sideEffect:"fund-movement"},{name:"transfer_collateral_from_parent_margin_account",description:"Move collateral out of your parent (cross) margin account back to spot.",category:"margin",authMode:"authenticated",capability:"full",sideEffect:"fund-movement"},{name:"transfer_collateral_to_risk_bucket",description:"Allocate collateral into an isolated or cross risk bucket.",category:"margin",authMode:"authenticated",capability:"full",sideEffect:"fund-movement"},{name:"simulate_fees",description:"Simulate fees for an order before placing it.",category:"fees",authMode:"authenticated",capability:"read",sideEffect:"read-only"},{name:"get_my_fee_tier",description:"Get your current fee tier, rolling 14-day volumes, and a pair's fee schedule.",category:"fees",authMode:"authenticated",capability:"read",sideEffect:"read-only"},{name:"vault_approve",description:"Approve the vault contract to spend a token.",category:"vault",authMode:"authenticated",capability:"full",sideEffect:"fund-movement"},{name:"vault_deposit",description:"Deposit tokens into the vault (optional `target`: `spot` default, or `margin` to route into collateral).",category:"vault",authMode:"authenticated",capability:"full",sideEffect:"fund-movement"},{name:"vault_withdraw",description:"Withdraw tokens from the vault.",category:"vault",authMode:"authenticated",capability:"full",sideEffect:"fund-movement"},{name:"vault_get_allowance",description:"Check current token allowance for the vault.",category:"vault",authMode:"authenticated",capability:"read",sideEffect:"read-only"},{name:"vault_needs_approval",description:"Check whether an approval transaction is needed before depositing.",category:"vault",authMode:"authenticated",capability:"read",sideEffect:"read-only"},{name:"get_pending_withdrawals",description:"List your pending withdrawals still awaiting on-chain root confirmation.",category:"vault",authMode:"authenticated",capability:"read",sideEffect:"read-only"},{name:"request_faucet",description:"Request test tokens for all trading pairs.",category:"faucet",authMode:"authenticated",capability:"market-maker",sideEffect:"mutating",excludedOnMainnet:!0},{name:"get_faucet_info",description:"Check remaining faucet quota, next-request time, and recent mint history.",category:"faucet",authMode:"authenticated",capability:"read",sideEffect:"read-only",excludedOnMainnet:!0},{name:"get_trader_code_info",description:"Look up a trader code's details (no credentials required).",category:"pitpass",authMode:"public",sideEffect:"read-only"},{name:"check_trader_code_availability",description:"Public advisory check of whether a custom PitPass TraderCode handle is available (no credentials required).",category:"pitpass",authMode:"public",sideEffect:"read-only"},{name:"get_my_trader_code",description:"Fetch your own trader code.",category:"pitpass",authMode:"authenticated",capability:"read",sideEffect:"read-only"},{name:"set_trader_code",description:"Claim or edit your custom (vanity) PitPass TraderCode handle.",category:"pitpass",authMode:"authenticated",capability:"market-maker",sideEffect:"mutating"},{name:"clear_trader_code",description:"Clear your custom PitPass TraderCode handle, reverting to the wallet-derived default.",category:"pitpass",authMode:"authenticated",capability:"market-maker",sideEffect:"mutating"},{name:"get_rewards_balance",description:"Fetch your PitPass rewards-bucket balances across reward tokens.",category:"pitpass",authMode:"authenticated",capability:"read",sideEffect:"read-only"},{name:"transfer_rewards",description:"Move your earned PitPass rewards from the rewards bucket into your own tradeable balance (ledger-only).",category:"pitpass",authMode:"authenticated",capability:"full",sideEffect:"fund-movement"},{name:"get_pulse",description:"Get the latest market-pulse news feed: AI-synthesized, per-asset headlines with sentiment tags.",category:"pulse",authMode:"public",sideEffect:"read-only"}],k_e=Wo.map((e)=>e.name),L4=Wo.filter((e)=>e.authMode==="public").map((e)=>e.name),R_e=Wo.filter((e)=>e.authMode==="authenticated"&&e.capability==="read").map((e)=>e.name),O_e=Wo.filter((e)=>e.authMode==="authenticated"&&e.capability==="market-maker").map((e)=>e.name),C_e=Wo.filter((e)=>e.authMode==="authenticated"&&e.capability==="full").map((e)=>e.name),M_e=Wo.filter((e)=>e.excludedOnMainnet).map((e)=>e.name),D4=Wo.filter((e)=>e.sideEffect==="fund-movement").map((e)=>e.name);var Aie=new Map(Wo.map((e)=>[e.name,e.sideEffect]));function U4(e){let t=Aie.get(e);if(!t)return;let r=t==="read-only";return{readOnlyHint:r,destructiveHint:!r}}var F4={read:0,"market-maker":1,full:2},Rv=L4,Ov=Object.fromEntries(Wo.filter((e)=>e.authMode==="authenticated").map((e)=>[e.name,{capability:e.capability??"full",...e.sideEffect==="fund-movement"?{fundMovement:!0}:{},...e.excludedOnMainnet?{excludedOnMainnet:!0}:{}}])),j4=Object.fromEntries(Object.entries(Ov).map(([e,t])=>[e,t.capability])),z_e=new Set(D4);function q4(e){let t=Ov[e];if(!t)return"full";if(t.fundMovement)return"full";return t.capability}function H4(e){return q4(e)==="read"}function G4(e,t){if(t.network==="mainnet"&&Ov[e]?.excludedOnMainnet)return!1;if(t.deny.includes(e))return!1;if(Rv.includes(e))return!0;if(!t.authenticated)return!1;if(t.allow.includes(e))return!0;return F4[t.capability]>=F4[q4(e)]}var Iie=new Set([...Rv,...Object.keys(j4)]),kie={mainnet:"https://evm-rpc.sei-apis.com",development:"https://evm-rpc-testnet.sei-apis.com",staging:"https://evm-rpc-testnet.sei-apis.com",local:"http://localhost:8545"};function V4(e){if(!e)return[];return e.split(",").map((t)=>t.trim()).filter(Boolean)}function lc(e=process.env){let t=e.MONACO_PRIVATE_KEY||null;if(t&&!t.startsWith("0x"))throw Error("MONACO_PRIVATE_KEY must start with '0x'.");let r=e.MONACO_CLIENT_ID||null;if(t&&!r)throw Error("MONACO_CLIENT_ID is required when MONACO_PRIVATE_KEY is set.");let n=["mainnet","development","staging","local"],o=e.MONACO_NETWORK;if(t&&!o)throw Error(`MONACO_NETWORK must be set explicitly (one of: ${n.join(", ")}) when MONACO_PRIVATE_KEY is configured. Refusing to default to mainnet for an authenticated session.`);let i=o||"mainnet";if(!n.includes(i))throw Error(`MONACO_NETWORK must be one of: ${n.join(", ")}.`);let s=i,a=e.MONACO_CAPABILITY;if(a&&!v0.includes(a))throw Error(`MONACO_CAPABILITY must be one of: ${v0.join(", ")}.`);let c=a||"read",d=V4(e.MONACO_TOOL_ALLOWLIST),l=V4(e.MONACO_TOOL_DENYLIST),p=[...d,...l].filter((b)=>!Iie.has(b)).length;if(p>0)throw Error(`${p} unknown tool name(s) in MONACO_TOOL_ALLOWLIST/MONACO_TOOL_DENYLIST. Check them against the documented tool list.`);let m=e.MONACO_RPC_URL||kie[s],h=null;if(e.MONACO_DELEGATED_OWNER_USER_ID!==void 0){let b=e.MONACO_DELEGATED_OWNER_USER_ID.trim();if(!b)throw Error("MONACO_DELEGATED_OWNER_USER_ID must be a non-empty owner user id when set.");if(!t||!r)throw Error("MONACO_DELEGATED_OWNER_USER_ID requires MONACO_PRIVATE_KEY and MONACO_CLIENT_ID (the agent authenticates as itself before adopting the owner).");h=b}return{privateKey:t,clientId:r,network:s,seiRpcUrl:m,capability:c,allow:d,deny:l,delegatedOwnerUserId:h}}function Rie(e){return e.replace(/_([a-z])/g,(t,r)=>r.toUpperCase())}function en(e){if(e===null||e===void 0)return e;if(typeof e!=="object")return e;if(Array.isArray(e))return e.map((r)=>en(r));let t={};for(let[r,n]of Object.entries(e))t[Rie(r)]=typeof n==="object"&&n!==null?en(n):n;return t}function Z4(e){return e instanceof Uint8Array||ArrayBuffer.isView(e)&&e.constructor.name==="Uint8Array"&&"BYTES_PER_ELEMENT"in e&&e.BYTES_PER_ELEMENT===1}var Cv=(e)=>e?`"${e}" `:"";function Oie(e,t=""){if(typeof e!=="number")throw TypeError(Cv(t)+"expected number, got "+typeof e);if(!Number.isSafeInteger(e)||e<0)throw RangeError(Cv(t)+"expected integer >= 0, got "+e);return e}function T0(e,t,r=""){if(Z4(e)&&(t===void 0||e.length===t))return e;if(t!==void 0)Oie(t,"length");let n=Z4(e),o=t!==void 0?` of length ${t}`:"",i=n?`length=${e.length}`:`type=${typeof e}`,s=Cv(r)+"expected Uint8Array"+o+", got "+i;if(!n)throw TypeError(s);throw RangeError(s)}var Cie=(e,t)=>{if(e===null||typeof e!=="object"||Array.isArray(e))throw TypeError((t==="object"?"":`"${t}" `)+"expected object, got type="+typeof e)},W4=(e,t)=>{Cie(e,t);let r=Object.getPrototypeOf(e);if(r!==Object.prototype&&r!==null)throw TypeError(`"${t}" expected plain object`);if(Object.hasOwn(e,"__proto__"))throw TypeError(`"${t}.__proto__" is not allowed`)};function Mv(e,t=!0){if(e.destroyed)throw Error("hash was destroyed");if(t&&e.finished)throw Error("digest() was already called")}function Y4(e,t){T0(e,void 0,"output");let r=t.outputLen;if(!(e.length>=r))throw RangeError('"output" expected length >= '+r)}function E0(...e){for(let t=0;t<e.length;t++)e[t].fill(0)}function P0(e){return new DataView(e.buffer,e.byteOffset,e.byteLength)}function _o(e,t){return e<<32-t|e>>>t}var J4=(()=>typeof Uint8Array.from([]).toHex==="function"&&typeof Uint8Array.fromHex==="function")(),Mie=Array.from({length:256},(e,t)=>t.toString(16).padStart(2,"0"));function Li(e){if(T0(e),J4)return e.toHex();let t="";for(let r=0;r<e.length;r++)t+=Mie[e[r]];return t}function K4(e){return e>=48&&e<=57?e-48:e>=65&&e<=70?e-55:e>=97&&e<=102?e-87:void 0}function wf(e){if(typeof e!=="string")throw TypeError("hex string expected, got "+typeof e);if(J4)try{return Uint8Array.fromHex(e)}catch(o){if(o instanceof SyntaxError)throw RangeError(o.message);throw o}let t=e.length,r=t/2;if(t%2)throw RangeError("hex string expected, got unpadded hex of length "+t);let n=new Uint8Array(r);for(let o=0,i=0;o<r;o++,i+=2){let s=K4(e.charCodeAt(i)),a=K4(e.charCodeAt(i+1));if(s===void 0||a===void 0){let c=e[i]+e[i+1];throw RangeError('hex string expected, got non-hex character "'+c+'" at index '+i)}n[o]=s*16+a}return n}function pc(e){if(typeof e!=="string")throw TypeError("string expected");let t=new TextEncoder().encode(e);try{return new Uint8Array(t)}finally{E0(t)}}function $ie(e,t,r="opts"){if(W4(e,"defaults"),t!==void 0)W4(t,r);return Object.assign(Object.create(null),e,t)}function Q4(e,t={}){if(typeof e!=="function")throw TypeError('"hashCons" expected function, got type='+typeof e);t=$ie({},t,"info");let r=(o,i)=>e(i).update(o).digest(),n=e(void 0);return r.outputLen=n.outputLen,r.blockLen=n.blockLen,r.canXOF=n.canXOF,r.create=(o)=>e(o),Object.assign(r,t),Object.freeze(r)}var X4=(e)=>({oid:Uint8Array.from([6,9,96,134,72,1,101,3,4,2,e])});Lv();hc();Qv();td();If();/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */var Jo=BigInt(0),rn=BigInt(1),D8=BigInt(2),Qie=BigInt(8),Xie={zip215:!0};function ese(e){let t=kf(e);return Hi(e,{hash:"function",a:"bigint",d:"bigint",randomBytes:"function"},{adjustScalarBytes:"function",domain:"function",uvRatio:"function",mapToCurve:"function"}),Object.freeze({...t})}function U8(e){let t=ese(e),{Fp:r,n,prehash:o,hash:i,randomBytes:s,nByteLength:a,h:c}=t,d=D8<<BigInt(a*8)-rn,l=r.create,p=Gi(t.n,t.nBitLength);function m(z,F){let Y=r.sqr(z),we=r.sqr(F),te=r.add(r.mul(t.a,Y),we),$e=r.add(r.ONE,r.mul(t.d,r.mul(Y,we)));return r.eql(te,$e)}if(!m(t.Gx,t.Gy))throw Error("bad curve params: generator point");let h=t.uvRatio||((z,F)=>{try{return{isValid:!0,value:r.sqrt(z*r.inv(F))}}catch(Y){return{isValid:!1,value:Jo}}}),b=t.adjustScalarBytes||((z)=>z),x=t.domain||((z,F,Y)=>{if(Yo("phflag",Y),F.length||Y)throw Error("Contexts/pre-hash are not supported");return z});function _(z,F,Y=!1){let we=Y?rn:Jo;On("coordinate "+z,F,we,d)}function w(z){if(!(z instanceof T))throw Error("ExtendedPoint expected")}let A=Xu((z,F)=>{let{ex:Y,ey:we,ez:te}=z,$e=z.is0();if(F==null)F=$e?Qie:r.inv(te);let Ee=l(Y*F),Ae=l(we*F),tt=l(te*F);if($e)return{x:Jo,y:rn};if(tt!==rn)throw Error("invZ was invalid");return{x:Ee,y:Ae}}),v=Xu((z)=>{let{a:F,d:Y}=t;if(z.is0())throw Error("bad point: ZERO");let{ex:we,ey:te,ez:$e,et:Ee}=z,Ae=l(we*we),tt=l(te*te),yt=l($e*$e),ft=l(yt*yt),q=l(Ae*F),ne=l(yt*l(q+tt)),ce=l(ft+l(Y*l(Ae*tt)));if(ne!==ce)throw Error("bad point: equation left != right (1)");let he=l(we*te),Q=l($e*Ee);if(he!==Q)throw Error("bad point: equation left != right (2)");return!0});class T{constructor(z,F,Y,we){_("x",z),_("y",F),_("z",Y,!0),_("t",we),this.ex=z,this.ey=F,this.ez=Y,this.et=we,Object.freeze(this)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static fromAffine(z){if(z instanceof T)throw Error("extended point not allowed");let{x:F,y:Y}=z||{};return _("x",F),_("y",Y),new T(F,Y,rn,l(F*Y))}static normalizeZ(z){let F=ed(r,z.map((Y)=>Y.ez));return z.map((Y,we)=>Y.toAffine(F[we])).map(T.fromAffine)}static msm(z,F){return N0(T,p,z,F)}_setWindowSize(z){O.setWindowSize(this,z)}assertValidity(){v(this)}equals(z){w(z);let{ex:F,ey:Y,ez:we}=this,{ex:te,ey:$e,ez:Ee}=z,Ae=l(F*Ee),tt=l(te*we),yt=l(Y*Ee),ft=l($e*we);return Ae===tt&&yt===ft}is0(){return this.equals(T.ZERO)}negate(){return new T(l(-this.ex),this.ey,this.ez,l(-this.et))}double(){let{a:z}=t,{ex:F,ey:Y,ez:we}=this,te=l(F*F),$e=l(Y*Y),Ee=l(D8*l(we*we)),Ae=l(z*te),tt=F+Y,yt=l(l(tt*tt)-te-$e),ft=Ae+$e,q=ft-Ee,ne=Ae-$e,ce=l(yt*q),he=l(ft*ne),Q=l(yt*ne),Be=l(q*ft);return new T(ce,he,Be,Q)}add(z){w(z);let{a:F,d:Y}=t,{ex:we,ey:te,ez:$e,et:Ee}=this,{ex:Ae,ey:tt,ez:yt,et:ft}=z,q=l(we*Ae),ne=l(te*tt),ce=l(Ee*Y*ft),he=l($e*yt),Q=l((we+te)*(Ae+tt)-q-ne),Be=he-ce,bt=he+ce,xt=l(ne-F*q),Qe=l(Q*Be),vt=l(bt*xt),wt=l(Q*xt),Hr=l(Be*bt);return new T(Qe,vt,Hr,wt)}subtract(z){return this.add(z.negate())}wNAF(z){return O.wNAFCached(this,z,T.normalizeZ)}multiply(z){let F=z;On("scalar",F,rn,n);let{p:Y,f:we}=this.wNAF(F);return T.normalizeZ([Y,we])[0]}multiplyUnsafe(z,F=T.ZERO){let Y=z;if(On("scalar",Y,Jo,n),Y===Jo)return k;if(this.is0()||Y===rn)return this;return O.wNAFCachedUnsafe(this,Y,T.normalizeZ,F)}isSmallOrder(){return this.multiplyUnsafe(c).is0()}isTorsionFree(){return O.unsafeLadder(this,n).is0()}toAffine(z){return A(this,z)}clearCofactor(){let{h:z}=t;if(z===rn)return this;return this.multiplyUnsafe(z)}static fromHex(z,F=!1){let{d:Y,a:we}=t,te=r.BYTES;z=Gt("pointHex",z,te),Yo("zip215",F);let $e=z.slice(),Ee=z[te-1];$e[te-1]=Ee&-129;let Ae=bc($e),tt=F?d:r.ORDER;On("pointHex.y",Ae,Jo,tt);let yt=l(Ae*Ae),ft=l(yt-rn),q=l(Y*yt-we),{isValid:ne,value:ce}=h(ft,q);if(!ne)throw Error("Point.fromHex: invalid y coordinate");let he=(ce&rn)===rn,Q=(Ee&128)!==0;if(!F&&ce===Jo&&Q)throw Error("Point.fromHex: x=0 and x_0=1");if(Q!==he)ce=l(-ce);return T.fromAffine({x:ce,y:Ae})}static fromPrivateKey(z){let{scalar:F}=R(z);return P.multiply(F)}toRawBytes(){let{x:z,y:F}=this.toAffine(),Y=Qu(F,r.BYTES);return Y[Y.length-1]|=z&rn?128:0,Y}toHex(){return ra(this.toRawBytes())}}T.BASE=new T(t.Gx,t.Gy,rn,l(t.Gx*t.Gy)),T.ZERO=new T(Jo,rn,rn,Jo);let{BASE:P,ZERO:k}=T,O=$0(T,a*8);function N(z){return Pt(z,n)}function j(z){return N(bc(z))}function R(z){let F=r.BYTES;z=Gt("private key",z,F);let Y=Gt("hashed private key",i(z),2*F),we=b(Y.slice(0,F)),te=Y.slice(F,2*F),$e=j(we);return{head:we,prefix:te,scalar:$e}}function K(z){let{head:F,prefix:Y,scalar:we}=R(z),te=P.multiply(we),$e=te.toRawBytes();return{head:F,prefix:Y,scalar:we,point:te,pointBytes:$e}}function Z(z){return K(z).pointBytes}function re(z=Uint8Array.of(),...F){let Y=na(...F);return j(i(x(Y,Gt("context",z),!!o)))}function pe(z,F,Y={}){if(z=Gt("message",z),o)z=o(z);let{prefix:we,scalar:te,pointBytes:$e}=K(F),Ee=re(Y.context,we,z),Ae=P.multiply(Ee).toRawBytes(),tt=re(Y.context,Ae,$e,z),yt=N(Ee+tt*te);On("signature.s",yt,Jo,n);let ft=na(Ae,Qu(yt,r.BYTES));return Gt("result",ft,r.BYTES*2)}let U=Xie;function ee(z,F,Y,we=U){let{context:te,zip215:$e}=we,Ee=r.BYTES;if(z=Gt("signature",z,2*Ee),F=Gt("message",F),Y=Gt("publicKey",Y,Ee),$e!==void 0)Yo("zip215",$e);if(o)F=o(F);let Ae=bc(z.slice(Ee,2*Ee)),tt,yt,ft;try{tt=T.fromHex(Y,$e),yt=T.fromHex(z.slice(0,Ee),$e),ft=P.multiplyUnsafe(Ae)}catch(ce){return!1}if(!$e&&tt.isSmallOrder())return!1;let q=re(te,yt.toRawBytes(),tt.toRawBytes(),F);return yt.add(tt.multiplyUnsafe(q)).subtract(ft).clearCofactor().equals(T.ZERO)}return P._setWindowSize(8),{CURVE:t,getPublicKey:Z,sign:pe,verify:ee,ExtendedPoint:T,utils:{getExtendedPublicKey:K,randomPrivateKey:()=>s(r.BYTES),precompute(z=8,F=T.BASE){return F._setWindowSize(z),F.multiply(BigInt(3)),F}}}}td();/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */var Xv=BigInt("57896044618658097711785492504343953926634992332820282019728792003956564819949"),F8=BigInt("19681161376707505956807079304988542015446066515923890162744021073123829784752"),gwe=BigInt(0),tse=BigInt(1),j8=BigInt(2),ywe=BigInt(3),rse=BigInt(5),nse=BigInt(8);function ose(e){let t=BigInt(10),r=BigInt(20),n=BigInt(40),o=BigInt(80),i=Xv,a=e*e%i*e%i,c=Vt(a,j8,i)*a%i,d=Vt(c,tse,i)*e%i,l=Vt(d,rse,i)*d%i,p=Vt(l,t,i)*l%i,m=Vt(p,r,i)*p%i,h=Vt(m,n,i)*m%i,b=Vt(h,o,i)*h%i,x=Vt(b,o,i)*h%i,_=Vt(x,t,i)*l%i;return{pow_p_5_8:Vt(_,j8,i)*e%i,b2:a}}function ise(e){return e[0]&=248,e[31]&=127,e[31]|=64,e}function sse(e,t){let r=Xv,n=Pt(t*t*t,r),o=Pt(n*n*t,r),i=ose(e*o).pow_p_5_8,s=Pt(e*n*i,r),a=Pt(t*s*s,r),c=s,d=Pt(s*F8,r),l=a===e,p=a===Pt(-e,r),m=a===Pt(-e*F8,r);if(l)s=c;if(p||m)s=d;if(C8(s,r))s=Pt(-s,r);return{isValid:l||p,value:s}}var q8=(()=>Gi(Xv,void 0,!0))(),ase=(()=>({a:q8.create(BigInt(-1)),d:BigInt("37095705934669439343138083508754565189542113879843219016388785533085940283555"),Fp:q8,n:BigInt("7237005577332262213973186563042994240857116359379907606001950938285454250989"),h:nse,Gx:BigInt("15112221349535400772501151409588531511454012693041857206046113283949847762202"),Gy:BigInt("46316835694926478169428394003475163141307993866256225615783033603165251855960"),hash:_8,randomBytes:k0,adjustScalarBytes:ise,uvRatio:sse}))(),rd=(()=>U8(ase))();var cse=(e)=>e/4294967296|0,use=(e)=>e>>>0;function H8(e,t,r,n){let o=cse(r),i=use(r);e.setUint32(t,n?i:o,n),e.setUint32(t+4,n?o:i,n)}function G8(e,t,r){return e&t^~e&r}function V8(e,t,r){return e&t^e&r^t&r}class eT{blockLen;outputLen;canXOF=!1;padOffset;isLE;buffer;view;finished=!1;length=0;pos=0;destroyed=!1;constructor(e,t,r,n){this.blockLen=e,this.outputLen=t,this.padOffset=r,this.isLE=n,this.buffer=new Uint8Array(e),this.view=P0(this.buffer)}update(e){Mv(this),T0(e);let{view:t,buffer:r,blockLen:n}=this,o=e.length,i=!1;for(let s=0;s<o;){let a=Math.min(n-this.pos,o-s);if(a===n){let c=P0(e);for(;n<=o-s;s+=n)this.process(c,s);i=!0;continue}if(r.set(s===0&&a===o?e:e.subarray(s,s+a),this.pos),this.pos+=a,s+=a,this.pos===n)this.process(t,0),this.pos=0,i=!0}if(this.length+=e.length,i)this.roundClean();return this}digestInto(e){Mv(this),Y4(e,this),this.finished=!0;let{buffer:t,view:r,blockLen:n,isLE:o}=this,{pos:i}=this;if(t[i++]=128,t.fill(0,i),this.padOffset>n-i)this.process(r,0),t.fill(0);H8(r,n-8,this.length*8,o),this.process(r,0),this.roundClean();let s=e===t?r:P0(e),a=this.outputLen,c=a/4,d=this.get();if(a%4||c>d.length)throw Error("invalid outputLen");for(let l=0;l<c;l++)s.setUint32(4*l,d[l],o)}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let r=e.slice(0,t);return this.destroy(),r}_cloneIntoMeta(e){let{buffer:t,length:r,finished:n,destroyed:o,pos:i}=this;if(e.destroyed=o,e.finished=n,e.length=r,e.pos=i,i)e.buffer.set(t);return e}clone(){return this._cloneInto()}}var Z8=Uint32Array.from([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]);var dse=Uint32Array.from([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),oa=new Uint32Array(64);class W8 extends eT{A=0;B=0;C=0;D=0;E=0;F=0;G=0;H=0;constructor(e,t){super(64,e,8,!1);this.A=t[0]|0,this.B=t[1]|0,this.C=t[2]|0,this.D=t[3]|0,this.E=t[4]|0,this.F=t[5]|0,this.G=t[6]|0,this.H=t[7]|0}get(){let{A:e,B:t,C:r,D:n,E:o,F:i,G:s,H:a}=this;return[e,t,r,n,o,i,s,a]}set(e,t,r,n,o,i,s,a){this.A=e|0,this.B=t|0,this.C=r|0,this.D=n|0,this.E=o|0,this.F=i|0,this.G=s|0,this.H=a|0}_cloneInto(e){return(e||=new this.constructor).set(...this.get()),this._cloneIntoMeta(e)}process(e,t){for(let l=0;l<16;l++,t+=4)oa[l]=e.getUint32(t,!1);for(let l=16;l<64;l++){let p=oa[l-15],m=oa[l-2],h=_o(p,7)^_o(p,18)^p>>>3,b=_o(m,17)^_o(m,19)^m>>>10;oa[l]=b+oa[l-7]+h+oa[l-16]|0}let{A:r,B:n,C:o,D:i,E:s,F:a,G:c,H:d}=this;for(let l=0;l<64;l++){let p=_o(s,6)^_o(s,11)^_o(s,25),m=d+p+G8(s,a,c)+dse[l]+oa[l]|0,b=(_o(r,2)^_o(r,13)^_o(r,22))+V8(r,n,o)|0;d=c,c=a,a=s,s=i+m|0,i=o,o=n,n=r,r=m+b|0}r=r+this.A|0,n=n+this.B|0,o=o+this.C|0,i=i+this.D|0,s=s+this.E|0,a=a+this.F|0,c=c+this.G|0,d=d+this.H|0,this.set(r,n,o,i,s,a,c,d)}roundClean(){E0(oa)}destroy(){this.destroyed=!0,this.set(0,0,0,0,0,0,0,0),E0(this.buffer)}}class K8 extends W8{constructor(){super(32,Z8)}}var z0=Q4(()=>new K8,X4(1));function B0(){if(typeof globalThis.crypto?.getRandomValues!=="function")throw Error("Secure randomness (crypto.getRandomValues) is unavailable; cannot generate a session keypair.");let e=rd.utils.randomPrivateKey();return{publicKey:rd.getPublicKey(e),privateKey:e}}function L0(e){return Li(e.publicKey)}function D0(e){return Li(e.privateKey)}function Y8(e,t){return{publicKey:wf(e),privateKey:wf(t)}}function J8(e){return Li(z0(e))}function Q8(e,t,r,n){return`${e.toUpperCase()}
136
+ `}class kv{constructor(e=B4.stdin,t=B4.stdout){this._stdin=e,this._stdout=t,this._readBuffer=new Iv,this._started=!1,this._ondata=(r)=>{this._readBuffer.append(r),this.processReadBuffer()},this._onerror=(r)=>{this.onerror?.(r)}}async start(){if(this._started)throw Error("StdioServerTransport already started! If using Server class, note that connect() calls start() automatically.");this._started=!0,this._stdin.on("data",this._ondata),this._stdin.on("error",this._onerror)}processReadBuffer(){while(!0)try{let e=this._readBuffer.readMessage();if(e===null)break;this.onmessage?.(e)}catch(e){this.onerror?.(e)}}async close(){if(this._stdin.off("data",this._ondata),this._stdin.off("error",this._onerror),this._stdin.listenerCount("data")===0)this._stdin.pause();this._readBuffer.clear(),this.onclose?.()}send(e){return new Promise((t)=>{let r=z4(e);if(this._stdout.write(r))t();else this._stdout.once("drain",t)})}}var S0={name:"@0xmonaco/mcp-server",version:"1.0.64",type:"module",homepage:"https://docs.0xmonaco.com/sdk/typescript",description:"MCP server for the Monaco SDK",engines:{node:">=18"},bin:"./dist/bin.js",files:["dist"],scripts:{build:"bun build src/bin.ts --outdir dist --target node --format esm --minify",dev:"bun --watch src/bin.ts",start:"bun dist/bin.js",clean:"rm -rf dist",lint:"biome lint .",test:"bun test"},author:"@codebycarson",dependencies:{"@0xmonaco/core":"1.0.64","@0xmonaco/types":"1.0.64","@modelcontextprotocol/sdk":"^1.29.0","node-fetch":"^3.3.2",viem:"^2.56.3",ws:"^8.21.0",zod:"^4.4.3"},devDependencies:{"@types/bun":"latest","@types/ws":"^8.18.1"}};var v0=["read","market-maker","full"],Wo=[{name:"search_docs",description:"Search the Monaco documentation for protocol, SDK, trading, and development guides.",category:"search",authMode:"public",sideEffect:"read-only"},{name:"get_trading_pairs",description:"List trading pairs with optional filters (market type, base/quote token, active status).",category:"market",authMode:"public",sideEffect:"read-only"},{name:"get_trading_pair_by_symbol",description:"Look up a trading pair by symbol (e.g. `BTC/USDC`).",category:"market",authMode:"public",sideEffect:"read-only"},{name:"get_candlesticks",description:"Fetch OHLCV candlestick data for a trading pair.",category:"market",authMode:"public",sideEffect:"read-only"},{name:"get_market_metadata",description:"Get tick size, minimum order size, and trading rules for a pair.",category:"market",authMode:"public",sideEffect:"read-only"},{name:"get_screener",description:"Screen trading pairs with market stats (price, volume, change), filtered by market type, category, and active status.",category:"market",authMode:"public",sideEffect:"read-only"},{name:"get_market_stats",description:"Get exchange-wide life-to-date cumulative volume and trade count across all markets.",category:"market",authMode:"public",sideEffect:"read-only"},{name:"get_perp_market_config",description:"Get a perpetual market's configuration (leverage limits, margin requirements, funding parameters).",category:"perp",authMode:"public",sideEffect:"read-only"},{name:"get_perp_market_summary",description:"Get a perpetual market's live summary (mark/index price, funding rate, open interest, 24h stats).",category:"perp",authMode:"public",sideEffect:"read-only"},{name:"get_mark_price",description:"Get the current mark price for a perpetual market.",category:"perp",authMode:"public",sideEffect:"read-only"},{name:"get_index_price",description:"Get the current index (oracle) price for a perpetual market.",category:"perp",authMode:"public",sideEffect:"read-only"},{name:"get_funding_state",description:"Get the current funding rate and next funding time for a perpetual market.",category:"perp",authMode:"public",sideEffect:"read-only"},{name:"get_open_interest",description:"Get the current open interest for a perpetual market.",category:"perp",authMode:"public",sideEffect:"read-only"},{name:"get_funding_history",description:"List historical funding-rate records for a perpetual market.",category:"perp",authMode:"public",sideEffect:"read-only"},{name:"get_all_funding_history",description:"List historical funding-rate records across all perpetual markets.",category:"perp",authMode:"public",sideEffect:"read-only"},{name:"get_orderbook",description:"Fetch a current orderbook snapshot with bids and asks.",category:"orderbook",authMode:"public",sideEffect:"read-only"},{name:"get_trades",description:"Fetch historical trades for a trading pair.",category:"trades",authMode:"public",sideEffect:"read-only"},{name:"place_limit_order",description:"Place a limit order with price, quantity, and time-in-force. The SDK supplies an idempotency key if omitted. Retain an explicit key to retry the same submission within 24 hours of acceptance. Calling again without the original key is not idempotent; never retry an ambiguous failure with a new key. If the original key is unavailable, report the ambiguity.",category:"trading",authMode:"authenticated",capability:"market-maker",sideEffect:"mutating"},{name:"place_market_order",description:"Place a market order — executes immediately inside a mandatory 1,000 bps protective price band, so it may partially fill or be rejected. The SDK supplies an idempotency key if omitted. Retain an explicit key to retry the same submission within 24 hours of acceptance. Calling again without the original key is not idempotent; never retry an ambiguous failure with a new key. If the original key is unavailable, report the ambiguity.",category:"trading",authMode:"authenticated",capability:"market-maker",sideEffect:"mutating"},{name:"replace_order",description:"Modify an existing order's price and/or quantity. Not idempotent — an ambiguous failure (timeout/network error/5xx with no order) cannot be resolved from inside MCP, which has no order-stream tool; never retry, and report the ambiguity instead.",category:"trading",authMode:"authenticated",capability:"market-maker",sideEffect:"mutating"},{name:"cancel_order",description:"Cancel a single order by ID.",category:"trading",authMode:"authenticated",capability:"market-maker",sideEffect:"mutating"},{name:"batch_cancel_orders",description:"Cancel multiple orders by ID (non-atomic — a failed leg does not stop the others).",category:"trading",authMode:"authenticated",capability:"market-maker",sideEffect:"mutating"},{name:"batch_cancel_all_orders",description:"Cancel all open orders, optionally filtered to a trading pair (unfiltered, it cancels your entire open-order book).",category:"trading",authMode:"authenticated",capability:"market-maker",sideEffect:"mutating"},{name:"batch_close_all_positions",description:"Close all open perpetual positions with market reduce-only orders (best-effort, optional pair filter).",category:"trading",authMode:"authenticated",capability:"market-maker",sideEffect:"mutating"},{name:"get_orders",description:"List your orders with optional filters.",category:"trading",authMode:"authenticated",capability:"read",sideEffect:"read-only"},{name:"get_order",description:"Get details for a specific order by ID.",category:"trading",authMode:"authenticated",capability:"read",sideEffect:"read-only"},{name:"get_positions",description:"List your perpetual positions with optional filters (margin account, trading pair, status).",category:"positions",authMode:"authenticated",capability:"read",sideEffect:"read-only"},{name:"get_position",description:"Get details for a specific perpetual position by ID.",category:"positions",authMode:"authenticated",capability:"read",sideEffect:"read-only"},{name:"get_position_risk",description:"Get liquidation price, margin ratio, and risk metrics for a perpetual position.",category:"positions",authMode:"authenticated",capability:"read",sideEffect:"read-only"},{name:"get_position_history",description:"List historical (closed/reduced) perpetual position records with optional filters.",category:"positions",authMode:"authenticated",capability:"read",sideEffect:"read-only"},{name:"get_position_pnl_history",description:"Get the PnL history time series for a perpetual position over an interval.",category:"positions",authMode:"authenticated",capability:"read",sideEffect:"read-only"},{name:"close_position",description:"Close a perpetual position with a market, limit, or IOC reduce order.",category:"positions",authMode:"authenticated",capability:"market-maker",sideEffect:"mutating"},{name:"get_profile",description:"Fetch your core profile (address, username, account type, withdrawal status).",category:"profile",authMode:"authenticated",capability:"read",sideEffect:"read-only"},{name:"get_balances",description:"List token balances with pagination.",category:"profile",authMode:"authenticated",capability:"read",sideEffect:"read-only"},{name:"get_balance_by_asset",description:"Get balance for a specific asset.",category:"profile",authMode:"authenticated",capability:"read",sideEffect:"read-only"},{name:"get_movements",description:"Fetch transaction and movement history with optional filters.",category:"profile",authMode:"authenticated",capability:"read",sideEffect:"read-only"},{name:"get_user_trades",description:"List your own trade fills with optional filters and cursor pagination.",category:"profile",authMode:"authenticated",capability:"read",sideEffect:"read-only"},{name:"get_funding_payments",description:"List your perpetual funding payments with optional filters (trading pair, position, margin account).",category:"profile",authMode:"authenticated",capability:"read",sideEffect:"read-only"},{name:"get_portfolio_summary",description:"Get your authoritative portfolio summary (equity, PnL, exposure) over a period.",category:"portfolio",authMode:"authenticated",capability:"read",sideEffect:"read-only"},{name:"get_portfolio_performance",description:"Get your portfolio performance time series over a period.",category:"portfolio",authMode:"authenticated",capability:"read",sideEffect:"read-only"},{name:"get_portfolio_realized_pnl",description:"Get your realized PnL breakdown over a period.",category:"portfolio",authMode:"authenticated",capability:"read",sideEffect:"read-only"},{name:"get_portfolio_assets",description:"Get your per-asset portfolio allocation and balances over a period.",category:"portfolio",authMode:"authenticated",capability:"read",sideEffect:"read-only"},{name:"get_portfolio_margin",description:"Get your portfolio margin overview (collateral, maintenance margin, health).",category:"portfolio",authMode:"authenticated",capability:"read",sideEffect:"read-only"},{name:"get_margin_accounts",description:"List your margin accounts with optional filters (state, trading pair).",category:"margin",authMode:"authenticated",capability:"read",sideEffect:"read-only"},{name:"get_parent_margin_account_summary",description:"Get your parent (cross) margin account summary.",category:"margin",authMode:"authenticated",capability:"read",sideEffect:"read-only"},{name:"get_available_collateral",description:"Get available (unlocked) collateral for allocating to margin accounts or risk buckets.",category:"margin",authMode:"authenticated",capability:"read",sideEffect:"read-only"},{name:"get_parent_margin_account_movements",description:"List collateral movements for your parent (cross) margin account.",category:"margin",authMode:"authenticated",capability:"read",sideEffect:"read-only"},{name:"simulate_parent_margin_order_risk",description:"Preview the risk impact of a prospective order against your parent (cross) margin account (read-only simulation).",category:"margin",authMode:"authenticated",capability:"read",sideEffect:"read-only"},{name:"simulate_risk_bucket_order_risk",description:"Preview the risk impact of a prospective order for a new or existing risk bucket (read-only simulation).",category:"margin",authMode:"authenticated",capability:"read",sideEffect:"read-only"},{name:"transfer_collateral_to_parent_margin_account",description:"Move collateral from spot into your parent (cross) margin account.",category:"margin",authMode:"authenticated",capability:"full",sideEffect:"fund-movement"},{name:"transfer_collateral_from_parent_margin_account",description:"Move collateral out of your parent (cross) margin account back to spot.",category:"margin",authMode:"authenticated",capability:"full",sideEffect:"fund-movement"},{name:"transfer_collateral_to_risk_bucket",description:"Allocate collateral into an isolated or cross risk bucket.",category:"margin",authMode:"authenticated",capability:"full",sideEffect:"fund-movement"},{name:"simulate_fees",description:"Simulate fees for an order before placing it.",category:"fees",authMode:"authenticated",capability:"read",sideEffect:"read-only"},{name:"get_my_fee_tier",description:"Get your current fee tier, rolling 14-day volumes, and a pair's fee schedule.",category:"fees",authMode:"authenticated",capability:"read",sideEffect:"read-only"},{name:"vault_approve",description:"Approve the vault contract to spend a token.",category:"vault",authMode:"authenticated",capability:"full",sideEffect:"fund-movement"},{name:"vault_deposit",description:"Deposit tokens into the vault (optional `target`: `spot` default, or `margin` to route into collateral).",category:"vault",authMode:"authenticated",capability:"full",sideEffect:"fund-movement"},{name:"vault_withdraw",description:"Withdraw tokens from the vault.",category:"vault",authMode:"authenticated",capability:"full",sideEffect:"fund-movement"},{name:"vault_get_allowance",description:"Check current token allowance for the vault.",category:"vault",authMode:"authenticated",capability:"read",sideEffect:"read-only"},{name:"vault_needs_approval",description:"Check whether an approval transaction is needed before depositing.",category:"vault",authMode:"authenticated",capability:"read",sideEffect:"read-only"},{name:"get_pending_withdrawals",description:"List your pending withdrawals still awaiting on-chain root confirmation.",category:"vault",authMode:"authenticated",capability:"read",sideEffect:"read-only"},{name:"request_faucet",description:"Request test tokens for all trading pairs.",category:"faucet",authMode:"authenticated",capability:"market-maker",sideEffect:"mutating",excludedOnMainnet:!0},{name:"get_faucet_info",description:"Check remaining faucet quota, next-request time, and recent mint history.",category:"faucet",authMode:"authenticated",capability:"read",sideEffect:"read-only",excludedOnMainnet:!0},{name:"get_trader_code_info",description:"Look up a trader code's details (no credentials required).",category:"pitpass",authMode:"public",sideEffect:"read-only"},{name:"check_trader_code_availability",description:"Public advisory check of whether a custom PitPass TraderCode handle is available (no credentials required).",category:"pitpass",authMode:"public",sideEffect:"read-only"},{name:"get_my_trader_code",description:"Fetch your own trader code.",category:"pitpass",authMode:"authenticated",capability:"read",sideEffect:"read-only"},{name:"set_trader_code",description:"Claim or edit your custom (vanity) PitPass TraderCode handle.",category:"pitpass",authMode:"authenticated",capability:"market-maker",sideEffect:"mutating"},{name:"clear_trader_code",description:"Clear your custom PitPass TraderCode handle, reverting to the wallet-derived default.",category:"pitpass",authMode:"authenticated",capability:"market-maker",sideEffect:"mutating"},{name:"get_rewards_balance",description:"Fetch your PitPass rewards-bucket balances across reward tokens.",category:"pitpass",authMode:"authenticated",capability:"read",sideEffect:"read-only"},{name:"transfer_rewards",description:"Move your earned PitPass rewards from the rewards bucket into your own tradeable balance (ledger-only).",category:"pitpass",authMode:"authenticated",capability:"full",sideEffect:"fund-movement"},{name:"get_pulse",description:"Get the latest market-pulse news feed: AI-synthesized, per-asset headlines with sentiment tags.",category:"pulse",authMode:"public",sideEffect:"read-only"}],k_e=Wo.map((e)=>e.name),L4=Wo.filter((e)=>e.authMode==="public").map((e)=>e.name),R_e=Wo.filter((e)=>e.authMode==="authenticated"&&e.capability==="read").map((e)=>e.name),O_e=Wo.filter((e)=>e.authMode==="authenticated"&&e.capability==="market-maker").map((e)=>e.name),C_e=Wo.filter((e)=>e.authMode==="authenticated"&&e.capability==="full").map((e)=>e.name),M_e=Wo.filter((e)=>e.excludedOnMainnet).map((e)=>e.name),D4=Wo.filter((e)=>e.sideEffect==="fund-movement").map((e)=>e.name);var Aie=new Map(Wo.map((e)=>[e.name,e.sideEffect]));function U4(e){let t=Aie.get(e);if(!t)return;let r=t==="read-only";return{readOnlyHint:r,destructiveHint:!r}}var F4={read:0,"market-maker":1,full:2},Rv=L4,Ov=Object.fromEntries(Wo.filter((e)=>e.authMode==="authenticated").map((e)=>[e.name,{capability:e.capability??"full",...e.sideEffect==="fund-movement"?{fundMovement:!0}:{},...e.excludedOnMainnet?{excludedOnMainnet:!0}:{}}])),j4=Object.fromEntries(Object.entries(Ov).map(([e,t])=>[e,t.capability])),z_e=new Set(D4);function q4(e){let t=Ov[e];if(!t)return"full";if(t.fundMovement)return"full";return t.capability}function H4(e){return q4(e)==="read"}function G4(e,t){if(t.network==="mainnet"&&Ov[e]?.excludedOnMainnet)return!1;if(t.deny.includes(e))return!1;if(Rv.includes(e))return!0;if(!t.authenticated)return!1;if(t.allow.includes(e))return!0;return F4[t.capability]>=F4[q4(e)]}var Iie=new Set([...Rv,...Object.keys(j4)]),kie={mainnet:"https://evm-rpc.sei-apis.com",development:"https://evm-rpc-testnet.sei-apis.com",staging:"https://evm-rpc-testnet.sei-apis.com",local:"http://localhost:8545"};function V4(e){if(!e)return[];return e.split(",").map((t)=>t.trim()).filter(Boolean)}function lc(e=process.env){let t=e.MONACO_PRIVATE_KEY||null;if(t&&!t.startsWith("0x"))throw Error("MONACO_PRIVATE_KEY must start with '0x'.");let r=e.MONACO_CLIENT_ID||null;if(t&&!r)throw Error("MONACO_CLIENT_ID is required when MONACO_PRIVATE_KEY is set.");let n=["mainnet","development","staging","local"],o=e.MONACO_NETWORK;if(t&&!o)throw Error(`MONACO_NETWORK must be set explicitly (one of: ${n.join(", ")}) when MONACO_PRIVATE_KEY is configured. Refusing to default to mainnet for an authenticated session.`);let i=o||"mainnet";if(!n.includes(i))throw Error(`MONACO_NETWORK must be one of: ${n.join(", ")}.`);let s=i,a=e.MONACO_CAPABILITY;if(a&&!v0.includes(a))throw Error(`MONACO_CAPABILITY must be one of: ${v0.join(", ")}.`);let c=a||"read",d=V4(e.MONACO_TOOL_ALLOWLIST),l=V4(e.MONACO_TOOL_DENYLIST),p=[...d,...l].filter((b)=>!Iie.has(b)).length;if(p>0)throw Error(`${p} unknown tool name(s) in MONACO_TOOL_ALLOWLIST/MONACO_TOOL_DENYLIST. Check them against the documented tool list.`);let m=e.MONACO_RPC_URL||kie[s],h=null;if(e.MONACO_DELEGATED_OWNER_USER_ID!==void 0){let b=e.MONACO_DELEGATED_OWNER_USER_ID.trim();if(!b)throw Error("MONACO_DELEGATED_OWNER_USER_ID must be a non-empty owner user id when set.");if(!t||!r)throw Error("MONACO_DELEGATED_OWNER_USER_ID requires MONACO_PRIVATE_KEY and MONACO_CLIENT_ID (the agent authenticates as itself before adopting the owner).");h=b}return{privateKey:t,clientId:r,network:s,seiRpcUrl:m,capability:c,allow:d,deny:l,delegatedOwnerUserId:h}}function Rie(e){return e.replace(/_([a-z])/g,(t,r)=>r.toUpperCase())}function en(e){if(e===null||e===void 0)return e;if(typeof e!=="object")return e;if(Array.isArray(e))return e.map((r)=>en(r));let t={};for(let[r,n]of Object.entries(e))t[Rie(r)]=typeof n==="object"&&n!==null?en(n):n;return t}function Z4(e){return e instanceof Uint8Array||ArrayBuffer.isView(e)&&e.constructor.name==="Uint8Array"&&"BYTES_PER_ELEMENT"in e&&e.BYTES_PER_ELEMENT===1}var Cv=(e)=>e?`"${e}" `:"";function Oie(e,t=""){if(typeof e!=="number")throw TypeError(Cv(t)+"expected number, got "+typeof e);if(!Number.isSafeInteger(e)||e<0)throw RangeError(Cv(t)+"expected integer >= 0, got "+e);return e}function T0(e,t,r=""){if(Z4(e)&&(t===void 0||e.length===t))return e;if(t!==void 0)Oie(t,"length");let n=Z4(e),o=t!==void 0?` of length ${t}`:"",i=n?`length=${e.length}`:`type=${typeof e}`,s=Cv(r)+"expected Uint8Array"+o+", got "+i;if(!n)throw TypeError(s);throw RangeError(s)}var Cie=(e,t)=>{if(e===null||typeof e!=="object"||Array.isArray(e))throw TypeError((t==="object"?"":`"${t}" `)+"expected object, got type="+typeof e)},W4=(e,t)=>{Cie(e,t);let r=Object.getPrototypeOf(e);if(r!==Object.prototype&&r!==null)throw TypeError(`"${t}" expected plain object`);if(Object.hasOwn(e,"__proto__"))throw TypeError(`"${t}.__proto__" is not allowed`)};function Mv(e,t=!0){if(e.destroyed)throw Error("hash was destroyed");if(t&&e.finished)throw Error("digest() was already called")}function Y4(e,t){T0(e,void 0,"output");let r=t.outputLen;if(!(e.length>=r))throw RangeError('"output" expected length >= '+r)}function E0(...e){for(let t=0;t<e.length;t++)e[t].fill(0)}function P0(e){return new DataView(e.buffer,e.byteOffset,e.byteLength)}function _o(e,t){return e<<32-t|e>>>t}var J4=(()=>typeof Uint8Array.from([]).toHex==="function"&&typeof Uint8Array.fromHex==="function")(),Mie=Array.from({length:256},(e,t)=>t.toString(16).padStart(2,"0"));function Li(e){if(T0(e),J4)return e.toHex();let t="";for(let r=0;r<e.length;r++)t+=Mie[e[r]];return t}function K4(e){return e>=48&&e<=57?e-48:e>=65&&e<=70?e-55:e>=97&&e<=102?e-87:void 0}function wf(e){if(typeof e!=="string")throw TypeError("hex string expected, got "+typeof e);if(J4)try{return Uint8Array.fromHex(e)}catch(o){if(o instanceof SyntaxError)throw RangeError(o.message);throw o}let t=e.length,r=t/2;if(t%2)throw RangeError("hex string expected, got unpadded hex of length "+t);let n=new Uint8Array(r);for(let o=0,i=0;o<r;o++,i+=2){let s=K4(e.charCodeAt(i)),a=K4(e.charCodeAt(i+1));if(s===void 0||a===void 0){let c=e[i]+e[i+1];throw RangeError('hex string expected, got non-hex character "'+c+'" at index '+i)}n[o]=s*16+a}return n}function pc(e){if(typeof e!=="string")throw TypeError("string expected");let t=new TextEncoder().encode(e);try{return new Uint8Array(t)}finally{E0(t)}}function $ie(e,t,r="opts"){if(W4(e,"defaults"),t!==void 0)W4(t,r);return Object.assign(Object.create(null),e,t)}function Q4(e,t={}){if(typeof e!=="function")throw TypeError('"hashCons" expected function, got type='+typeof e);t=$ie({},t,"info");let r=(o,i)=>e(i).update(o).digest(),n=e(void 0);return r.outputLen=n.outputLen,r.blockLen=n.blockLen,r.canXOF=n.canXOF,r.create=(o)=>e(o),Object.assign(r,t),Object.freeze(r)}var X4=(e)=>({oid:Uint8Array.from([6,9,96,134,72,1,101,3,4,2,e])});Lv();hc();Qv();td();If();/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */var Jo=BigInt(0),rn=BigInt(1),D8=BigInt(2),Qie=BigInt(8),Xie={zip215:!0};function ese(e){let t=kf(e);return Hi(e,{hash:"function",a:"bigint",d:"bigint",randomBytes:"function"},{adjustScalarBytes:"function",domain:"function",uvRatio:"function",mapToCurve:"function"}),Object.freeze({...t})}function U8(e){let t=ese(e),{Fp:r,n,prehash:o,hash:i,randomBytes:s,nByteLength:a,h:c}=t,d=D8<<BigInt(a*8)-rn,l=r.create,p=Gi(t.n,t.nBitLength);function m(z,F){let Y=r.sqr(z),we=r.sqr(F),te=r.add(r.mul(t.a,Y),we),$e=r.add(r.ONE,r.mul(t.d,r.mul(Y,we)));return r.eql(te,$e)}if(!m(t.Gx,t.Gy))throw Error("bad curve params: generator point");let h=t.uvRatio||((z,F)=>{try{return{isValid:!0,value:r.sqrt(z*r.inv(F))}}catch(Y){return{isValid:!1,value:Jo}}}),b=t.adjustScalarBytes||((z)=>z),x=t.domain||((z,F,Y)=>{if(Yo("phflag",Y),F.length||Y)throw Error("Contexts/pre-hash are not supported");return z});function _(z,F,Y=!1){let we=Y?rn:Jo;On("coordinate "+z,F,we,d)}function w(z){if(!(z instanceof T))throw Error("ExtendedPoint expected")}let A=Xu((z,F)=>{let{ex:Y,ey:we,ez:te}=z,$e=z.is0();if(F==null)F=$e?Qie:r.inv(te);let Ee=l(Y*F),Ae=l(we*F),tt=l(te*F);if($e)return{x:Jo,y:rn};if(tt!==rn)throw Error("invZ was invalid");return{x:Ee,y:Ae}}),v=Xu((z)=>{let{a:F,d:Y}=t;if(z.is0())throw Error("bad point: ZERO");let{ex:we,ey:te,ez:$e,et:Ee}=z,Ae=l(we*we),tt=l(te*te),yt=l($e*$e),ft=l(yt*yt),q=l(Ae*F),ne=l(yt*l(q+tt)),ce=l(ft+l(Y*l(Ae*tt)));if(ne!==ce)throw Error("bad point: equation left != right (1)");let he=l(we*te),Q=l($e*Ee);if(he!==Q)throw Error("bad point: equation left != right (2)");return!0});class T{constructor(z,F,Y,we){_("x",z),_("y",F),_("z",Y,!0),_("t",we),this.ex=z,this.ey=F,this.ez=Y,this.et=we,Object.freeze(this)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static fromAffine(z){if(z instanceof T)throw Error("extended point not allowed");let{x:F,y:Y}=z||{};return _("x",F),_("y",Y),new T(F,Y,rn,l(F*Y))}static normalizeZ(z){let F=ed(r,z.map((Y)=>Y.ez));return z.map((Y,we)=>Y.toAffine(F[we])).map(T.fromAffine)}static msm(z,F){return N0(T,p,z,F)}_setWindowSize(z){O.setWindowSize(this,z)}assertValidity(){v(this)}equals(z){w(z);let{ex:F,ey:Y,ez:we}=this,{ex:te,ey:$e,ez:Ee}=z,Ae=l(F*Ee),tt=l(te*we),yt=l(Y*Ee),ft=l($e*we);return Ae===tt&&yt===ft}is0(){return this.equals(T.ZERO)}negate(){return new T(l(-this.ex),this.ey,this.ez,l(-this.et))}double(){let{a:z}=t,{ex:F,ey:Y,ez:we}=this,te=l(F*F),$e=l(Y*Y),Ee=l(D8*l(we*we)),Ae=l(z*te),tt=F+Y,yt=l(l(tt*tt)-te-$e),ft=Ae+$e,q=ft-Ee,ne=Ae-$e,ce=l(yt*q),he=l(ft*ne),Q=l(yt*ne),Be=l(q*ft);return new T(ce,he,Be,Q)}add(z){w(z);let{a:F,d:Y}=t,{ex:we,ey:te,ez:$e,et:Ee}=this,{ex:Ae,ey:tt,ez:yt,et:ft}=z,q=l(we*Ae),ne=l(te*tt),ce=l(Ee*Y*ft),he=l($e*yt),Q=l((we+te)*(Ae+tt)-q-ne),Be=he-ce,bt=he+ce,xt=l(ne-F*q),Qe=l(Q*Be),vt=l(bt*xt),wt=l(Q*xt),Hr=l(Be*bt);return new T(Qe,vt,Hr,wt)}subtract(z){return this.add(z.negate())}wNAF(z){return O.wNAFCached(this,z,T.normalizeZ)}multiply(z){let F=z;On("scalar",F,rn,n);let{p:Y,f:we}=this.wNAF(F);return T.normalizeZ([Y,we])[0]}multiplyUnsafe(z,F=T.ZERO){let Y=z;if(On("scalar",Y,Jo,n),Y===Jo)return k;if(this.is0()||Y===rn)return this;return O.wNAFCachedUnsafe(this,Y,T.normalizeZ,F)}isSmallOrder(){return this.multiplyUnsafe(c).is0()}isTorsionFree(){return O.unsafeLadder(this,n).is0()}toAffine(z){return A(this,z)}clearCofactor(){let{h:z}=t;if(z===rn)return this;return this.multiplyUnsafe(z)}static fromHex(z,F=!1){let{d:Y,a:we}=t,te=r.BYTES;z=Gt("pointHex",z,te),Yo("zip215",F);let $e=z.slice(),Ee=z[te-1];$e[te-1]=Ee&-129;let Ae=bc($e),tt=F?d:r.ORDER;On("pointHex.y",Ae,Jo,tt);let yt=l(Ae*Ae),ft=l(yt-rn),q=l(Y*yt-we),{isValid:ne,value:ce}=h(ft,q);if(!ne)throw Error("Point.fromHex: invalid y coordinate");let he=(ce&rn)===rn,Q=(Ee&128)!==0;if(!F&&ce===Jo&&Q)throw Error("Point.fromHex: x=0 and x_0=1");if(Q!==he)ce=l(-ce);return T.fromAffine({x:ce,y:Ae})}static fromPrivateKey(z){let{scalar:F}=R(z);return P.multiply(F)}toRawBytes(){let{x:z,y:F}=this.toAffine(),Y=Qu(F,r.BYTES);return Y[Y.length-1]|=z&rn?128:0,Y}toHex(){return ra(this.toRawBytes())}}T.BASE=new T(t.Gx,t.Gy,rn,l(t.Gx*t.Gy)),T.ZERO=new T(Jo,rn,rn,Jo);let{BASE:P,ZERO:k}=T,O=$0(T,a*8);function N(z){return Pt(z,n)}function j(z){return N(bc(z))}function R(z){let F=r.BYTES;z=Gt("private key",z,F);let Y=Gt("hashed private key",i(z),2*F),we=b(Y.slice(0,F)),te=Y.slice(F,2*F),$e=j(we);return{head:we,prefix:te,scalar:$e}}function K(z){let{head:F,prefix:Y,scalar:we}=R(z),te=P.multiply(we),$e=te.toRawBytes();return{head:F,prefix:Y,scalar:we,point:te,pointBytes:$e}}function Z(z){return K(z).pointBytes}function re(z=Uint8Array.of(),...F){let Y=na(...F);return j(i(x(Y,Gt("context",z),!!o)))}function pe(z,F,Y={}){if(z=Gt("message",z),o)z=o(z);let{prefix:we,scalar:te,pointBytes:$e}=K(F),Ee=re(Y.context,we,z),Ae=P.multiply(Ee).toRawBytes(),tt=re(Y.context,Ae,$e,z),yt=N(Ee+tt*te);On("signature.s",yt,Jo,n);let ft=na(Ae,Qu(yt,r.BYTES));return Gt("result",ft,r.BYTES*2)}let U=Xie;function ee(z,F,Y,we=U){let{context:te,zip215:$e}=we,Ee=r.BYTES;if(z=Gt("signature",z,2*Ee),F=Gt("message",F),Y=Gt("publicKey",Y,Ee),$e!==void 0)Yo("zip215",$e);if(o)F=o(F);let Ae=bc(z.slice(Ee,2*Ee)),tt,yt,ft;try{tt=T.fromHex(Y,$e),yt=T.fromHex(z.slice(0,Ee),$e),ft=P.multiplyUnsafe(Ae)}catch(ce){return!1}if(!$e&&tt.isSmallOrder())return!1;let q=re(te,yt.toRawBytes(),tt.toRawBytes(),F);return yt.add(tt.multiplyUnsafe(q)).subtract(ft).clearCofactor().equals(T.ZERO)}return P._setWindowSize(8),{CURVE:t,getPublicKey:Z,sign:pe,verify:ee,ExtendedPoint:T,utils:{getExtendedPublicKey:K,randomPrivateKey:()=>s(r.BYTES),precompute(z=8,F=T.BASE){return F._setWindowSize(z),F.multiply(BigInt(3)),F}}}}td();/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */var Xv=BigInt("57896044618658097711785492504343953926634992332820282019728792003956564819949"),F8=BigInt("19681161376707505956807079304988542015446066515923890162744021073123829784752"),gwe=BigInt(0),tse=BigInt(1),j8=BigInt(2),ywe=BigInt(3),rse=BigInt(5),nse=BigInt(8);function ose(e){let t=BigInt(10),r=BigInt(20),n=BigInt(40),o=BigInt(80),i=Xv,a=e*e%i*e%i,c=Vt(a,j8,i)*a%i,d=Vt(c,tse,i)*e%i,l=Vt(d,rse,i)*d%i,p=Vt(l,t,i)*l%i,m=Vt(p,r,i)*p%i,h=Vt(m,n,i)*m%i,b=Vt(h,o,i)*h%i,x=Vt(b,o,i)*h%i,_=Vt(x,t,i)*l%i;return{pow_p_5_8:Vt(_,j8,i)*e%i,b2:a}}function ise(e){return e[0]&=248,e[31]&=127,e[31]|=64,e}function sse(e,t){let r=Xv,n=Pt(t*t*t,r),o=Pt(n*n*t,r),i=ose(e*o).pow_p_5_8,s=Pt(e*n*i,r),a=Pt(t*s*s,r),c=s,d=Pt(s*F8,r),l=a===e,p=a===Pt(-e,r),m=a===Pt(-e*F8,r);if(l)s=c;if(p||m)s=d;if(C8(s,r))s=Pt(-s,r);return{isValid:l||p,value:s}}var q8=(()=>Gi(Xv,void 0,!0))(),ase=(()=>({a:q8.create(BigInt(-1)),d:BigInt("37095705934669439343138083508754565189542113879843219016388785533085940283555"),Fp:q8,n:BigInt("7237005577332262213973186563042994240857116359379907606001950938285454250989"),h:nse,Gx:BigInt("15112221349535400772501151409588531511454012693041857206046113283949847762202"),Gy:BigInt("46316835694926478169428394003475163141307993866256225615783033603165251855960"),hash:_8,randomBytes:k0,adjustScalarBytes:ise,uvRatio:sse}))(),rd=(()=>U8(ase))();var cse=(e)=>e/4294967296|0,use=(e)=>e>>>0;function H8(e,t,r,n){let o=cse(r),i=use(r);e.setUint32(t,n?i:o,n),e.setUint32(t+4,n?o:i,n)}function G8(e,t,r){return e&t^~e&r}function V8(e,t,r){return e&t^e&r^t&r}class eT{blockLen;outputLen;canXOF=!1;padOffset;isLE;buffer;view;finished=!1;length=0;pos=0;destroyed=!1;constructor(e,t,r,n){this.blockLen=e,this.outputLen=t,this.padOffset=r,this.isLE=n,this.buffer=new Uint8Array(e),this.view=P0(this.buffer)}update(e){Mv(this),T0(e);let{view:t,buffer:r,blockLen:n}=this,o=e.length,i=!1;for(let s=0;s<o;){let a=Math.min(n-this.pos,o-s);if(a===n){let c=P0(e);for(;n<=o-s;s+=n)this.process(c,s);i=!0;continue}if(r.set(s===0&&a===o?e:e.subarray(s,s+a),this.pos),this.pos+=a,s+=a,this.pos===n)this.process(t,0),this.pos=0,i=!0}if(this.length+=e.length,i)this.roundClean();return this}digestInto(e){Mv(this),Y4(e,this),this.finished=!0;let{buffer:t,view:r,blockLen:n,isLE:o}=this,{pos:i}=this;if(t[i++]=128,t.fill(0,i),this.padOffset>n-i)this.process(r,0),t.fill(0);H8(r,n-8,this.length*8,o),this.process(r,0),this.roundClean();let s=e===t?r:P0(e),a=this.outputLen,c=a/4,d=this.get();if(a%4||c>d.length)throw Error("invalid outputLen");for(let l=0;l<c;l++)s.setUint32(4*l,d[l],o)}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let r=e.slice(0,t);return this.destroy(),r}_cloneIntoMeta(e){let{buffer:t,length:r,finished:n,destroyed:o,pos:i}=this;if(e.destroyed=o,e.finished=n,e.length=r,e.pos=i,i)e.buffer.set(t);return e}clone(){return this._cloneInto()}}var Z8=Uint32Array.from([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]);var dse=Uint32Array.from([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),oa=new Uint32Array(64);class W8 extends eT{A=0;B=0;C=0;D=0;E=0;F=0;G=0;H=0;constructor(e,t){super(64,e,8,!1);this.A=t[0]|0,this.B=t[1]|0,this.C=t[2]|0,this.D=t[3]|0,this.E=t[4]|0,this.F=t[5]|0,this.G=t[6]|0,this.H=t[7]|0}get(){let{A:e,B:t,C:r,D:n,E:o,F:i,G:s,H:a}=this;return[e,t,r,n,o,i,s,a]}set(e,t,r,n,o,i,s,a){this.A=e|0,this.B=t|0,this.C=r|0,this.D=n|0,this.E=o|0,this.F=i|0,this.G=s|0,this.H=a|0}_cloneInto(e){return(e||=new this.constructor).set(...this.get()),this._cloneIntoMeta(e)}process(e,t){for(let l=0;l<16;l++,t+=4)oa[l]=e.getUint32(t,!1);for(let l=16;l<64;l++){let p=oa[l-15],m=oa[l-2],h=_o(p,7)^_o(p,18)^p>>>3,b=_o(m,17)^_o(m,19)^m>>>10;oa[l]=b+oa[l-7]+h+oa[l-16]|0}let{A:r,B:n,C:o,D:i,E:s,F:a,G:c,H:d}=this;for(let l=0;l<64;l++){let p=_o(s,6)^_o(s,11)^_o(s,25),m=d+p+G8(s,a,c)+dse[l]+oa[l]|0,b=(_o(r,2)^_o(r,13)^_o(r,22))+V8(r,n,o)|0;d=c,c=a,a=s,s=i+m|0,i=o,o=n,n=r,r=m+b|0}r=r+this.A|0,n=n+this.B|0,o=o+this.C|0,i=i+this.D|0,s=s+this.E|0,a=a+this.F|0,c=c+this.G|0,d=d+this.H|0,this.set(r,n,o,i,s,a,c,d)}roundClean(){E0(oa)}destroy(){this.destroyed=!0,this.set(0,0,0,0,0,0,0,0),E0(this.buffer)}}class K8 extends W8{constructor(){super(32,Z8)}}var z0=Q4(()=>new K8,X4(1));function B0(){if(typeof globalThis.crypto?.getRandomValues!=="function")throw Error("Secure randomness (crypto.getRandomValues) is unavailable; cannot generate a session keypair.");let e=rd.utils.randomPrivateKey();return{publicKey:rd.getPublicKey(e),privateKey:e}}function L0(e){return Li(e.publicKey)}function D0(e){return Li(e.privateKey)}function Y8(e,t){return{publicKey:wf(e),privateKey:wf(t)}}function J8(e){return Li(z0(e))}function Q8(e,t,r,n){return`${e.toUpperCase()}
137
137
  ${t}
138
138
  ${r}
139
139
  ${n}`}function X8(e,t){return`WS-AUTH
@@ -149,4 +149,4 @@ ${t}`}function U0(e,t){return Li(rd.sign(pc(t),e))}var Rf=[0.0001,0.001,0.01,0.1
149
149
  "@signature-params": ${d}`;return{"Signature-Input":`monaco=${d}`,Signature:`monaco=:${NU(rd.sign(pc(l),e.privateKey))}:`,"Content-Digest":c}}var Tde="@0xmonaco/core",wA={Jan:0,Feb:1,Mar:2,Apr:3,May:4,Jun:5,Jul:6,Aug:7,Sep:8,Oct:9,Nov:10,Dec:11},SA="Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec",Ede=new RegExp(`^(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\\d{2}) (${SA}) (\\d{4}) (\\d{2}):(\\d{2}):(\\d{2}) GMT$`),Pde=new RegExp(`^(?:Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (\\d{2})-(${SA})-(\\d{2}) (\\d{2}):(\\d{2}):(\\d{2}) GMT$`),Ade=new RegExp(`^(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun) (${SA}) ([ \\d]\\d) (\\d{2}):(\\d{2}):(\\d{2}) (\\d{4})$`);function Ide(e,t,r,n,o,i){let s=new Date(Date.now()),a=Math.floor(s.getUTCFullYear()/100)*100+e,c=Date.UTC(a,t,r,n,o,i),d=Date.UTC(s.getUTCFullYear()+50,s.getUTCMonth(),s.getUTCDate(),s.getUTCHours(),s.getUTCMinutes(),s.getUTCSeconds());return c>d?a-100:a}function kde(e){let t,r,n,o,i,s,a=Ede.exec(e),c=Pde.exec(e),d=Ade.exec(e);if(a)t=Number(a[1]),r=wA[a[2]],n=Number(a[3]),o=Number(a[4]),i=Number(a[5]),s=Number(a[6]);else if(c){if(t=Number(c[1]),r=wA[c[2]],o=Number(c[4]),i=Number(c[5]),s=Number(c[6]),r===void 0)return;n=Ide(Number(c[3]),r,t,o,i,s)}else if(d)r=wA[d[1]],t=Number((d[2]??"").trim()),o=Number(d[3]),i=Number(d[4]),s=Number(d[5]),n=Number(d[6]);else return;if(r===void 0)return;let l=Date.UTC(n,r,t,o,i,s),p=new Date(l);if(p.getUTCFullYear()!==n||p.getUTCMonth()!==r||p.getUTCDate()!==t||p.getUTCHours()!==o||p.getUTCMinutes()!==i||p.getUTCSeconds()!==s)return;return l}class qe{apiUrl;sessionKeypair;serverKey;requestSigning="legacy";setRequestSigning(e){if(e!=="legacy"&&e!=="rfc9421")throw Error("Unsupported request signing protocol");this.requestSigning=e}retryOptions;constructor(e,t){this.apiUrl=e,this.retryOptions={maxRetries:t?.maxRetries??3,baseDelayMs:t?.baseDelayMs??1000}}setSessionKeypair(e){this.sessionKeypair=e?Y8(e.publicKey,e.privateKey):void 0}setServerKey(e){this.serverKey=e}parseRequestBody(e){if(!e)return;if(typeof e==="string")try{return JSON.parse(e)}catch{return e}if(e instanceof FormData){let t={};return e.forEach((r,n)=>{t[n]=r instanceof File?`[File: ${r.name}]`:r}),t}if(e instanceof URLSearchParams){let t={};return e.forEach((r,n)=>{t[n]=r}),t}if(e instanceof Blob)return{type:"[Blob]",size:e.size,contentType:e.type};if(e instanceof ArrayBuffer||ArrayBuffer.isView(e))return{type:"[ArrayBuffer]",size:e instanceof ArrayBuffer?e.byteLength:e.byteLength};if(typeof ReadableStream<"u"&&e instanceof ReadableStream)return{type:"[ReadableStream]",note:"Stream body not captured for logging"};return{type:"[Unknown]",bodyType:typeof e}}extractResponseMetadata(e){if(!e)return{};let t=e.get("x-request-id")||e.get("request-id")||e.get("x-correlation-id")||void 0,r=e.get("retry-after"),n;if(r!==null){let o=r.trim();if(/^\d+$/.test(o))n=Number.parseInt(o,10);else{let i=kde(o);if(i!==void 0)n=Math.max(0,Math.ceil((i-Date.now())/1000))}}return{requestId:t,retryAfter:n}}async executeRequest(e,t,r,n){let o,i={"User-Agent":Tde,...r.headers};try{o=await fetch(e,{...r,headers:i})}catch(d){throw new Zt(`Network request failed for ${t}`,{endpoint:e,cause:d instanceof Error?d:Error(String(d)),requestBody:n})}let s,a=o.headers?.get("content-type")||"unknown",c=o.clone?o.clone():o;try{s=await o.json()}catch(d){let l;try{l=await c.text()}catch{l="[Unable to read response body]"}if(!o.ok){let p=`API request failed: ${o.status}. Response is not JSON (Content-Type: ${a})`,{requestId:m,retryAfter:h}=this.extractResponseMetadata(o.headers);throw new Zt(p,{endpoint:e,statusCode:o.status,responseBody:{rawResponse:l.substring(0,500),contentType:a,parseError:d instanceof Error?d.message:String(d)},cause:d instanceof Error?d:void 0,requestBody:n,requestId:m,retryAfter:h})}if(l.trim()==="")return;throw new Zt(`Expected JSON response but received ${a}`,{endpoint:e,statusCode:o.status,responseBody:{rawResponse:l.substring(0,500),contentType:a},cause:d instanceof Error?d:void 0,requestBody:n})}if(!o.ok){let d=s!==null&&typeof s==="object"?s:void 0,l=(typeof d?.message==="string"?d.message:void 0)||(typeof d?.error==="string"?d.error:void 0)||`API request failed: ${o.status}`,{requestId:p,retryAfter:m}=this.extractResponseMetadata(o.headers);throw new Zt(l,{endpoint:e,statusCode:o.status,responseBody:s,requestBody:n,requestId:p,retryAfter:m})}return s}async makeAuthenticatedRequest(e,t={}){if(!this.sessionKeypair)throw new Zt("Session keypair not set. Authenticate (login) first.",{endpoint:`${this.apiUrl}${e}`,statusCode:$b.StatusCodes.UNAUTHORIZED});let r=`${this.apiUrl}${e}`,n=this.parseRequestBody(t.body),o=this.buildSignatureHeaders(e,t),i=t.headers;if(this.requestSigning==="rfc9421"){let s={};new Headers(t.headers).forEach((a,c)=>{s[c]=a}),i=s}return this.executeRequest(r,e,{...t,...this.requestSigning==="rfc9421"?{redirect:"error"}:{},headers:{"Content-Type":"application/json",...i,...o}},n)}buildSignatureHeaders(e,t){if(!this.sessionKeypair)throw new Zt("Session keypair not set. Authenticate (login) first.",{endpoint:`${this.apiUrl}${e}`,statusCode:$b.StatusCodes.UNAUTHORIZED});let r=(t.method??"GET").toUpperCase();if(this.requestSigning==="rfc9421"){if(t.body!=null&&typeof t.body!=="string")throw Error("Signed requests require a string body");let c=new Headers(t.headers);for(let l of["signature","signature-input","content-digest","x-monaco-publickey","x-monaco-timestamp","x-monaco-signature"])if(c.has(l))throw Error("Signature headers are managed by the SDK");let d=new URL(`${this.apiUrl}${e}`);return zU(this.sessionKeypair,r,d.pathname+d.search,pc(t.body??""),Math.floor(Date.now()/1000))}let n=Date.now(),o=typeof t.body==="string"?pc(t.body):new Uint8Array(0),i=J8(o),s=Q8(r,e,n,i),a=U0(this.sessionKeypair.privateKey,s);return{"X-Monaco-PublicKey":Li(this.sessionKeypair.publicKey),"X-Monaco-Timestamp":String(n),"X-Monaco-Signature":a}}async makeBackendRequest(e,t={}){if(!this.serverKey)throw new Zt("Server key not set. Call setServerKey(sk_...) first.",{endpoint:`${this.apiUrl}${e}`,statusCode:$b.StatusCodes.UNAUTHORIZED});let r=`${this.apiUrl}${e}`,n=this.parseRequestBody(t.body);return this.executeRequest(r,e,{...t,headers:{"Content-Type":"application/json","x-server-key":this.serverKey,...t.headers}},n)}async makePublicRequest(e,t={}){let r=`${this.apiUrl}${e}`,n=this.parseRequestBody(t.body);return this.executeRequest(r,e,{...t,headers:{"Content-Type":"application/json",...t.headers}},n)}}function nt(e){return encodeURIComponent(e)}function Bt(e,t){if(!t)return e;let r=new URLSearchParams;for(let[o,i]of Object.entries(t))if(i!==void 0)r.set(o,String(i));let n=r.toString();return n?`${e}?${n}`:e}var ae={orders:{create:()=>"/api/v1/orders",list:(e)=>Bt("/api/v1/orders",e),get:(e)=>`/api/v1/orders/${nt(e)}`,replace:(e)=>`/api/v1/orders/${nt(e)}`,cancel:()=>"/api/v1/orders/cancel",batchCancel:()=>"/api/v1/orders/batch-cancel",batchCancelAll:()=>"/api/v1/orders/batch-cancel-all",batchCancelAllByPair:(e)=>`/api/v1/orders/batch-cancel-all/${nt(e)}`,batchCreate:()=>"/api/v1/orders/batch-create",batchReplace:()=>"/api/v1/orders/batch-replace",listConditional:(e)=>Bt("/api/v1/orders/conditional",e),cancelConditional:(e)=>`/api/v1/orders/conditional/${nt(e)}`,getConditional:(e)=>`/api/v1/orders/conditional/${nt(e)}`,createTwap:()=>"/api/v1/orders/twap",listTwap:(e)=>Bt("/api/v1/orders/twap",e),getTwap:(e)=>`/api/v1/orders/twap/${nt(e)}`,getTwapTca:(e)=>`/api/v1/orders/twap/${nt(e)}/tca`,cancelTwap:(e)=>`/api/v1/orders/twap/${nt(e)}/cancel`},delegatedAgents:{list:()=>"/api/v1/delegated-agents",owners:()=>"/api/v1/delegated-agents/owners",byId:(e)=>`/api/v1/delegated-agents/${nt(e)}`,sessions:()=>"/api/v1/delegated-agents/sessions"},withdrawals:{initiate:()=>"/api/v1/withdrawals",byIndex:(e)=>`/api/v1/withdrawals/${nt(String(e))}`,list:(e)=>Bt("/api/v1/withdrawals",e)},market:{listTradingPairs:(e)=>Bt("/api/v1/market/pairs",e),getTradingPair:(e)=>`/api/v1/market/pairs/${nt(e)}`,getCandles:(e,t,r)=>Bt(`/api/v1/market/pairs/charts/candlestick/${nt(e)}/${nt(t)}`,r),getMarketMetadata:(e)=>`/api/v1/market/pairs/${nt(e)}/metadata`,getPerpMarketConfig:(e)=>`/api/v1/market/pairs/${nt(e)}/perp/config`,getPerpMarketSummary:(e)=>`/api/v1/market/pairs/${nt(e)}/perp/summary`,getMarkPrice:(e)=>`/api/v1/market/pairs/${nt(e)}/mark-price`,getIndexPrice:(e)=>`/api/v1/market/pairs/${nt(e)}/index-price`,getFundingState:(e)=>`/api/v1/market/pairs/${nt(e)}/funding`,listFundingHistory:(e,t)=>Bt(`/api/v1/market/pairs/${nt(e)}/funding/history`,t),listAllFundingHistory:(e)=>Bt("/api/v1/market/funding/history",e),getOpenInterest:(e)=>`/api/v1/market/pairs/${nt(e)}/open-interest`,getScreener:(e)=>Bt("/api/v1/market/screener",e),getMarketStats:()=>"/api/v1/market/stats"},orderbook:{get:(e,t)=>Bt(`/api/v1/orderbook/${nt(e)}`,t)},trades:{publicByPair:(e,t)=>Bt(`/api/v1/trades/${nt(e)}`,t),byId:(e)=>`/api/v1/trades/by-id/${nt(e)}`,user:(e)=>Bt("/api/v1/accounts/trades",e)},applications:{orders:(e)=>Bt("/api/v1/applications/orders",e),users:(e)=>Bt("/api/v1/applications/users",e),movements:(e)=>Bt("/api/v1/applications/movements",e),balances:(e)=>Bt("/api/v1/applications/balances",e),stats:(e)=>Bt("/api/v1/applications/stats",e)},subAccounts:{list:()=>"/api/v1/accounts/sub-accounts",createLimit:()=>"/api/v1/accounts/sub-accounts/limits",getLimits:(e)=>`/api/v1/accounts/sub-accounts/${nt(e)}/limits`,limit:(e,t)=>`/api/v1/accounts/sub-accounts/${nt(e)}/limits/${nt(t)}`},faucet:{mint:()=>"/api/v1/faucet/mint",info:()=>"/api/v1/faucet/info"},sweeper:{register:()=>"/api/v1/sweeper/register",chains:()=>"/api/v1/sweeper/chains"},whitelist:{submit:()=>"/api/v1/whitelist"},positions:{list:(e)=>Bt("/api/v1/positions",e),get:(e)=>`/api/v1/positions/${nt(e)}`,close:(e)=>`/api/v1/positions/${nt(e)}/close`,batchCloseAll:()=>"/api/v1/positions/batch-close-all",risk:(e)=>`/api/v1/positions/${nt(e)}/risk`,attachTpSl:(e)=>`/api/v1/positions/${nt(e)}/tp-sl`,history:(e)=>Bt("/api/v1/positions/history",e),pnlHistory:(e,t)=>Bt(`/api/v1/positions/${nt(e)}/pnl/history`,t)},marginAccounts:{list:(e)=>Bt("/api/v1/margin/accounts",e),parentSummary:(e)=>Bt("/api/v1/margin/parent-margin-account",e),summary:(e,t)=>Bt(`/api/v1/margin/accounts/${nt(e)}`,t),availableCollateral:(e)=>Bt("/api/v1/margin/collateral/available",e),transferIn:(e)=>`/api/v1/margin/accounts/${nt(e)}/collateral/transfer-in`,transferInParent:()=>"/api/v1/margin/parent-margin-account/collateral/transfer-in",transferInRiskBucket:()=>"/api/v1/margin/risk-buckets/collateral/transfer-in",transferOut:(e)=>`/api/v1/margin/accounts/${nt(e)}/collateral/transfer-out`,transferOutParent:()=>"/api/v1/margin/parent-margin-account/collateral/transfer-out",movements:(e,t)=>Bt(`/api/v1/margin/accounts/${nt(e)}/movements`,t),parentMovements:(e)=>Bt("/api/v1/margin/parent-margin-account/movements",e),simulateParentMarginOrderRisk:()=>"/api/v1/margin/parent-margin-account/simulate-order-risk",simulateOrderRisk:(e)=>`/api/v1/margin/accounts/${nt(e)}/simulate-order-risk`,simulateRiskBucketOrderRisk:()=>"/api/v1/margin/risk-buckets/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",funding:()=>"/api/v1/streaming/funding",liquidationAlerts:()=>"/api/v1/streaming/liquidation-alerts"}};class Nb extends qe{async getApplicationConfig(){let e=await this.makeAuthenticatedRequest("/api/v1/applications/config",{method:"GET"});return{id:e.id,name:e.name,allowedOrigins:e.allowedOrigins,webhookUrl:e.webhookUrl,vaultContractAddress:e.vaultContractAddress,clientId:e.clientId}}async listApplicationOrders(e){return await this.makeBackendRequest(ae.applications.orders(e))}async listApplicationUsers(e){return await this.makeBackendRequest(ae.applications.users(e))}async listApplicationMovements(e){return await this.makeBackendRequest(ae.applications.movements(e))}async listApplicationBalances(e){return await this.makeBackendRequest(ae.applications.balances(e))}async getApplicationStats(e){return await this.makeBackendRequest(ae.applications.stats(e))}}var Rde=S({applicationId:y().uuid(),enrolled:ue(),payoutAddress:y().nullable().optional(),buildercodesEnabled:ue(),buildercodesBudgetBps:M().int().min(0).max(1e4)}),vA=S({page:M().int().min(1).max(1e4).optional(),pageSize:M().int().min(1).max(100).optional()}),BU=S({tradeId:y().uuid(),payoutAddress:y(),token:y(),amount:y(),appliedBps:M().int(),createdAt:y()}),Ode=S({payouts:Ie(BU),total:M().int().nonnegative(),page:M().int().positive(),pageSize:M().int().positive(),totalPages:M().int().nonnegative()}),LU=S({token:y(),totalAmount:y(),payoutCount:M().int().nonnegative(),lastCreditedAt:y()}),Cde=S({totalPayouts:M().int().nonnegative(),lastCreditedAt:y().nullable().optional(),byToken:Ie(LU)}),DU=S({token:y(),available:y()}),Mde=S({balances:Ie(DU)}),TA=S({token:y().trim().min(1,"token is required").regex(/^0x[0-9a-fA-F]{40}$/,"token must be a 0x-prefixed EVM address"),amount:y().trim().min(1,"amount is required").refine((e)=>/^\d+$/.test(e)&&BigInt(e)>0n,"amount must be a positive integer string")}),$de=S({payoutBalance:y(),tradingBalance:y()});var EA=S({tradingPairId:y().trim().min(1,"Trading pair ID is required and cannot be empty"),side:H(["BUY","SELL"],{message:"Order side is required and must be either 'BUY' or 'SELL'"}),price:y().trim().min(1,"Price is required and cannot be empty").refine((e)=>!Number.isNaN(Number(e)),"Price must be a valid number").refine((e)=>Number(e)>0,"Price must be greater than 0"),quantity:y().trim().min(1,"Quantity is required and cannot be empty").refine((e)=>!Number.isNaN(Number(e)),"Quantity must be a valid number").refine((e)=>Number(e)>0,"Quantity must be greater than 0"),orderType:H(["LIMIT","MARKET"]).optional(),slippageToleranceBps:M().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((e,t)=>{if(e.slippageToleranceBps!==void 0&&e.orderType!=="MARKET")t.addIssue({code:Hn.custom,message:"slippageToleranceBps is only valid when orderType is MARKET",path:["slippageToleranceBps"]})}),Nde=S({applicationName:y().nullable().optional(),applicationTakerFee:y(),applicationTakerFeeBps:M(),buyOrderLockAmount:y().nullable().optional(),makerTotalReceipt:y(),monacoMakerRebate:y(),monacoMakerRebateBps:M(),monacoMakerRebateBpsExact:y(),monacoTakerFee:y(),monacoTakerFeeBps:M(),monacoTakerFeeBpsExact:y(),notional:y(),takerTotalPayment:y(),totalTakerFees:y(),maxQuantity:y().nullable(),maxQuantityRaw:y().nullable(),slippageToleranceBps:M().nullable()}),PA=S({tradingPairId:y().trim().min(1,"Trading pair ID is required and cannot be empty")}),UU=S({tierLevel:M().int(),minVolumeThreshold:y(),makerFeeBps:y(),takerFeeBps:y()}),zde=S({currentTierLevel:M().int(),weightedVolume14d:y(),spotVolume14d:y(),perpVolume14d:y(),volumeToNextTier:y().nullable().optional(),nextTierLevel:M().int().nullable().optional(),feeSchedule:Ie(UU)});var FU=S({token:y(),available:y()}),Bde=S({balances:Ie(FU)}),Lde=S({code:y(),createdAt:y(),customCode:y(),isCustom:ue(),display:y()}),jU=H(["taken","too_short","too_long","reserved","invalid_char","looks_like_address"]),Dde=S({available:ue(),reason:Lp((e)=>e===""||e===null?void 0:e,jU.optional())}),AA=S({code:y().trim().min(1,"code is required").regex(/^[A-Za-z][A-Za-z0-9_]{4,19}$/,"code must start with a letter and be 5–20 chars of letters, digits, or underscores")}),Ude=S({code:y()}),IA=S({token:y().trim().min(1,"token is required").regex(/^0x[0-9a-fA-F]{40}$/,"token must be a 0x-prefixed EVM address"),amount:y().trim().min(1,"amount is required").refine((e)=>/^\d+$/.test(e)&&BigInt(e)>0n,"amount must be a positive integer string")}),Fde=S({rewardsBalance:y(),tradingBalance:y()}),qU=S({source:y(),sourceDisplay:y(),level:M(),amount:y(),token:y(),rateApplied:y(),createdAt:y()}),jde=S({referrer:y(),referrerDisplay:y(),totalEarned:y(),rewards:Ie(qU)}),HU=S({source:y(),sourceDisplay:y(),level:M(),totalEarned:y(),token:y()}),GU=S({wallet:y(),display:y(),referredAt:y(),totalEarned:y()}),VU=S({totalEarned:y(),level1Earned:y(),level2Earned:y(),level3Earned:y()}),qde=S({earningsBySource:Ie(HU),directReferees:Ie(GU),summary:VU});var zb=["SUBMITTED","PARTIALLY_FILLED","FILLED","SETTLED_ON_CHAIN","SETTLED","CANCELLED","REJECTED","EXPIRED"];class ZU extends Error{issues;constructor(e){let t=e.issues.map((r)=>{let n=r.path.join(".");return`${n?`${n}: `:""}${r.message}`});super(`Validation failed:
150
150
  - ${t.join(`
151
151
  - `)}`);this.name="ValidationError",this.issues=e.issues}getErrors(){let e={};for(let t of this.issues){let r=t.path.join(".");e[r||"root"]=t.message}return e}}function ye(e,t){let r=e.safeParse(t);if(!r.success)throw new ZU(r.error);return r.data}var Il=H(["BUY","SELL"],{message:'Order side must be "BUY" or "SELL"'}),Rm=H(["SPOT","MARGIN"],{message:'Trading mode must be "SPOT" or "MARGIN"'}),Ub=H(["ISOLATED","CROSS"],{message:'Margin mode must be "ISOLATED" or "CROSS"'}),Om=H(["LONG","SHORT","NONE"],{message:'Position side must be "LONG", "SHORT", or "NONE"'}),WU=H(["GTC","IOC","FOK"],{message:'Time in force must be "GTC", "IOC", or "FOK"'}),kA=H(["GTC","IOC"],{message:'Conditional order time in force must be "GTC" or "IOC"'}),Wc=H(["CANCEL_MAKER","CANCEL_TAKER","CANCEL_BOTH","SKIP"],{message:'Self-trade prevention mode must be "CANCEL_MAKER", "CANCEL_TAKER", "CANCEL_BOTH", or "SKIP"'}),kl=H(["LIMIT","MARKET"],{message:'Order type must be "LIMIT" or "MARKET"'}),ut=y().trim().min(1,"Value cannot be empty").regex(/^\d+(\.\d+)?$/,"Value must be a positive decimal number (e.g., '1.5', '100')").refine((e)=>Number.parseFloat(e)>0,{message:"Value must be greater than 0"}),Re=M5({message:"Must be a valid UUID (e.g., '123e4567-e89b-12d3-a456-426614174000')"}),ka=Ou.datetime({message:"Must be a valid ISO 8601 date string (e.g., '2024-12-31T23:59:59Z')"}),KU=M().min(0,"Slippage tolerance must be at least 0 (no slippage)").max(1,"Slippage tolerance cannot exceed 1 (100%)").optional(),Cm=M().int().min(0,"Slippage tolerance must be at least 0 bps").max(1e4,"Slippage tolerance cannot exceed 10000 bps"),YU=M().int().min(0,"Slippage tolerance must be at least 0 bps").max(1000,"Slippage tolerance cannot exceed 1000 bps"),Hde=M().int().min(0,"Slippage tolerance must be at least 0 bps").max(500,"TWAP slippage tolerance cannot exceed 500 bps (5%)"),Bb=S({triggerPrice:ut,orderType:kl,limitPrice:ut.optional(),quantity:ut.optional(),closePosition:ue().optional(),timeInForce:kA.optional(),slippageToleranceBps:Cm.optional(),expiresAt:ka.optional()}).refine((e)=>e.orderType!=="LIMIT"||e.limitPrice!==void 0,{message:"limitPrice is required for LIMIT parent TP/SL",path:["limitPrice"]}).refine((e)=>e.orderType!=="MARKET"||e.limitPrice===void 0,{message:"limitPrice must not be provided for MARKET parent TP/SL",path:["limitPrice"]}).refine((e)=>e.orderType!=="MARKET"||e.timeInForce===void 0,{message:"timeInForce is only allowed for LIMIT parent TP/SL",path:["timeInForce"]}).refine((e)=>e.orderType!=="LIMIT"||e.slippageToleranceBps===void 0,{message:"slippageToleranceBps is only allowed for MARKET parent TP/SL",path:["slippageToleranceBps"]}).refine((e)=>e.closePosition!==!0||e.quantity===void 0,{message:"quantity must be omitted when closePosition is true",path:["quantity"]}).refine((e)=>e.quantity!==void 0||e.closePosition!==!1,{message:"quantity is required when closePosition is false",path:["closePosition"]}),Lb=(e)=>e?.takeProfit!==void 0||e?.stopLoss!==void 0,RA=(e,t)=>t===void 0||t!=="NONE"&&(e==="BUY"&&t==="LONG"||e==="SELL"&&t==="SHORT"),OA=y().min(1).max(64).regex(/^[A-Za-z0-9._:-]+$/,"idempotencyKey must contain only letters, digits, or . _ : -"),JU=S({tradingPairId:Re,side:Il,quantity:ut,price:ut,options:S({idempotencyKey:OA.optional(),tradingMode:Rm.optional(),useMasterBalance:ue().optional(),expirationDate:ka.optional(),timeInForce:WU.optional(),marginAccountId:Re.optional(),marginMode:Ub.optional(),riskBucketId:Re.optional(),riskBucketCollateral:ut.optional(),strategyKey:y().min(1).max(128).optional(),positionSide:Om.optional(),leverage:ut.optional(),reduceOnly:ue().optional(),postOnly:ue().optional(),selfTradePreventionMode:Wc.optional(),takeProfit:Bb.optional(),stopLoss:Bb.optional()}).optional()}).refine((e)=>RA(e.side,e.options?.positionSide),{message:"positionSide is deprecated; when supplied BUY requires LONG and SELL requires SHORT",path:["options","positionSide"]}).refine((e)=>e.options?.tradingMode!=="MARGIN"||e.options.reduceOnly===!0||e.options.leverage!==void 0,{message:"leverage is required for normal MARGIN orders",path:["options","leverage"]}).refine((e)=>!Lb(e.options)||e.options?.tradingMode==="MARGIN",{message:"takeProfit/stopLoss are only supported for MARGIN orders",path:["options"]}).refine((e)=>!Lb(e.options)||e.options?.reduceOnly!==!0,{message:"takeProfit/stopLoss cannot be attached to reduce-only orders",path:["options"]}).refine((e)=>e.options?.riskBucketCollateral===void 0||e.options?.tradingMode==="MARGIN",{message:"riskBucketCollateral is only supported for MARGIN orders",path:["options","tradingMode"]}).refine((e)=>e.options?.marginMode===void 0||e.options?.tradingMode==="MARGIN",{message:"marginMode is only supported for MARGIN orders",path:["options","tradingMode"]}).refine((e)=>e.options?.marginMode!=="CROSS"||e.options?.marginAccountId!==void 0,{message:"marginAccountId is required for CROSS margin orders",path:["options","marginAccountId"]}).refine((e)=>e.options?.marginMode!=="CROSS"||e.options?.riskBucketId===void 0,{message:"marginMode CROSS cannot be combined with riskBucketId",path:["options","riskBucketId"]}).refine((e)=>e.options?.marginMode!=="CROSS"||e.options?.riskBucketCollateral===void 0,{message:"marginMode CROSS cannot be combined with riskBucketCollateral",path:["options","riskBucketCollateral"]}).refine((e)=>e.options?.marginMode!=="CROSS"||e.options?.strategyKey===void 0,{message:"marginMode CROSS cannot be combined with strategyKey",path:["options","strategyKey"]}).refine((e)=>e.options?.riskBucketCollateral===void 0||e.options?.riskBucketId===void 0,{message:"riskBucketCollateral creates a new risk bucket and cannot be combined with riskBucketId",path:["options","riskBucketId"]}).refine((e)=>e.options?.riskBucketCollateral===void 0||e.options?.reduceOnly!==!0,{message:"reduceOnly orders cannot create a new risk bucket",path:["options","reduceOnly"]}).refine((e)=>e.options?.postOnly!==!0||e.options?.timeInForce===void 0||e.options.timeInForce!=="IOC"&&e.options.timeInForce!=="FOK",{message:"postOnly cannot be combined with IOC/FOK time in force",path:["options","timeInForce"]}),QU=S({tradingPairId:Re,side:Il,quantity:ut,options:S({idempotencyKey:OA.optional(),tradingMode:Rm.optional(),slippageTolerance:KU,marginAccountId:Re.optional(),marginMode:Ub.optional(),riskBucketId:Re.optional(),riskBucketCollateral:ut.optional(),strategyKey:y().min(1).max(128).optional(),positionSide:Om.optional(),leverage:ut.optional(),reduceOnly:ue().optional(),selfTradePreventionMode:Wc.optional(),takeProfit:Bb.optional(),stopLoss:Bb.optional()}).optional()}).refine((e)=>RA(e.side,e.options?.positionSide),{message:"positionSide is deprecated; when supplied BUY requires LONG and SELL requires SHORT",path:["options","positionSide"]}).refine((e)=>e.options?.tradingMode!=="MARGIN"||e.options.reduceOnly===!0||e.options.leverage!==void 0,{message:"leverage is required for normal MARGIN orders",path:["options","leverage"]}).refine((e)=>!Lb(e.options)||e.options?.tradingMode==="MARGIN",{message:"takeProfit/stopLoss are only supported for MARGIN orders",path:["options"]}).refine((e)=>!Lb(e.options)||e.options?.reduceOnly!==!0,{message:"takeProfit/stopLoss cannot be attached to reduce-only orders",path:["options"]}).refine((e)=>e.options?.riskBucketCollateral===void 0||e.options?.tradingMode==="MARGIN",{message:"riskBucketCollateral is only supported for MARGIN orders",path:["options","tradingMode"]}).refine((e)=>e.options?.marginMode===void 0||e.options?.tradingMode==="MARGIN",{message:"marginMode is only supported for MARGIN orders",path:["options","tradingMode"]}).refine((e)=>e.options?.marginMode!=="CROSS"||e.options?.marginAccountId!==void 0,{message:"marginAccountId is required for CROSS margin orders",path:["options","marginAccountId"]}).refine((e)=>e.options?.marginMode!=="CROSS"||e.options?.riskBucketId===void 0,{message:"marginMode CROSS cannot be combined with riskBucketId",path:["options","riskBucketId"]}).refine((e)=>e.options?.marginMode!=="CROSS"||e.options?.riskBucketCollateral===void 0,{message:"marginMode CROSS cannot be combined with riskBucketCollateral",path:["options","riskBucketCollateral"]}).refine((e)=>e.options?.marginMode!=="CROSS"||e.options?.strategyKey===void 0,{message:"marginMode CROSS cannot be combined with strategyKey",path:["options","strategyKey"]}).refine((e)=>e.options?.riskBucketCollateral===void 0||e.options?.riskBucketId===void 0,{message:"riskBucketCollateral creates a new risk bucket and cannot be combined with riskBucketId",path:["options","riskBucketId"]}).refine((e)=>e.options?.riskBucketCollateral===void 0||e.options?.reduceOnly!==!0,{message:"reduceOnly orders cannot create a new risk bucket",path:["options","reduceOnly"]}),XU=S({orderId:Re,remainingQuantityTarget:ut.optional()}),eF=S({orderId:Re,newOrder:S({price:ut.optional(),quantity:ut.optional(),useMasterBalance:ue().optional(),postOnly:ue().optional(),selfTradePreventionMode:Wc.optional()})}),tF=S({status:st([H(zb),Ie(H(zb)).min(1,"Status filter must list at least one status")]).optional(),tradingPairId:Re.optional(),tradingMode:Rm.optional(),marginAccountId:Re.optional(),page:M().int().min(1,"Page must be at least 1").optional(),pageSize:M().int().min(1,"Page size must be at least 1").max(1000,"Page size cannot exceed 1000").optional(),pageToken:y().optional()}).superRefine((e,t)=>{if(e.page!==void 0&&e.pageToken===void 0&&e.pageSize!==void 0&&e.pageSize>100)t.addIssue({code:Hn.custom,message:"Page size cannot exceed 100 in page-number mode (page without pageToken)",path:["pageSize"]})}),xIt=H(["STOP_LOSS","TAKE_PROFIT"],{message:'conditionType must be "STOP_LOSS" or "TAKE_PROFIT"'}),_It=H(["MARK_PRICE"],{message:'triggerSource must be "MARK_PRICE"'}),Gde=H(["PENDING_PARENT","ACTIVE","TRIGGERING","TRIGGERED","CANCELLED","EXPIRED","FAILED"],{message:"Invalid conditional order state"}),wIt=H(["LONG","SHORT"],{message:'Position side must be "LONG" or "SHORT"'}),CA=S({conditionalOrderId:Re}),rF=S({marginAccountId:Re.optional(),tradingPairId:Re.optional(),state:Gde.optional(),page:M().int().min(1,"Page must be at least 1").optional(),pageSize:M().int().min(1,"Page size must be at least 1").max(100,"Page size cannot exceed 100").optional()}),Vde=H(["PENDING","ACTIVE","COMPLETED","CANCELLED"],{message:"Invalid TWAP order state"}),Zde=st([M().int("durationSeconds must be a whole number of seconds").positive("durationSeconds must be greater than 0"),y().regex(/^[1-9]\d*$/,"durationSeconds must be a positive integer string (e.g., '3600')")]),Wde=2592000000,nF=S({tradingPairId:Re,side:Il,quantity:ut,options:S({durationSeconds:Zde.optional(),startTime:ka.optional(),endTime:ka.optional(),limitPrice:ut.optional(),slippageToleranceBps:Hde.optional(),randomize:ue().optional(),executionStyle:H(["TAKER","PASSIVE"]).optional(),reduceOnly:ue().optional(),tradingMode:Rm.optional(),marginAccountId:Re.optional(),riskBucketId:Re.optional(),marginMode:Ub.optional(),leverage:ut.optional(),strategyKey:y().min(1).max(128).optional(),useMasterBalance:ue().optional(),clientTwapId:y().min(1).max(36,"clientTwapId cannot exceed 36 characters").optional(),triggerPrice:ut.optional(),triggerDirection:H(["ABOVE","BELOW"]).optional(),conditionalExpiry:ka.optional()})}).refine((e)=>e.options.durationSeconds!==void 0!==(e.options.endTime!==void 0),{message:"Exactly one of durationSeconds or endTime must be set",path:["options","durationSeconds"]}).refine((e)=>e.options.startTime===void 0||e.options.endTime!==void 0,{message:"startTime is only valid together with endTime",path:["options","startTime"]}).refine((e)=>e.options.marginMode===void 0||e.options.tradingMode==="MARGIN",{message:"marginMode is only supported for MARGIN orders",path:["options","tradingMode"]}).refine((e)=>e.options.riskBucketId===void 0||e.options.tradingMode==="MARGIN",{message:"riskBucketId is only supported for MARGIN orders",path:["options","tradingMode"]}).refine((e)=>e.options.marginMode!=="CROSS"||e.options.riskBucketId===void 0,{message:"marginMode CROSS cannot be combined with riskBucketId",path:["options","riskBucketId"]}).refine((e)=>e.options.marginMode!=="CROSS"||e.options.strategyKey===void 0,{message:"marginMode CROSS cannot be combined with strategyKey",path:["options","strategyKey"]}).refine((e)=>e.options.tradingMode!=="MARGIN"||e.options.reduceOnly===!0||e.options.leverage!==void 0,{message:"leverage is required for normal MARGIN TWAP orders",path:["options","leverage"]}).refine((e)=>e.options.triggerPrice!==void 0===(e.options.triggerDirection!==void 0),{message:"triggerPrice and triggerDirection are both-or-neither",path:["options","triggerDirection"]}).refine((e)=>e.options.triggerPrice===void 0||e.options.durationSeconds!==void 0,{message:"conditional TWAP (triggerPrice) requires durationSeconds — the window floats from the trigger instant",path:["options","durationSeconds"]}).refine((e)=>e.options.triggerPrice===void 0||e.options.startTime===void 0&&e.options.endTime===void 0,{message:"triggerPrice is incompatible with startTime/endTime",path:["options","triggerPrice"]}).refine((e)=>e.options.conditionalExpiry===void 0||e.options.triggerPrice!==void 0,{message:"conditionalExpiry is only valid together with triggerPrice",path:["options","conditionalExpiry"]}).refine((e)=>{let t=e.options.conditionalExpiry;if(t===void 0)return!0;let r=Date.parse(t);return Number.isNaN(r)||r>Date.now()},{message:"conditionalExpiry must be in the future",path:["options","conditionalExpiry"]}).refine((e)=>{let t=e.options.conditionalExpiry;if(t===void 0)return!0;let r=Date.parse(t);return Number.isNaN(r)||r-Date.now()<=Wde},{message:"conditionalExpiry cannot be more than 30 days after creation (the maximum window)",path:["options","conditionalExpiry"]}),Fb=S({twapOrderId:Re}),oF=S({state:Vde.optional(),tradingPairId:Re.optional(),page:M().int().min(1,"Page must be at least 1").optional(),pageSize:M().int().min(1,"Page size must be at least 1").max(100,"Page size cannot exceed 100").optional()}),Kde=S({tradingPairId:Re,orderType:kl,side:Il,price:ut.optional(),quantity:ut,idempotencyKey:OA.optional(),tradingMode:Rm.optional(),slippageTolerance:KU,useMasterBalance:ue().optional(),expirationDate:ka.optional(),timeInForce:WU.optional(),marginAccountId:Re.optional(),marginMode:Ub.optional(),riskBucketId:Re.optional(),riskBucketCollateral:ut.optional(),strategyKey:y().min(1).max(128).optional(),positionSide:Om.optional(),leverage:ut.optional(),reduceOnly:ue().optional(),postOnly:ue().optional(),selfTradePreventionMode:Wc.optional()}).refine((e)=>e.orderType!=="LIMIT"||e.price!==void 0,{message:"Price is required for LIMIT orders",path:["price"]}).refine((e)=>e.orderType!=="MARKET"||e.price===void 0,{message:"Price must not be provided for MARKET orders",path:["price"]}).refine((e)=>e.orderType!=="MARKET"||e.timeInForce===void 0,{message:"timeInForce must not be provided for MARKET orders",path:["timeInForce"]}).refine((e)=>e.orderType!=="MARKET"||e.postOnly!==!0,{message:"postOnly must not be provided for MARKET orders",path:["postOnly"]}).refine((e)=>e.postOnly!==!0||e.timeInForce===void 0||e.timeInForce!=="IOC"&&e.timeInForce!=="FOK",{message:"postOnly cannot be combined with IOC/FOK time in force",path:["postOnly"]}).refine((e)=>e.riskBucketCollateral===void 0||e.tradingMode==="MARGIN",{message:"riskBucketCollateral is only supported for MARGIN orders",path:["tradingMode"]}).refine((e)=>e.marginMode===void 0||e.tradingMode==="MARGIN",{message:"marginMode is only supported for MARGIN orders",path:["tradingMode"]}).refine((e)=>e.marginMode!=="CROSS"||e.marginAccountId!==void 0,{message:"marginAccountId is required for CROSS margin orders",path:["marginAccountId"]}).refine((e)=>e.marginMode!=="CROSS"||e.riskBucketId===void 0,{message:"marginMode CROSS cannot be combined with riskBucketId",path:["riskBucketId"]}).refine((e)=>e.marginMode!=="CROSS"||e.riskBucketCollateral===void 0,{message:"marginMode CROSS cannot be combined with riskBucketCollateral",path:["riskBucketCollateral"]}).refine((e)=>e.marginMode!=="CROSS"||e.strategyKey===void 0,{message:"marginMode CROSS cannot be combined with strategyKey",path:["strategyKey"]}).refine((e)=>e.riskBucketCollateral===void 0||e.riskBucketId===void 0,{message:"riskBucketCollateral creates a new risk bucket and cannot be combined with riskBucketId",path:["riskBucketId"]}).refine((e)=>e.riskBucketCollateral===void 0||e.reduceOnly!==!0,{message:"reduceOnly orders cannot create a new risk bucket",path:["reduceOnly"]}).refine((e)=>RA(e.side,e.positionSide),{message:"positionSide is deprecated; when supplied BUY requires LONG and SELL requires SHORT",path:["positionSide"]}).refine((e)=>e.tradingMode!=="MARGIN"||e.reduceOnly===!0||e.leverage!==void 0,{message:"leverage is required for normal MARGIN orders",path:["leverage"]}),Db=100,iF=S({orders:Ie(Kde).min(1,"At least one order is required").max(Db,`At most ${Db} orders per batch request`)}),Yde=S({orderId:Re,price:ut.optional(),quantity:ut.optional(),useMasterBalance:ue().optional(),postOnly:ue().optional(),selfTradePreventionMode:Wc.optional()}).refine((e)=>e.price!==void 0||e.quantity!==void 0,{message:"At least one of price or quantity must be provided"}),sF=S({orders:Ie(Yde).min(1,"At least one order is required").max(Db,`At most ${Db} orders per batch request`)});var MA=S({page:M().int().min(1,"Page must be at least 1").optional(),pageSize:M().int().min(1,"Page size must be at least 1").max(100,"Page size cannot exceed 100").optional()}),aF=MA.extend({state:y().trim().min(1,"State cannot be empty").optional(),tradingPairId:Re.optional()}),cF=S({marginAccountId:Re,tradingPairId:Re.optional()}),uF=S({tradingPairId:Re.optional()}).optional(),dF=S({asset:y().trim().min(1,"Asset cannot be empty").optional()}).optional(),Jde=S({asset:y().trim().min(1,"Asset cannot be empty"),amount:ut,tradingPairId:Re.optional(),strategyKey:y().trim().min(1,"Strategy key cannot be empty").optional(),marginMode:H(["ISOLATED","CROSS"]).optional()}).refine((e)=>!(e.marginMode==="CROSS"&&e.tradingPairId!==void 0),{message:"tradingPairId is not supported for CROSS risk buckets",path:["tradingPairId"]}),jb=S({asset:y().trim().min(1,"Asset cannot be empty"),amount:ut}),Qde=S({tradingPairId:Re,strategyKey:y().trim().min(1,"Strategy key cannot be empty").optional()}),lF=Qde.extend({marginMode:_e("ISOLATED").optional(),selectedTradingPairIds:kn().optional(),applyToPositionMargin:ue().optional()}),Xde=S({marginMode:_e("CROSS"),selectedTradingPairIds:kn().optional(),strategyKey:kn().optional()}),ele=S({marginMode:_e("CROSS"),selectedTradingPairIds:kn().optional(),strategyKey:kn().optional(),tradingPairId:kn().optional()}),$A=S({marginAccountId:Re,request:Jde}),pF=S({request:jb}),tle=S({marginMode:H(["ISOLATED","CROSS"]).optional(),selectedTradingPairIds:Et().optional()}).loose().superRefine((e,t)=>{if(e.selectedTradingPairIds===void 0)return;t.addIssue({code:"custom",path:["selectedTradingPairIds"],message:e.marginMode==="CROSS"?"selectedTradingPairIds is not accepted on a CROSS transfer: cross scope is derived from trading, so a funding call has nothing to declare":"selectedTradingPairIds is not supported for ISOLATED risk buckets"})}),fF=S({request:tle.pipe(st([jb.merge(lF).strict(),jb.merge(ele).strict()]))}),mF=S({request:jb}),hF=MA.extend({marginAccountId:Re,movementType:y().trim().min(1,"Movement type cannot be empty").optional()}),gF=MA.extend({movementType:y().trim().min(1,"Movement type cannot be empty").optional()}).optional(),NA=S({tradingPairId:Re,side:Il,positionSide:Om.optional(),orderType:kl,price:ut.optional(),quantity:ut,leverage:ut.optional(),reduceOnly:ue().optional(),slippageToleranceBps:YU.optional()}),zA=(e,t)=>{if(e.orderType!=="MARKET"&&e.slippageToleranceBps!==void 0)t.addIssue({code:Hn.custom,message:"slippageToleranceBps is only supported for MARKET orders",path:["slippageToleranceBps"]});if(e.positionSide!==void 0){let r=e.side==="BUY"?"LONG":"SHORT";if(e.positionSide!==r)t.addIssue({code:Hn.custom,message:"positionSide must match side when provided (BUY=LONG, SELL=SHORT)",path:["positionSide"]})}if(e.reduceOnly!==!0&&e.leverage===void 0)t.addIssue({code:Hn.custom,message:"leverage is required for normal margin orders",path:["leverage"]})},yF=NA.strict().superRefine(zA),rle=NA.merge(lF).strict().superRefine(zA),nle=NA.merge(Xde).strict().superRefine(zA),ole=S({marginMode:H(["ISOLATED","CROSS"]).optional(),selectedTradingPairIds:Et().optional()}).loose().superRefine((e,t)=>{if(e.selectedTradingPairIds===void 0)return;t.addIssue({code:"custom",path:["selectedTradingPairIds"],message:e.marginMode==="CROSS"?"selectedTradingPairIds is not accepted on a CROSS preview: cross scope is derived from trading, so a preview has nothing to declare":"selectedTradingPairIds is not supported for ISOLATED risk buckets"})}),ile=ole.pipe(st([rle,nle])),bF=S({marginAccountId:Re,request:yF}).refine((e)=>e.request.orderType!=="LIMIT"||e.request.price!==void 0,{message:"price is required for LIMIT risk simulations",path:["request","price"]}),xF=S({request:yF}).refine((e)=>e.request.orderType!=="LIMIT"||e.request.price!==void 0,{message:"price is required for LIMIT risk simulations",path:["request","price"]}),_F=S({request:ile}).refine((e)=>e.request.orderType!=="LIMIT"||e.request.price!==void 0,{message:"price is required for LIMIT risk simulations",path:["request","price"]});var wF=H(["1m","5m","15m","30m","1h","4h","1d","1w","1M"],{message:'Interval must be one of: "1m", "5m", "15m", "30m", "1h", "4h", "1d", "1w", "1M"'}),sle=31536000000,ale=946684800000,qb=M().int().positive({message:"Timestamp must be a positive integer (milliseconds since epoch)"}).min(ale,{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((e)=>e<=Date.now()+sle,{message:"Timestamp must not be unreasonably far in the future (max 1 year ahead)"}),IIt=S({tradingPairId:Re,interval:wF,startTime:qb,endTime:qb}).refine((e)=>e.startTime<e.endTime,{message:"startTime must be less than endTime",path:["endTime"]}),kIt=y().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")'}),cle=M().int().positive({message:"Limit must be a positive integer"}).max(500,{message:"Limit cannot exceed 500 bars per request"}).optional(),SF=S({tradingPairId:Re,interval:wF,startTime:qb.optional(),endTime:qb.optional(),limit:cle,priceType:H(["trade","mark"]).optional()}).refine((e)=>{if(e.startTime!==void 0&&e.endTime!==void 0)return e.startTime<e.endTime;return!0},{message:"startTime must be less than endTime",path:["endTime"]});var RIt=S({tradingPairId:Re}),OIt=S({query:y().min(1,"Search query cannot be empty").optional(),pageSize:M().int().min(1).max(100).optional(),page:M().int().min(1).optional()}),fi=S({tradingPairId:Re});var TF=S({page:M().int().min(1,"Page must be at least 1").optional(),pageSize:M().int().min(1,"Page size must be at least 1").max(100,"Page size cannot exceed 100").optional()}),ule=H(["OPEN","CLOSED","LIQUIDATING","LIQUIDATED"],{message:'Position status must be "OPEN", "CLOSED", "LIQUIDATING", or "LIQUIDATED"'}),dle=H(["MARKET","LIMIT","IOC"],{message:'Close type must be "MARKET", "LIMIT", or "IOC"'}),Mm=S({positionId:Re}),EF=TF.extend({marginAccountId:Re.optional(),tradingPairId:Re.optional(),status:ule.optional()}),PF=Mm,AF=Mm.extend({request:S({closeType:dle,limitPrice:ut.optional(),slippageToleranceBps:Cm.optional(),quantity:ut.optional()})}).refine((e)=>e.request.closeType==="MARKET"||e.request.limitPrice!==void 0,{message:"limitPrice is required for LIMIT and IOC close requests",path:["request","limitPrice"]}).refine((e)=>e.request.closeType!=="MARKET"||e.request.limitPrice===void 0,{message:"limitPrice is not allowed for MARKET close requests",path:["request","limitPrice"]}),IF=S({tradingPairId:Re.optional(),slippageToleranceBps:Cm.optional()}),kF=Mm,vF=S({triggerPrice:ut,orderType:kl,limitPrice:ut.optional(),quantity:ut.optional(),closePosition:ue().optional(),timeInForce:kA.optional(),slippageToleranceBps:Cm.optional(),expiresAt:ka.optional()}).refine((e)=>e.orderType!=="LIMIT"||e.limitPrice!==void 0,{message:"limitPrice is required for LIMIT TP/SL legs",path:["limitPrice"]}).refine((e)=>e.orderType!=="MARKET"||e.limitPrice===void 0,{message:"limitPrice must not be provided for MARKET TP/SL legs",path:["limitPrice"]}).refine((e)=>e.orderType!=="MARKET"||e.timeInForce===void 0,{message:"timeInForce is only allowed for LIMIT TP/SL legs",path:["timeInForce"]}).refine((e)=>e.orderType!=="LIMIT"||e.slippageToleranceBps===void 0,{message:"slippageToleranceBps is only allowed for MARKET TP/SL legs",path:["slippageToleranceBps"]}).refine((e)=>e.closePosition!==!0||e.quantity===void 0,{message:"quantity must be omitted when closePosition is true",path:["quantity"]}).refine((e)=>e.quantity!==void 0||e.closePosition!==!1,{message:"quantity is required when closePosition is false",path:["closePosition"]}),RF=Mm.extend({request:S({takeProfit:vF.optional(),stopLoss:vF.optional(),oco:ue().optional()}).refine((e)=>e.takeProfit!==void 0||e.stopLoss!==void 0,{message:"At least one of takeProfit or stopLoss is required"}).refine((e)=>e.oco!==!0||e.takeProfit!==void 0&&e.stopLoss!==void 0,{message:"oco=true requires both takeProfit and stopLoss",path:["oco"]})}),OF=TF.extend({positionId:Re.optional(),marginAccountId:Re.optional(),tradingPairId:Re.optional(),reductionOnly:ue().optional()}),lle=H(["1m","5m","15m","1h","4h","1d"],{message:'Interval must be one of "1m", "5m", "15m", "1h", "4h", "1d"'}),CF=Mm.extend({params:S({interval:lle,startTime:M().int().min(0,"startTime must be a non-negative millisecond timestamp").optional(),endTime:M().int().min(0,"endTime must be a non-negative millisecond timestamp").optional()}).refine((e)=>e.startTime===void 0||e.endTime===void 0||e.startTime<e.endTime,{message:"startTime must be less than endTime",path:["startTime"]})});var ple=H(["CREDIT","DEBIT","LOCK","UNLOCK","FEE"],{message:'Entry type must be "CREDIT", "DEBIT", "LOCK", "UNLOCK", or "FEE"'}),fle=H(["DEPOSIT","WITHDRAWAL","TRADE","FEE","FUNDING","LIQUIDATION","INTEREST","REWARD"],{message:'Transaction type must be "DEPOSIT", "WITHDRAWAL", "TRADE", "FEE", "FUNDING", "LIQUIDATION", "INTEREST", or "REWARD"'}),MF=S({mode:Wc}),$F=S({page:M().int("Page must be an integer").min(1,"Page must be at least 1").optional(),pageSize:M().int("Page size must be an integer").min(1,"Page size must be at least 1").max(100,"Page size cannot exceed 100").optional(),entryType:ple.optional(),transactionType:fle.optional(),assetId:Re.optional()}),NF=S({page:M().int("Page must be an integer").min(1,"Page must be at least 1").optional(),pageSize:M().int("Page size must be an integer").min(1,"Page size must be at least 1").max(1000,"Page size cannot exceed 1000").optional(),tradingPairId:Re.optional(),pageToken:y().optional()}).superRefine((e,t)=>{if(e.page!==void 0&&e.pageToken===void 0&&e.pageSize!==void 0&&e.pageSize>100)t.addIssue({code:Hn.custom,message:"Page size cannot exceed 100 in page-number mode (page without pageToken)",path:["pageSize"]})}),zF=S({page:M().int("Page must be an integer").min(1,"Page must be at least 1").optional(),pageSize:M().int("Page size must be an integer").min(1,"Page size must be at least 1").max(100,"Page size cannot exceed 100").optional(),tradingPairId:Re.optional(),positionId:Re.optional(),marginAccountId:Re.optional()});var FIt=y().regex(/^0x[a-fA-F0-9]{40}$/,{message:"Must be a valid Ethereum address (e.g., '0x1234...5678')"}),BA=st([y().regex(/^\d+$/,"Must be a positive integer string").refine((e)=>BigInt(e)>0n,{message:"Amount must be greater than 0"}),N5().refine((e)=>e>0n,{message:"Amount must be greater than 0"})]),BF=S({assetId:Re,amount:BA,autoWait:ue().optional()}),LF=S({assetId:Re,amount:BA,autoWait:ue().optional(),target:H(["spot","margin"]).optional(),options:S({asErc20:ue().optional()}).optional()}),DF=S({assetId:Re,amount:BA,destination:y().regex(/^0x[a-fA-F0-9]{40}$/,"destination must be a 0x-prefixed 20-byte hex address"),autoWait:ue().optional(),source:H(["spot","margin"]).optional()}),jIt=S({assetId:Re});var mle="OPERATIONS_BLOCKED",hle="OVERLOADED";function gle(e){if(!(e instanceof Zt)||!e.retryable)return e;if(!(e.statusCode===void 0||e.statusCode>=500)||yle(e))return e;return e.retryable=!1,e.suggestion="The claim's outcome is unknown: it may have committed after this failure. Do not retry automatically, and do not rely on a balance read to decide — an admitted claim can still be queued, so an unchanged balance does not prove it will not commit. Treat the claim as pending and reconcile before issuing another; this endpoint has no idempotency key, so a retry can claim a second time.",e}function yle(e){let t=e.responseBody;if(t===null||typeof t!=="object")return!1;let{error:r,code:n}=t;return r===mle||n===hle}class Hb extends qe{async getConfig(){return this.makeAuthenticatedRequest("/api/v1/buildercodes/config",{method:"GET"})}async listPayouts(e){if(e)ye(vA,e);let t=new URLSearchParams;if(e?.page!==void 0)t.append("page",e.page.toString());if(e?.pageSize!==void 0)t.append("pageSize",e.pageSize.toString());let r=t.toString(),n=r?`/api/v1/buildercodes/payouts?${r}`:"/api/v1/buildercodes/payouts";return this.makeAuthenticatedRequest(n,{method:"GET"})}async getPayoutSummary(){return this.makeAuthenticatedRequest("/api/v1/buildercodes/payouts/summary",{method:"GET"})}async getRewardsBalance(){return this.makeAuthenticatedRequest("/api/v1/buildercodes/rewards/balance",{method:"GET"})}async claimBuildercodeRewards(e){let t=ye(TA,e);try{return await this.makeAuthenticatedRequest("/api/v1/buildercodes/rewards/claim",{method:"POST",body:JSON.stringify({token:t.token,amount:t.amount})})}catch(r){throw gle(r)}}}class LA extends qe{async upsertDelegatedAgent(e){return this.makeAuthenticatedRequest(ae.delegatedAgents.list(),{method:"POST",body:JSON.stringify({agentAddress:e.agentAddress,name:e.name,expiresAt:e.expiresAt,allowedActions:e.allowedActions,allowedTradingPairIds:e.allowedTradingPairIds,allowedMarginAccountIds:e.allowedMarginAccountIds,allowedOrderTypes:e.allowedOrderTypes,allowedTimeInForce:e.allowedTimeInForce,maxLeverage:e.maxLeverage,maxOrderNotional:e.maxOrderNotional,maxOpenOrders:e.maxOpenOrders})})}async listDelegatedAgents(){return this.makeAuthenticatedRequest(ae.delegatedAgents.list())}async listDelegatedOwners(){return this.makeAuthenticatedRequest(ae.delegatedAgents.owners())}async revokeDelegatedAgent(e){return this.makeAuthenticatedRequest(ae.delegatedAgents.byId(e),{method:"DELETE"})}async createDelegatedSession(e){return this.makeAuthenticatedRequest(ae.delegatedAgents.sessions(),{method:"POST",body:JSON.stringify({ownerUserId:e.ownerUserId,sessionPublicKey:e.sessionPublicKey})})}}class Gb extends qe{async mint(e){return await this.makeAuthenticatedRequest(ae.faucet.mint(),{method:"POST",body:JSON.stringify({turnstileToken:e.turnstileToken})})}async getInfo(){return await this.makeAuthenticatedRequest(ae.faucet.info(),{method:"GET"})}}class Vb extends qe{async simulateFees(e){let t=ye(EA,e),r=new URLSearchParams;if(r.append("tradingPairId",t.tradingPairId),r.append("side",t.side),r.append("price",t.price),r.append("quantity",t.quantity),t.orderType!==void 0)r.append("orderType",t.orderType);if(t.slippageToleranceBps!==void 0)r.append("slippageToleranceBps",String(t.slippageToleranceBps));let n=`/api/v1/fees/simulate?${r.toString()}`;return await this.makeAuthenticatedRequest(n,{method:"GET"})}async getMyFeeTier(e){let t=ye(PA,e),r=new URLSearchParams;r.append("tradingPairId",t.tradingPairId);let n=`/api/v1/fees/tier?${r.toString()}`;return await this.makeAuthenticatedRequest(n,{method:"GET"})}}class DA extends qe{async listAssignments(e={}){let t=new URLSearchParams;if(e.page!==void 0)t.set("page",String(e.page));if(e.pageSize!==void 0)t.set("pageSize",String(e.pageSize));return this.makeAuthenticatedRequest(`/api/v1/managed-markets/assignments${t.size?`?${t}`:""}`)}async claimLease(e,t){return this.makeAuthenticatedRequest(`/api/v1/managed-markets/${encodeURIComponent(e)}/lease`,{method:"POST",body:JSON.stringify(t)})}async refreshQuotes(e,t){return this.makeAuthenticatedRequest(`/api/v1/managed-markets/${encodeURIComponent(e)}/quotes`,{method:"POST",body:JSON.stringify(t)})}}class Zb extends qe{async listMarginAccounts(e){if(e)ye(aF,e);return await this.makeAuthenticatedRequest(ae.marginAccounts.list(e?{page:e.page,pageSize:e.pageSize,state:e.state,tradingPairId:e.tradingPairId}:void 0))}async getMarginAccountSummary(e,t){return ye(cF,{marginAccountId:e,...t}),await this.makeAuthenticatedRequest(ae.marginAccounts.summary(e,{tradingPairId:t?.tradingPairId}))}async getParentMarginAccountSummary(e){return ye(uF,e),await this.makeAuthenticatedRequest(ae.marginAccounts.parentSummary({tradingPairId:e?.tradingPairId}))}async getAvailableCollateral(e){return ye(dF,e),await this.makeAuthenticatedRequest(ae.marginAccounts.availableCollateral(e))}async transferCollateralToMarginAccount(e,t){return ye($A,{marginAccountId:e,request:t}),await this.makeAuthenticatedRequest(ae.marginAccounts.transferIn(e),{method:"POST",body:JSON.stringify({asset:t.asset,amount:t.amount,tradingPairId:t.tradingPairId,strategyKey:t.strategyKey})})}async transferCollateralToParentMarginAccount(e){return ye(pF,{request:e}),await this.makeAuthenticatedRequest(ae.marginAccounts.transferInParent(),{method:"POST",body:JSON.stringify({asset:e.asset,amount:e.amount})})}async transferCollateralToRiskBucket(e){return ye(fF,{request:e}),await this.makeAuthenticatedRequest(ae.marginAccounts.transferInRiskBucket(),{method:"POST",body:JSON.stringify({asset:e.asset,amount:e.amount,tradingPairId:e.tradingPairId,strategyKey:e.strategyKey,marginMode:e.marginMode,applyToPositionMargin:e.applyToPositionMargin})})}async transferCollateralFromMarginAccount(e,t){return ye($A,{marginAccountId:e,request:t}),await this.makeAuthenticatedRequest(ae.marginAccounts.transferOut(e),{method:"POST",body:JSON.stringify({asset:t.asset,amount:t.amount,tradingPairId:t.tradingPairId,strategyKey:t.strategyKey,marginMode:t.marginMode})})}async transferCollateralFromParentMarginAccount(e){return ye(mF,{request:e}),await this.makeAuthenticatedRequest(ae.marginAccounts.transferOutParent(),{method:"POST",body:JSON.stringify({asset:e.asset,amount:e.amount})})}async getMarginAccountMovements(e,t){return ye(hF,{marginAccountId:e,...t}),await this.makeAuthenticatedRequest(ae.marginAccounts.movements(e,t))}async getParentMarginAccountMovements(e){return ye(gF,e),await this.makeAuthenticatedRequest(ae.marginAccounts.parentMovements(e))}async simulateOrderRisk(e,t){return ye(bF,{marginAccountId:e,request:t}),await this.makeAuthenticatedRequest(ae.marginAccounts.simulateOrderRisk(e),{method:"POST",body:JSON.stringify({tradingPairId:t.tradingPairId,side:t.side,positionSide:t.positionSide,orderType:t.orderType,price:t.price,quantity:t.quantity,leverage:t.leverage,reduceOnly:t.reduceOnly,slippageToleranceBps:t.slippageToleranceBps})})}async simulateParentMarginOrderRisk(e){return ye(xF,{request:e}),await this.makeAuthenticatedRequest(ae.marginAccounts.simulateParentMarginOrderRisk(),{method:"POST",body:JSON.stringify({tradingPairId:e.tradingPairId,side:e.side,positionSide:e.positionSide,orderType:e.orderType,price:e.price,quantity:e.quantity,leverage:e.leverage,reduceOnly:e.reduceOnly,slippageToleranceBps:e.slippageToleranceBps})})}async simulateRiskBucketOrderRisk(e){return ye(_F,{request:e}),await this.makeAuthenticatedRequest(ae.marginAccounts.simulateRiskBucketOrderRisk(),{method:"POST",body:JSON.stringify({tradingPairId:e.tradingPairId,strategyKey:e.strategyKey,marginMode:e.marginMode,side:e.side,positionSide:e.positionSide,orderType:e.orderType,price:e.price,quantity:e.quantity,leverage:e.leverage,reduceOnly:e.reduceOnly,slippageToleranceBps:e.slippageToleranceBps})})}}class Wb extends qe{async getPaginatedTradingPairs(e){let t=new URLSearchParams;if(e?.page!==void 0)t.append("page",e.page.toString());if(e?.pageSize!==void 0)t.append("pageSize",e.pageSize.toString());if(e?.marketType)t.append("marketType",e.marketType);if(e?.baseToken)t.append("baseToken",e.baseToken);if(e?.quoteToken)t.append("quoteToken",e.quoteToken);if(e?.isActive!==void 0)t.append("isActive",e.isActive.toString());if(e?.category)t.append("category",e.category);let r=t.toString(),n=r?`/api/v1/market/pairs?${r}`:"/api/v1/market/pairs";return await this.makePublicRequest(n)}async getTradingPair(e){return ye(fi,{tradingPairId:e}),(await this.makePublicRequest(ae.market.getTradingPair(e))).tradingPair}async getTradingPairBySymbol(e,t){return(await this.getPaginatedTradingPairs({pageSize:100,marketType:t})).tradingPairs.find((n)=>n.symbol===e)}async getCandlesticks(e,t,r){ye(SF,{tradingPairId:e,interval:t,startTime:r?.startTime,endTime:r?.endTime,limit:r?.limit,priceType:r?.priceType});let n=new URLSearchParams;if(r?.startTime!==void 0)n.append("startTime",r.startTime.toString());if(r?.endTime!==void 0)n.append("endTime",r.endTime.toString());if(r?.limit!==void 0)n.append("limit",r.limit.toString());if(r?.priceType!==void 0)n.append("priceType",r.priceType);let o=n.toString(),i=o?`/api/v1/market/pairs/charts/candlestick/${encodeURIComponent(e)}/${t}?${o}`:`/api/v1/market/pairs/charts/candlestick/${encodeURIComponent(e)}/${t}`;return(await this.makePublicRequest(i)).data||[]}async getMarketMetadata(e){return ye(fi,{tradingPairId:e}),await this.makePublicRequest(ae.market.getMarketMetadata(e))}async getPerpMarketConfig(e){return ye(fi,{tradingPairId:e}),await this.makePublicRequest(ae.market.getPerpMarketConfig(e))}async getPerpMarketSummary(e){return ye(fi,{tradingPairId:e}),await this.makePublicRequest(ae.market.getPerpMarketSummary(e))}async getMarkPrice(e){return ye(fi,{tradingPairId:e}),await this.makePublicRequest(ae.market.getMarkPrice(e))}async getIndexPrice(e){return ye(fi,{tradingPairId:e}),await this.makePublicRequest(ae.market.getIndexPrice(e))}async getFundingState(e){return ye(fi,{tradingPairId:e}),await this.makePublicRequest(ae.market.getFundingState(e))}async listFundingHistory(e,t){return ye(fi,{tradingPairId:e}),await this.makePublicRequest(ae.market.listFundingHistory(e,t))}async listAllFundingHistory(e){return await this.makePublicRequest(ae.market.listAllFundingHistory(e))}async getOpenInterest(e){return ye(fi,{tradingPairId:e}),await this.makePublicRequest(ae.market.getOpenInterest(e))}async getScreener(e){return await this.makePublicRequest(ae.market.getScreener(e))}async getMarketStats(){return await this.makePublicRequest(ae.market.getMarketStats())}}class Kb extends qe{async getOrderbook(e,t={}){let{depth:r=10,tradingMode:n,magnitude:o,denomination:i}=t,s=new URLSearchParams;if(s.set("levels",String(r)),n)s.set("tradingMode",n);if(o!==void 0)s.set("magnitude",String(o));if(i)s.set("denomination",i.toLowerCase());let a=await this.makePublicRequest(`/api/v1/orderbook/${encodeURIComponent(e)}?${s.toString()}`);return{tradingPairId:a.tradingPairId,tradingMode:a.tradingMode,bids:a.data.bids.map((c)=>({price:c.price,quantity:c.quantity,orderCount:c.orderCount})),asks:a.data.asks.map((c)=>({price:c.price,quantity:c.quantity,orderCount:c.orderCount})),bestBid:a.data.bestBid,bestAsk:a.data.bestAsk,bidVolume:a.data.bidVolume,askVolume:a.data.askVolume,baseDecimals:a.baseDecimals,quoteDecimals:a.quoteDecimals,timestamp:a.timestamp,sequence:a.sequenceNumber}}}class Yb extends qe{async getMyTraderCode(){return await this.makeAuthenticatedRequest("/api/v1/pitpass/codes/me",{method:"GET"})}async setTraderCode(e){let t=ye(AA,{code:e});return await this.makeAuthenticatedRequest("/api/v1/pitpass/codes/me/custom",{method:"PUT",body:JSON.stringify({code:t.code})})}async clearTraderCode(){return await this.makeAuthenticatedRequest("/api/v1/pitpass/codes/me/custom",{method:"DELETE"})}async checkTraderCodeAvailability(e){let t=new URLSearchParams({code:e.trim()}).toString(),r=await this.makePublicRequest(`/api/v1/pitpass/codes/available?${t}`,{method:"GET"});return{available:r.available,reason:r.reason?r.reason:void 0}}async getTraderCodeInfo(e){let t=encodeURIComponent(e.trim());return await this.makePublicRequest(`/api/v1/pitpass/codes/${t}`,{method:"GET"})}async getRewardsBalance(){return await this.makeAuthenticatedRequest("/api/v1/pitpass/rewards/balance",{method:"GET"})}async transferRewards(e){let t=ye(IA,e);return await this.makeAuthenticatedRequest("/api/v1/pitpass/rewards/transfer",{method:"POST",body:JSON.stringify({token:t.token,amount:t.amount})})}async getMyReferralPosition(){return await this.makeAuthenticatedRequest("/api/v1/pitpass/referrals/me",{method:"GET"})}async getMyReferralDownline(){return await this.makeAuthenticatedRequest("/api/v1/pitpass/referrals/me/downline",{method:"GET"})}}var $m="/api/v1/accounts/me/portfolio";function Jb(e,t){if(!t?.period)return e;return`${e}?${new URLSearchParams({period:t.period})}`}class Qb extends qe{async getSummary(e){return await this.makeAuthenticatedRequest(Jb(`${$m}/summary`,e))}async getPerformance(e){return await this.makeAuthenticatedRequest(Jb(`${$m}/performance`,e))}async getRealizedPnl(e){return await this.makeAuthenticatedRequest(Jb(`${$m}/realized-pnl`,e))}async getAssets(e){return await this.makeAuthenticatedRequest(Jb(`${$m}/assets`,e))}async getMargin(){return await this.makeAuthenticatedRequest(`${$m}/margin`)}}class Xb extends qe{async listPositions(e){if(e)ye(EF,e);return await this.makeAuthenticatedRequest(ae.positions.list(e))}async getPosition(e){return ye(PF,{positionId:e}),await this.makeAuthenticatedRequest(ae.positions.get(e))}async closePosition(e,t){return ye(AF,{positionId:e,request:t}),await this.makeAuthenticatedRequest(ae.positions.close(e),{method:"POST",body:JSON.stringify({closeType:t.closeType,limitPrice:t.limitPrice,slippageToleranceBps:t.slippageToleranceBps,quantity:t.quantity})})}async batchCloseAllPositions(e){if(e)ye(IF,e);return await this.makeAuthenticatedRequest(ae.positions.batchCloseAll(),{method:"POST",body:JSON.stringify({tradingPairId:e?.tradingPairId,slippageToleranceBps:e?.slippageToleranceBps})})}async getPositionRisk(e){return ye(kF,{positionId:e}),await this.makeAuthenticatedRequest(ae.positions.risk(e))}async attachPositionTpSl(e,t){return ye(RF,{positionId:e,request:t}),await this.makeAuthenticatedRequest(ae.positions.attachTpSl(e),{method:"POST",body:JSON.stringify({takeProfit:t.takeProfit?{triggerPrice:t.takeProfit.triggerPrice,orderType:t.takeProfit.orderType,limitPrice:t.takeProfit.limitPrice,quantity:t.takeProfit.quantity,closePosition:t.takeProfit.closePosition,timeInForce:t.takeProfit.timeInForce,slippageToleranceBps:t.takeProfit.slippageToleranceBps,expiresAt:t.takeProfit.expiresAt}:void 0,stopLoss:t.stopLoss?{triggerPrice:t.stopLoss.triggerPrice,orderType:t.stopLoss.orderType,limitPrice:t.stopLoss.limitPrice,quantity:t.stopLoss.quantity,closePosition:t.stopLoss.closePosition,timeInForce:t.stopLoss.timeInForce,slippageToleranceBps:t.stopLoss.slippageToleranceBps,expiresAt:t.stopLoss.expiresAt}:void 0,oco:t.oco})})}async listPositionHistory(e){if(e)ye(OF,e);return await this.makeAuthenticatedRequest(ae.positions.history(e))}async getPositionPnlHistory(e,t){return ye(CF,{positionId:e,params:t}),await this.makeAuthenticatedRequest(ae.positions.pnlHistory(e,t))}}class UA extends qe{async getProfile(){return await this.makeAuthenticatedRequest("/api/v1/accounts/me")}async getPaginatedUserMovements(e){if(e)ye($F,e);let t=new URLSearchParams;if(e?.page!==void 0)t.append("page",e.page.toString());if(e?.pageSize!==void 0)t.append("pageSize",e.pageSize.toString());if(e?.entryType!==void 0)t.append("entryType",e.entryType);if(e?.transactionType!==void 0)t.append("transactionType",e.transactionType);if(e?.assetId!==void 0)t.append("assetId",e.assetId);let r=t.toString(),n=r?`/api/v1/accounts/movements?${r}`:"/api/v1/accounts/movements";return await this.makeAuthenticatedRequest(n)}async getUserBalances(e){let t=new URLSearchParams;if(e?.page!==void 0)t.append("page",e.page.toString());if(e?.pageSize!==void 0)t.append("pageSize",e.pageSize.toString());let r=t.toString(),n=r?`/api/v1/accounts/balances?${r}`:"/api/v1/accounts/balances";return await this.makeAuthenticatedRequest(n)}async getUserBalanceByAssetId(e){if(!e||e.trim()==="")throw new Zt("assetId is required and cannot be empty",{endpoint:"/api/v1/accounts/balances/{assetId}"});let t=`/api/v1/accounts/balances/${e}`;return await this.makeAuthenticatedRequest(t)}async getPortfolioStats(e){let t=new URLSearchParams({period:e});return await this.makeAuthenticatedRequest(`/api/v1/accounts/me/portfolio?${t}`)}async getPortfolioChart(e,t){let r=new URLSearchParams({period:e,metric:t});return await this.makeAuthenticatedRequest(`/api/v1/accounts/me/portfolio/chart?${r}`)}async getUserTrades(e){if(e)ye(NF,e);let t=e?.page!==void 0&&e?.pageToken===void 0,r=new URLSearchParams;if(t&&e?.page!==void 0)r.append("page",e.page.toString());if(e?.pageSize!==void 0)r.append("pageSize",e.pageSize.toString());if(e?.tradingPairId!==void 0)r.append("tradingPairId",e.tradingPairId);if(!t)r.append("pageToken",e?.pageToken??"");let n=r.toString(),o=n?`/api/v1/accounts/trades?${n}`:"/api/v1/accounts/trades";return await this.makeAuthenticatedRequest(o)}async*iterateUserTrades(e){let t="";for(;;){let r=await this.getUserTrades({...e,pageToken:t});if(yield*r.trades,!r.nextPageToken)return;t=r.nextPageToken}}async listFundingPayments(e){if(e)ye(zF,e);let t=new URLSearchParams;if(e?.page!==void 0)t.append("page",e.page.toString());if(e?.pageSize!==void 0)t.append("pageSize",e.pageSize.toString());if(e?.tradingPairId!==void 0)t.append("tradingPairId",e.tradingPairId);if(e?.positionId!==void 0)t.append("positionId",e.positionId);if(e?.marginAccountId!==void 0)t.append("marginAccountId",e.marginAccountId);let r=t.toString(),n=r?`/api/v1/accounts/funding-payments?${r}`:"/api/v1/accounts/funding-payments";return await this.makeAuthenticatedRequest(n)}async getSelfTradePreventionDefault(){return await this.makeAuthenticatedRequest("/api/v1/accounts/self-trade-prevention")}async setSelfTradePreventionDefault(e){let t=ye(MF,{mode:e});return await this.makeAuthenticatedRequest("/api/v1/accounts/self-trade-prevention",{method:"PUT",body:JSON.stringify(t)})}}class ex extends qe{async getPulse(){return await this.makePublicRequest("/api/v1/pulse",{method:"GET"})}}class tx extends qe{async list(){return await this.makeAuthenticatedRequest(ae.subAccounts.list())}async createLimit(e){return await this.makeAuthenticatedRequest(ae.subAccounts.createLimit(),{method:"POST",body:JSON.stringify(e)})}async getLimits(e){return await this.makeAuthenticatedRequest(ae.subAccounts.getLimits(e))}async updateLimit(e,t,r){return await this.makeAuthenticatedRequest(ae.subAccounts.limit(e,t),{method:"PUT",body:JSON.stringify(r)})}async deleteLimit(e,t){await this.makeAuthenticatedRequest(ae.subAccounts.limit(e,t),{method:"DELETE"})}}function ble(e){if(e==="spot")return"SPOT";if(e==="margin")return"MARGIN";throw new At(`Invalid deposit target: ${JSON.stringify(e)}. Expected "spot" or "margin".`)}class rx extends qe{async register(e={}){let{depositTarget:t,...r}=e,n=t===void 0?r:{...r,depositTarget:ble(t)};return await this.makeAuthenticatedRequest(ae.sweeper.register(),{method:"POST",body:JSON.stringify(n)})}async getChains(){return await this.makePublicRequest(ae.sweeper.chains(),{method:"GET"})}}function UF(e){return{eventType:"trade",tradingPairId:e.tradingPairId,tradingMode:e.tradingMode.toUpperCase(),data:{tradeId:e.data.tradeId,price:e.data.price,quantity:e.data.quantity,makerSide:e.data.makerSide.toUpperCase(),executedAt:e.data.executedAt??""}}}class FA extends qe{async getTrades(e,t={}){let{page:r=1}=t,n=t.pageSize!=null&&t.pageSize>0?Math.min(t.pageSize,100):25,o=new URLSearchParams;if(r>1)o.set("page",String(r));return o.set("pageSize",String(n)),(await this.makePublicRequest(`/api/v1/trades/${encodeURIComponent(e)}?${o.toString()}`)).trades.map(UF)}async getTradeById(e){let t=await this.makePublicRequest(ae.trades.byId(e));return UF(t)}}function nx(e){if(!e)return;return{triggerPrice:e.triggerPrice,orderType:e.orderType,limitPrice:e.limitPrice,timeInForce:e.timeInForce,slippageToleranceBps:e.slippageToleranceBps,expiresAt:e.expiresAt,quantity:e.quantity,closePosition:e.closePosition}}class ox extends qe{async placeLimitOrder(e,t,r,n,o){ye(JU,{tradingPairId:e,side:t,quantity:r,price:n,options:o});let i={tradingPairId:e,orderType:"LIMIT",side:t,price:n,quantity:r,tradingMode:o?.tradingMode||"SPOT",useMasterBalance:o?.useMasterBalance,expirationDate:o?.expirationDate,timeInForce:o?.timeInForce,marginAccountId:o?.marginAccountId,marginMode:o?.marginMode,riskBucketId:o?.riskBucketId,riskBucketCollateral:o?.riskBucketCollateral,strategyKey:o?.strategyKey,positionSide:o?.positionSide,leverage:o?.leverage,reduceOnly:o?.reduceOnly,postOnly:o?.postOnly,selfTradePreventionMode:o?.selfTradePreventionMode,clientOrderId:o?.clientOrderId,idempotencyKey:o?.idempotencyKey===void 0?crypto.randomUUID():o.idempotencyKey,takeProfit:nx(o?.takeProfit),stopLoss:nx(o?.stopLoss)};return await this.makeAuthenticatedRequest(ae.orders.create(),{method:"POST",body:JSON.stringify(i)})}async placeMarketOrder(e,t,r,n){ye(QU,{tradingPairId:e,side:t,quantity:r,options:n});let o={tradingPairId:e,orderType:"MARKET",side:t,slippageToleranceBps:n?.slippageTolerance!==void 0?Math.round(n.slippageTolerance*1e4):void 0,price:null,quantity:r,tradingMode:n?.tradingMode||"SPOT",marginAccountId:n?.marginAccountId,marginMode:n?.marginMode,riskBucketId:n?.riskBucketId,riskBucketCollateral:n?.riskBucketCollateral,strategyKey:n?.strategyKey,positionSide:n?.positionSide,leverage:n?.leverage,reduceOnly:n?.reduceOnly,selfTradePreventionMode:n?.selfTradePreventionMode,takeProfit:nx(n?.takeProfit),stopLoss:nx(n?.stopLoss),clientOrderId:n?.clientOrderId,idempotencyKey:n?.idempotencyKey===void 0?crypto.randomUUID():n.idempotencyKey};return await this.makeAuthenticatedRequest(ae.orders.create(),{method:"POST",body:JSON.stringify(o)})}async cancelOrder(e,t){ye(XU,{orderId:e,remainingQuantityTarget:t?.remainingQuantityTarget});let r={orderId:e,...t?.remainingQuantityTarget!==void 0&&{remainingQuantityTarget:t.remainingQuantityTarget}};return await this.makeAuthenticatedRequest(ae.orders.cancel(),{method:"POST",body:JSON.stringify(r)})}async cancelConditionalOrder(e){return ye(CA,{conditionalOrderId:e}),await this.makeAuthenticatedRequest(ae.orders.cancelConditional(e),{method:"DELETE"})}async getConditionalOrder(e){return ye(CA,{conditionalOrderId:e}),await this.makeAuthenticatedRequest(ae.orders.getConditional(e),{method:"GET"})}async listConditionalOrders(e){if(e)ye(rF,e);let{page:t=1,pageSize:r=20,marginAccountId:n,tradingPairId:o,state:i}=e||{};return await this.makeAuthenticatedRequest(ae.orders.listConditional({page:t,pageSize:Math.min(Math.max(r,1),100),marginAccountId:n,tradingPairId:o,state:i}),{method:"GET"})}async batchCancel(e){if(!e||e.length===0)throw Error("orderIds is required and must not be empty");return this.makeAuthenticatedRequest(ae.orders.batchCancel(),{method:"POST",body:JSON.stringify({orderIds:e})})}async batchCancelAll(e){let t=e?ae.orders.batchCancelAllByPair(e):ae.orders.batchCancelAll();return this.makeAuthenticatedRequest(t,{method:"POST"})}async replaceOrder(e,t){ye(eF,{orderId:e,newOrder:t});let r={useMasterBalance:t.useMasterBalance??!1};if(t.price!==void 0)r.price=t.price;if(t.quantity!==void 0)r.quantity=t.quantity;if(t.postOnly!==void 0)r.postOnly=t.postOnly;if(t.selfTradePreventionMode!==void 0)r.selfTradePreventionMode=t.selfTradePreventionMode;if(t.clientOrderId!==void 0)r.clientOrderId=t.clientOrderId;return await this.makeAuthenticatedRequest(ae.orders.replace(e),{method:"PUT",body:JSON.stringify(r)})}async batchCreate(e){ye(iF,{orders:e});let t={orders:e.map((r)=>({tradingPairId:r.tradingPairId,orderType:r.orderType,side:r.side,price:r.price,quantity:r.quantity,tradingMode:r.tradingMode||"SPOT",slippageToleranceBps:r.slippageTolerance!==void 0?Math.round(r.slippageTolerance*1e4):void 0,useMasterBalance:r.useMasterBalance,expirationDate:r.expirationDate,timeInForce:r.timeInForce,marginAccountId:r.marginAccountId,marginMode:r.marginMode,riskBucketId:r.riskBucketId,riskBucketCollateral:r.riskBucketCollateral,strategyKey:r.strategyKey,positionSide:r.positionSide,leverage:r.leverage,reduceOnly:r.reduceOnly,postOnly:r.postOnly,selfTradePreventionMode:r.selfTradePreventionMode,clientOrderId:r.clientOrderId,idempotencyKey:r.idempotencyKey===void 0?crypto.randomUUID():r.idempotencyKey}))};return this.makeAuthenticatedRequest(ae.orders.batchCreate(),{method:"POST",body:JSON.stringify(t)})}async batchReplace(e){ye(sF,{orders:e});let t={orders:e.map((r)=>({orderId:r.orderId,price:r.price,quantity:r.quantity,useMasterBalance:r.useMasterBalance,postOnly:r.postOnly,selfTradePreventionMode:r.selfTradePreventionMode,clientOrderId:r.clientOrderId}))};return this.makeAuthenticatedRequest(ae.orders.batchReplace(),{method:"POST",body:JSON.stringify(t)})}async getPaginatedOrders(e){if(e)ye(tF,e);let{page:t,pageSize:r=10,status:n,tradingPairId:o,tradingMode:i,marginAccountId:s,pageToken:a}=e||{},c=r>0?r:10,d=t!==void 0&&a===void 0,l=Math.min(c,d?100:1000),p=new URLSearchParams;if(d){let b=t>0?t:1;p.append("page",b.toString())}p.append("pageSize",l.toString());let m=typeof n==="string"?n:n?.join(",");if(m)p.append("status",m);if(o)p.append("tradingPairId",o);if(i)p.append("tradingMode",i);if(s)p.append("marginAccountId",s);if(!d)p.append("pageToken",a??"");let h=`/api/v1/orders?${p.toString()}`;return await this.makeAuthenticatedRequest(h,{method:"GET"})}async*iterateOrders(e){let t="";for(;;){let r=await this.getPaginatedOrders({...e,pageToken:t});if(yield*r.orders,!r.nextPageToken)return;t=r.nextPageToken}}async getOrder(e){return{order:await this.makeAuthenticatedRequest(ae.orders.get(e),{method:"GET"}),status:"SUCCESS"}}async createTwapOrder(e,t,r,n){ye(nF,{tradingPairId:e,side:t,quantity:r,options:n});let o={tradingPairId:e,side:t,quantity:r,durationSeconds:n.durationSeconds!==void 0?Number(n.durationSeconds):void 0,startTime:n.startTime,endTime:n.endTime,limitPrice:n.limitPrice,slippageToleranceBps:n.slippageToleranceBps,randomize:n.randomize,reduceOnly:n.reduceOnly,tradingMode:n.tradingMode||"SPOT",marginAccountId:n.marginAccountId,riskBucketId:n.riskBucketId,marginMode:n.marginMode,leverage:n.leverage,strategyKey:n.strategyKey,useMasterBalance:n.useMasterBalance,clientTwapId:n.clientTwapId,executionStyle:n.executionStyle,triggerPrice:n.triggerPrice,triggerDirection:n.triggerDirection,conditionalExpiry:n.conditionalExpiry};return await this.makeAuthenticatedRequest(ae.orders.createTwap(),{method:"POST",body:JSON.stringify(o)})}async cancelTwapOrder(e){return ye(Fb,{twapOrderId:e}),await this.makeAuthenticatedRequest(ae.orders.cancelTwap(e),{method:"POST"})}async getTwapOrder(e){return ye(Fb,{twapOrderId:e}),await this.makeAuthenticatedRequest(ae.orders.getTwap(e),{method:"GET"})}async getTwapOrderTca(e){return ye(Fb,{twapOrderId:e}),await this.makeAuthenticatedRequest(ae.orders.getTwapTca(e),{method:"GET"})}async listTwapOrders(e){if(e)ye(oF,e);let{page:t=1,pageSize:r=20,state:n,tradingPairId:o}=e||{};return await this.makeAuthenticatedRequest(ae.orders.listTwap({page:t,pageSize:Math.min(Math.max(r,1),100),state:n,tradingPairId:o}),{method:"GET"})}}var jA=[{inputs:[{internalType:"address",name:"factory_",type:"address"},{internalType:"address",name:"unwrapHelper_",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[],name:"BridgeFeeTooHigh",type:"error"},{inputs:[],name:"ChainNotConfigured",type:"error"},{inputs:[],name:"ComposeNotSupported",type:"error"},{inputs:[],name:"ComposeSourceMismatch",type:"error"},{inputs:[],name:"InvalidAddress",type:"error"},{inputs:[],name:"NativeNotAccepted",type:"error"},{inputs:[],name:"NativeTransferFailed",type:"error"},{inputs:[],name:"NoRoute",type:"error"},{inputs:[],name:"NotExecutor",type:"error"},{inputs:[],name:"NotHub",type:"error"},{inputs:[],name:"NotRemote",type:"error"},{inputs:[],name:"NothingToSweep",type:"error"},{inputs:[],name:"OftCannotUnwrap",type:"error"},{inputs:[],name:"OnlyClone",type:"error"},{inputs:[],name:"QuoteNotBound",type:"error"},{inputs:[],name:"RoutedToken",type:"error"},{inputs:[{internalType:"address",name:"token",type:"address"}],name:"SafeERC20FailedOperation",type:"error"},{inputs:[],name:"StaleQuote",type:"error"},{inputs:[],name:"SweepParamsRequired",type:"error"},{inputs:[],name:"UnexpectedBridgeDebit",type:"error"},{inputs:[],name:"UnexpectedParams",type:"error"},{inputs:[],name:"UnexpectedValue",type:"error"},{inputs:[],name:"UnswapPathMissing",type:"error"},{inputs:[],name:"UntrustedComposeCaller",type:"error"},{inputs:[],name:"UntrustedComposeSource",type:"error"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"token",type:"address"},{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amountIn",type:"uint256"},{indexed:!1,internalType:"address",name:"bridgeToken",type:"address"},{indexed:!1,internalType:"uint256",name:"amountBridged",type:"uint256"},{indexed:!1,internalType:"address",name:"destination",type:"address"}],name:"Bridged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"token",type:"address"},{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Refunded",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"RefundedNative",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"token",type:"address"},{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Swept",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"tokenIn",type:"address"},{indexed:!0,internalType:"address",name:"tokenOut",type:"address"},{indexed:!1,internalType:"uint256",name:"amountIn",type:"uint256"},{indexed:!1,internalType:"uint256",name:"amountOut",type:"uint256"}],name:"Unswapped",type:"event"},{inputs:[],name:"config",outputs:[{internalType:"address",name:"user",type:"address"},{internalType:"string",name:"applicationId",type:"string"},{internalType:"address",name:"hubToken",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"factory",outputs:[{internalType:"contract ISweeperFactory",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"bytes32",name:"",type:"bytes32"},{internalType:"bytes",name:"message",type:"bytes"},{internalType:"address",name:"",type:"address"},{internalType:"bytes",name:"",type:"bytes"}],name:"lzCompose",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"}],name:"refund",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"refundNative",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"}],name:"sweep",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"},{components:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"minSwapOut",type:"uint256"},{internalType:"uint256",name:"minBridgeOut",type:"uint256"},{internalType:"bytes",name:"lzExtraOptions",type:"bytes"}],internalType:"struct SweepParams",name:"params",type:"tuple"}],name:"sweep",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"},{internalType:"address",name:"feeRefundAddress",type:"address"}],name:"sweepWithRefund",outputs:[],stateMutability:"payable",type:"function"},{inputs:[],name:"unwrapHelper",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{stateMutability:"payable",type:"receive"}];var qA=[{inputs:[],stateMutability:"nonpayable",type:"constructor"},{inputs:[{internalType:"address",name:"target",type:"address"}],name:"AddressEmptyCode",type:"error"},{inputs:[],name:"CloneArgumentsTooLong",type:"error"},{inputs:[],name:"Create2EmptyBytecode",type:"error"},{inputs:[{internalType:"address",name:"implementation",type:"address"}],name:"ERC1967InvalidImplementation",type:"error"},{inputs:[],name:"ERC1967NonPayable",type:"error"},{inputs:[],name:"FailedCall",type:"error"},{inputs:[],name:"FailedDeployment",type:"error"},{inputs:[],name:"ImplementationNotSet",type:"error"},{inputs:[{internalType:"uint256",name:"balance",type:"uint256"},{internalType:"uint256",name:"needed",type:"uint256"}],name:"InsufficientBalance",type:"error"},{inputs:[],name:"InvalidAddress",type:"error"},{inputs:[],name:"InvalidFeeCap",type:"error"},{inputs:[],name:"InvalidInitialization",type:"error"},{inputs:[],name:"NotExecutor",type:"error"},{inputs:[],name:"NotInitializing",type:"error"},{inputs:[{internalType:"address",name:"owner",type:"address"}],name:"OwnableInvalidOwner",type:"error"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"OwnableUnauthorizedAccount",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:"previousExecutor",type:"address"},{indexed:!0,internalType:"address",name:"newExecutor",type:"address"}],name:"ExecutorUpdated",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"rollup",type:"address"},{indexed:!1,internalType:"address",name:"bridgedStable",type:"address"},{indexed:!1,internalType:"address",name:"swapRouter",type:"address"},{indexed:!1,internalType:"address",name:"lzEndpoint",type:"address"}],name:"HubConfigured",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint64",name:"version",type:"uint64"}],name:"Initialized",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferStarted",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint16",name:"previousCapBps",type:"uint16"},{indexed:!1,internalType:"uint16",name:"newCapBps",type:"uint16"}],name:"PermissionlessBridgeFeeCapUpdated",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"swapRouter",type:"address"},{indexed:!1,internalType:"uint32",name:"cctpDestinationDomain",type:"uint32"},{indexed:!1,internalType:"uint32",name:"stargateDestinationEid",type:"uint32"}],name:"RemoteConfigured",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"token",type:"address"},{components:[{internalType:"enum RouteKind",name:"kind",type:"uint8"},{internalType:"address",name:"bridge",type:"address"},{internalType:"bool",name:"unwrapNative",type:"bool"},{internalType:"bool",name:"compose",type:"bool"},{internalType:"uint32",name:"dstEid",type:"uint32"},{internalType:"address",name:"bridgeToken",type:"address"},{internalType:"address",name:"hubToken",type:"address"},{internalType:"bytes",name:"swapPath",type:"bytes"}],indexed:!1,internalType:"struct BridgeRoute",name:"route",type:"tuple"}],name:"RouteSet",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"sweeper",type:"address"},{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"string",name:"applicationId",type:"string"},{indexed:!1,internalType:"address",name:"hubToken",type:"address"}],name:"SweeperDeployed",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousImplementation",type:"address"},{indexed:!0,internalType:"address",name:"newImplementation",type:"address"}],name:"SweeperImplementationUpdated",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"stargate",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"}],name:"TrustedStargateSet",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"hubToken",type:"address"},{indexed:!1,internalType:"bytes",name:"path",type:"bytes"}],name:"UnswapPathSet",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"implementation",type:"address"}],name:"Upgraded",type:"event"},{inputs:[],name:"UPGRADE_INTERFACE_VERSION",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"acceptOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"bridgedStable",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"cctpDestinationDomain",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[],name:"chainMode",outputs:[{internalType:"enum ChainMode",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"rollup_",type:"address"},{internalType:"address",name:"bridgedStable_",type:"address"},{internalType:"address",name:"swapRouter_",type:"address"},{internalType:"address",name:"lzEndpoint_",type:"address"}],name:"configureHub",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"swapRouter_",type:"address"},{internalType:"uint32",name:"cctpDestinationDomain_",type:"uint32"},{internalType:"uint32",name:"stargateDestinationEid_",type:"uint32"}],name:"configureRemote",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"string",name:"applicationId",type:"string"},{internalType:"address",name:"user",type:"address"}],name:"deploy",outputs:[{internalType:"address",name:"sweeper",type:"address"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"string",name:"applicationId",type:"string"},{internalType:"address",name:"user",type:"address"},{internalType:"address",name:"hubToken",type:"address"}],name:"deployReceiver",outputs:[{internalType:"address",name:"sweeper",type:"address"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"executor",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"forwarder",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner_",type:"address"}],name:"initialize",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"string",name:"applicationId",type:"string"},{internalType:"address",name:"user",type:"address"}],name:"isDeployed",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"lzEndpoint",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"pendingOwner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"permissionlessBridgeFeeCapBps",outputs:[{internalType:"uint16",name:"",type:"uint16"}],stateMutability:"view",type:"function"},{inputs:[],name:"proxiableUUID",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"string",name:"applicationId",type:"string"},{internalType:"address",name:"user",type:"address"},{internalType:"address",name:"hubToken",type:"address"}],name:"receiverFor",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"string",name:"applicationId",type:"string"},{internalType:"address",name:"user",type:"address"}],name:"refundNative",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"string",name:"applicationId",type:"string"},{internalType:"address",name:"user",type:"address"},{internalType:"address",name:"token",type:"address"}],name:"refundToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"rollup",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"}],name:"route",outputs:[{components:[{internalType:"enum RouteKind",name:"kind",type:"uint8"},{internalType:"address",name:"bridge",type:"address"},{internalType:"bool",name:"unwrapNative",type:"bool"},{internalType:"bool",name:"compose",type:"bool"},{internalType:"uint32",name:"dstEid",type:"uint32"},{internalType:"address",name:"bridgeToken",type:"address"},{internalType:"address",name:"hubToken",type:"address"},{internalType:"bytes",name:"swapPath",type:"bytes"}],internalType:"struct BridgeRoute",name:"",type:"tuple"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"executor_",type:"address"}],name:"setExecutor",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint16",name:"capBps",type:"uint16"}],name:"setPermissionlessBridgeFeeCapBps",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"},{components:[{internalType:"enum RouteKind",name:"kind",type:"uint8"},{internalType:"address",name:"bridge",type:"address"},{internalType:"bool",name:"unwrapNative",type:"bool"},{internalType:"bool",name:"compose",type:"bool"},{internalType:"uint32",name:"dstEid",type:"uint32"},{internalType:"address",name:"bridgeToken",type:"address"},{internalType:"address",name:"hubToken",type:"address"},{internalType:"bytes",name:"swapPath",type:"bytes"}],internalType:"struct BridgeRoute",name:"route_",type:"tuple"}],name:"setRoute",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"implementation",type:"address"}],name:"setSweeperImplementation",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"stargate",type:"address"},{internalType:"address",name:"token",type:"address"}],name:"setTrustedStargate",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"hubToken",type:"address"},{internalType:"bytes",name:"path",type:"bytes"}],name:"setUnswapPath",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stargateDestinationEid",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"stargate",type:"address"}],name:"stargateToken",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"swapRouter",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"string",name:"applicationId",type:"string"},{internalType:"address",name:"user",type:"address"},{internalType:"address",name:"token",type:"address"}],name:"sweep",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"string",name:"applicationId",type:"string"},{internalType:"address",name:"user",type:"address"},{internalType:"address",name:"hubToken",type:"address"},{internalType:"address",name:"token",type:"address"},{components:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"minSwapOut",type:"uint256"},{internalType:"uint256",name:"minBridgeOut",type:"uint256"},{internalType:"bytes",name:"lzExtraOptions",type:"bytes"}],internalType:"struct SweepParams",name:"params",type:"tuple"}],name:"sweepWithParams",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"string",name:"applicationId",type:"string"},{internalType:"address",name:"user",type:"address"}],name:"sweeperFor",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"sweeperImplementation",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"hubToken",type:"address"}],name:"unswapPath",outputs:[{internalType:"bytes",name:"",type:"bytes"}],stateMutability:"view",type:"function"},{inputs:[],name:"unwrapHelper",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"newImplementation",type:"address"},{internalType:"bytes",name:"data",type:"bytes"}],name:"upgradeToAndCall",outputs:[],stateMutability:"payable",type:"function"}];var HA=[{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 k2t=new Uint8Array(32);function ix(e,t){return xle(t),t==="margin"?JSON.stringify({clientId:e,depositTarget:"MARGIN"}):e}function xle(e){if(e!=="spot"&&e!=="margin")throw Error(`Invalid deposit target: ${JSON.stringify(e)}. `+'Expected "spot" or "margin" — lowercase, not the wire form "SPOT"/"MARGIN".')}var GA={vault:HA,sweeper:jA,sweeperFactory:qA};var _le=5000,wle=300000,Sle=(e)=>new Promise((t)=>setTimeout(t,e));class sx extends qe{publicClient;chain;applicationsAPI;profileAPI;walletClient;constructor(e,t,r,n,o,i){super(i);this.publicClient=e,this.chain=r,this.walletClient=t,this.applicationsAPI=n,this.profileAPI=o}setWalletClient(e){this.walletClient=e}async getVaultAddress(){return(await this.applicationsAPI.getApplicationConfig()).vaultContractAddress}async getClientId(){return(await this.applicationsAPI.getApplicationConfig()).clientId}async resolveAsset(e){let t,r;try{let n=await this.profileAPI.getUserBalanceByAssetId(e);t=n.token,r=n.wrappedNative===!0}catch(n){if(n instanceof Zt){if(n.statusCode===404)throw new Vi(`Asset ID '${e}' does not exist`,{revertReason:"ASSET_NOT_FOUND",cause:n});throw new Vi(`Failed to resolve asset ID '${e}': ${n.retryable?"Network error occurred":"API request failed"}`,{revertReason:n.retryable?"NETWORK_ERROR":"API_ERROR",cause:n})}throw new Vi(`Failed to resolve asset ID '${e}': Unexpected error`,{revertReason:"UNKNOWN_ERROR",cause:n instanceof Error?n:void 0})}return{tokenAddress:t,isWrappedNative:r}}async approve(e,t,r=!0){if(!this.walletClient)throw new At("Wallet client not set. Connect a wallet first.","walletClient");ye(BF,{assetId:e,amount:t,autoWait:r});let n=await this.getVaultAddress(),{tokenAddress:o}=await this.resolveAsset(e),i=this.walletClient.account;if(!i)throw new At("No account available in wallet client","account");let s=i.getNonce?await i.getNonce():0n,a=await this.walletClient.writeContract({address:o,abi:Wt,functionName:"approve",args:[n,t],chain:this.chain,account:i}),c={nonce:s,hash:a,status:"pending"};return await this.waitForTransaction(c,r)}async deposit(e,t,r=!0,n="spot",o={}){if(!this.walletClient)throw new At("Wallet client not set. Connect a wallet first.","walletClient");ye(LF,{assetId:e,amount:t,autoWait:r,target:n,options:o});let i=await this.getVaultAddress(),s=await this.getClientId(),a=ix(s,n),{tokenAddress:c,isWrappedNative:d}=await this.resolveAsset(e),l=d&&o.asErc20!==!0;if(!l){if(await this.needsApproval(e,t,o))throw new Vi(`Approval required before deposit. Please invoke approve() first for asset ${e} (token address: ${c}).`,{revertReason:"APPROVAL_REQUIRED"})}let p=this.walletClient.account;if(!p)throw new At("No account available in wallet client","account");let m;if(l)m=await this.walletClient.writeContract({address:i,abi:GA.vault,functionName:"depositNative",args:[p.address,a],account:p,chain:this.chain,value:t});else m=await this.walletClient.writeContract({address:i,abi:GA.vault,functionName:"depositERC20",args:[p.address,a,c,t],account:p,chain:this.chain});let h=p.getNonce?await p.getNonce():0n,b={hash:m,status:"pending",nonce:h};return await this.waitForTransaction(b,r)}async pollWithdrawalCalldata(e,t){let r=t?.pollIntervalMs??_le,n=t?.timeoutMs??wle,o=Date.now()+n;for(;;){try{let{vaultAddress:i,calldata:s}=await this.makePublicRequest(`/api/v1/withdrawals/${e}`);if(s&&s!=="0x")return{vaultAddress:i,calldata:s}}catch(i){if(!(i instanceof Zt&&(i.statusCode===404||i.statusCode===409)))throw i}if(Date.now()+r>o)return null;await Sle(r)}}async withdraw(e,t,r=!0,n,o){if(!this.walletClient)throw new At("Wallet client not set. Connect a wallet first.","walletClient");let i=this.walletClient.account;if(!i)throw new At("No account available in wallet client","account");let s=i.address.toLowerCase(),a=typeof n==="string"?n:"spot",c=typeof n==="string"?o:n;ye(DF,{assetId:e,amount:t,destination:s,autoWait:r,source:a});let{withdrawalIndex:d}=await this.makeAuthenticatedRequest("/api/v1/withdrawals",{method:"POST",body:JSON.stringify({assetId:e,amount:t.toString(),destination:s,source:a})});if(!r)return{withdrawalIndex:d,status:"awaiting_proof"};let l=await this.pollWithdrawalCalldata(d,c);if(!l)return{withdrawalIndex:d,status:"awaiting_proof"};let{vaultAddress:p,calldata:m}=l,h;try{h=await this.walletClient.sendTransaction({to:p,data:m,account:i,chain:this.chain})}catch(w){throw new Vi(`Failed to submit executeWithdrawal for withdrawal ${d}: ${w instanceof Error?w.message:"unknown error"}`,{cause:w instanceof Error?w:void 0})}let b=i.getNonce?await i.getNonce():0n,x={hash:h,status:"pending",nonce:b};return{...await this.waitForTransaction(x,r),withdrawalIndex:d}}async retryWithdrawal(e,t=!0,r){if(!this.walletClient)throw new At("Wallet client not set. Connect a wallet first.","walletClient");let n=this.walletClient.account;if(!n)throw new At("No account available in wallet client","account");let o=await this.pollWithdrawalCalldata(e,r);if(!o)return{withdrawalIndex:e,status:"awaiting_proof"};let{vaultAddress:i,calldata:s}=o,a;try{a=await this.walletClient.sendTransaction({to:i,data:s,account:n,chain:this.chain})}catch(p){throw new Vi(`Failed to resubmit executeWithdrawal for withdrawal ${e}: ${p instanceof Error?p.message:"unknown error"}`,{cause:p instanceof Error?p:void 0})}let c=n.getNonce?await n.getNonce():0n,d={hash:a,status:"pending",nonce:c};return{...await this.waitForTransaction(d,t),withdrawalIndex:e}}async getBalance(e){throw new Zt("getBalance() is deprecated and no longer supported. Please use profileAPI.getUserBalances() or profileAPI.getUserBalanceByAssetId() instead for balance data.",{statusCode:410})}async getAllowance(e){if(!this.walletClient)throw new At("Wallet client not set. Connect a wallet first.","walletClient");let t=await this.getVaultAddress(),n=(await this.walletClient.getAddresses())[0];if(!n)throw new At("No account found in wallet client.","walletClient");let{tokenAddress:o}=await this.resolveAsset(e);return await this.publicClient.readContract({address:o,abi:Wt,functionName:"allowance",args:[n,t]})}async needsApproval(e,t,r={}){let{isWrappedNative:n}=await this.resolveAsset(e);if(n&&r.asErc20!==!0)return!1;return await this.getAllowance(e)<t}async waitForTransaction(e,t=!0,r={}){if(!t)return e;let{confirmations:n=1,timeout:o=60000}=r;try{let i=await this.publicClient.waitForTransactionReceipt({hash:e.hash,confirmations:n,timeout:o});return{...e,status:i.status==="success"?"confirmed":"failed",receipt:i}}catch{return{...e,status:"failed"}}}}class ax extends qe{async submit(e){return await this.makePublicRequest(ae.whitelist.submit(),{method:"POST",body:JSON.stringify(e)})}}class VA extends qe{async initiateWithdrawal(e){return this.makeAuthenticatedRequest(ae.withdrawals.initiate(),{method:"POST",body:JSON.stringify({assetId:e.assetId,amount:e.amount,destination:e.destination,source:e.source??"spot"})})}async getWithdrawal(e){return this.makePublicRequest(ae.withdrawals.byIndex(e))}async listPendingWithdrawals(e){return this.makeAuthenticatedRequest(ae.withdrawals.list({page:e?.page,pageSize:e?.pageSize}))}}class cx extends qe{chain;walletClient;constructor(e,t,r){super(r);this.chain=t,this.walletClient=e}setWalletClient(e){this.walletClient=e}async authenticate(e,t){if(!this.walletClient)throw new At("Wallet client not set. Connect a wallet first.","walletClient");let r=this.walletClient.account;if(!r)throw new At("No account available in wallet client","account");let n=B0(),o={publicKey:L0(n),privateKey:D0(n)},i=await this.createChallenge(r.address,e,o.publicKey),s=await this.signChallenge(i.message);return await this.verifySignature(r.address,s,i.nonce,e,o,t)}async signChallenge(e){if(!this.walletClient)throw new At("Wallet client not set. Connect a wallet first.","walletClient");let t=this.walletClient.account;if(!t)throw new At("No account available in wallet client","account");return await this.walletClient.signMessage({account:t,message:e})}async createChallenge(e,t,r){let n=await this.makePublicRequest("/api/v1/auth/challenge",{method:"POST",body:JSON.stringify({address:e,clientId:t,chainId:this.chain.id,sessionPublicKey:r})});return{nonce:n.nonce,message:n.message,expiresAt:n.expiresAt}}async verifySignature(e,t,r,n,o,i){let s=await this.makePublicRequest("/api/v1/auth/verify",{method:"POST",body:JSON.stringify({address:e,signature:t,nonce:r,clientId:n,chainId:this.chain.id,sessionPublicKey:o.publicKey,...i?{referralCode:i}:{}})});return{sessionPublicKey:o.publicKey,sessionPrivateKey:o.privateKey,expiresAt:s.expiresAt,user:{id:s.user.id,address:s.user.address,username:s.user.username},...s.isNewUser!==void 0?{isNewUser:s.isNewUser}:{},...s.referralApplied!==void 0?{referralApplied:s.referralApplied}:{}}}async refreshSession(){return{expiresAt:(await this.makeAuthenticatedRequest("/api/v1/auth/refresh",{method:"POST"})).expiresAt}}async revokeSession(){await this.makeAuthenticatedRequest("/api/v1/auth/revoke",{method:"POST"})}}var vle=750;function FF(e,t){try{new URL(e)}catch(r){throw new At(`${t} must be a valid URL, got: ${e}`,t)}return e}class WA{auth;delegatedAgents;applications;fees;buildercodes;pitpass;vault;withdrawals;trading;market;marginAccounts;positions;portfolio;subAccounts;faucet;sweeper;managedMarkets;whitelist;profile;pulse;orderbook;trades;ws;walletClient;publicClient;authState;network;chain;propagateSession(e){this.auth.setSessionKeypair(e),this.delegatedAgents.setSessionKeypair(e),this.applications.setSessionKeypair(e),this.fees.setSessionKeypair(e),this.buildercodes.setSessionKeypair(e),this.pitpass.setSessionKeypair(e),this.vault.setSessionKeypair(e),this.withdrawals.setSessionKeypair(e),this.trading.setSessionKeypair(e),this.market.setSessionKeypair(e),this.marginAccounts.setSessionKeypair(e),this.positions.setSessionKeypair(e),this.portfolio.setSessionKeypair(e),this.subAccounts.setSessionKeypair(e),this.faucet.setSessionKeypair(e),this.sweeper.setSessionKeypair(e),this.managedMarkets.setSessionKeypair(e),this.whitelist.setSessionKeypair(e),this.pulse.setSessionKeypair(e),this.profile.setSessionKeypair(e),this.orderbook.setSessionKeypair(e),this.trades.setSessionKeypair(e),this.ws.setSessionKeypair(e)}setServerKey(e){this.auth.setServerKey(e),this.delegatedAgents.setServerKey(e),this.applications.setServerKey(e),this.fees.setServerKey(e),this.buildercodes.setServerKey(e),this.pitpass.setServerKey(e),this.vault.setServerKey(e),this.withdrawals.setServerKey(e),this.trading.setServerKey(e),this.market.setServerKey(e),this.marginAccounts.setServerKey(e),this.positions.setServerKey(e),this.portfolio.setServerKey(e),this.subAccounts.setServerKey(e),this.faucet.setServerKey(e),this.sweeper.setServerKey(e),this.managedMarkets.setServerKey(e),this.whitelist.setServerKey(e),this.pulse.setServerKey(e),this.profile.setServerKey(e),this.orderbook.setServerKey(e),this.trades.setServerKey(e)}sessionFromAuthState(e){return{publicKey:e.sessionPublicKey,privateKey:e.sessionPrivateKey}}constructor(e){let t=["mainnet","development","staging","local"];if(!e.network||!t.includes(e.network))throw new At(`network must be one of: ${t.join(", ")}. Got: ${e.network}`,"network");if(this.network=e.network,!e.seiRpcUrl)throw new At("seiRpcUrl is required","seiRpcUrl");try{new URL(e.seiRpcUrl)}catch(a){throw new At(`seiRpcUrl must be a valid URL, got: ${e.seiRpcUrl}`,"seiRpcUrl")}let r=e.wsUrl?FF(e.wsUrl,"wsUrl"):lT(this.network),n=this.network==="mainnet"?Im:km;if(this.chain=n,e.pollingInterval!==void 0&&(!Number.isFinite(e.pollingInterval)||e.pollingInterval<=0))throw new At(`pollingInterval must be a positive number of milliseconds, got: ${e.pollingInterval}`,"pollingInterval");let o=Am(e.seiRpcUrl);this.publicClient=mA({chain:n,transport:o,pollingInterval:e.pollingInterval??vle});let i=e.apiUrl?FF(e.apiUrl,"apiUrl"):dT(this.network);if(e.walletClient){if(e.walletClient.chain?.id!==n.id)throw new At(`Wallet client chain mismatch. Expected ${n.id}, got ${e.walletClient.chain?.id}`,"walletClient");this.walletClient=e.walletClient}let s=(a)=>(a.setRequestSigning(e.requestSigning??"legacy"),a);this.applications=s(new Nb(i)),this.market=s(new Wb(i)),this.marginAccounts=s(new Zb(i)),this.positions=s(new Xb(i)),this.portfolio=s(new Qb(i)),this.subAccounts=s(new tx(i)),this.faucet=s(new Gb(i)),this.sweeper=s(new rx(i)),this.managedMarkets=s(new DA(i)),this.whitelist=s(new ax(i)),this.pulse=s(new ex(i)),this.auth=s(new cx(this.walletClient,this.chain,i)),this.delegatedAgents=s(new LA(i)),this.fees=s(new Vb(i)),this.buildercodes=s(new Hb(i)),this.pitpass=s(new Yb(i)),this.profile=s(new UA(i)),this.vault=s(new sx(this.publicClient,this.walletClient,this.chain,this.applications,this.profile,i)),this.withdrawals=s(new VA(i)),this.trading=s(new ox(i)),this.orderbook=s(new Kb(i)),this.trades=s(new FA(i)),this.ws=nT(r,e.ws),this.ws.connect().catch(console.error)}async login(e,t){if(this.authState=await this.auth.authenticate(e),this.propagateSession(this.sessionFromAuthState(this.authState)),t?.connectWebSocket)await this.ws.connect();return this.authState}async loginAsDelegatedOwner(e){if(!this.authState)throw new Zt("No active agent session to create delegated session",{endpoint:"delegated-agents/sessions",statusCode:ZA.StatusCodes.UNAUTHORIZED});let t=B0(),r={publicKey:L0(t),privateKey:D0(t)},n=await this.delegatedAgents.createDelegatedSession({ownerUserId:e,sessionPublicKey:r.publicKey});return this.authState={sessionPublicKey:r.publicKey,sessionPrivateKey:r.privateKey,expiresAt:n.expiresAt,user:{id:n.ownerUserId,address:n.agentAddress}},this.propagateSession(this.sessionFromAuthState(this.authState)),this.authState}getAuthState(){return this.authState}setAuthState(e){this.authState=e,this.propagateSession(this.sessionFromAuthState(e))}async logout(){if(this.authState)try{await this.auth.revokeSession()}catch(e){console.warn("Failed to revoke session on logout:",e)}this.authState=void 0,this.propagateSession(void 0),this.ws.disconnect()}async refreshAuth(){if(!this.authState)throw new Zt("No active session to refresh",{endpoint:"auth/refresh",statusCode:ZA.StatusCodes.UNAUTHORIZED});try{let e=await this.auth.refreshSession();return this.authState={...this.authState,expiresAt:e.expiresAt},this.authState}catch(e){throw this.authState=void 0,this.propagateSession(void 0),e}}isAuthenticated(){return!!this.authState}isConnected(){return!!this.walletClient&&!!this.publicClient}setWalletClient(e){if(e.chain?.id!==this.chain.id)throw new At(`Wallet client chain mismatch. Expected ${this.chain.id}, got ${e.chain?.id}`,"walletClient");this.walletClient=e,this.auth.setWalletClient(e),this.vault.setWalletClient(e)}getAccountAddress(){if(!this.walletClient)throw new Cf("Wallet client not set","walletClient");if(this.walletClient.account)return this.walletClient.account.address;throw new Cf("No account available","account")}getNetwork(){return this.network}getChainId(){return this.chain.id}async waitForTransaction(e,t,r){return this.publicClient.waitForTransactionReceipt({hash:e,confirmations:t,timeout:r})}}function KA(e){return new WA(e)}gm();Fe();ei();Mn();function jF(e){if(typeof e==="string"){if(!ht(e,{strict:!1}))throw new Ft({address:e});return{address:e,type:"json-rpc"}}if(!ht(e.address,{strict:!1}))throw new Ft({address:e.address});return{address:e.address,nonceManager:e.nonceManager,sign:e.sign,signAuthorization:e.signAuthorization,signMessage:e.signMessage,signTransaction:e.signTransaction,signTypedData:e.signTypedData,source:"custom",type:"local"}}gm();xr();Fe();var YA=!1;async function mi({hash:e,privateKey:t,to:r="object"}){let{r:n,s:o,recovery:i}=hs.sign(e.slice(2),t.slice(2),{lowS:!0,extraEntropy:Kt(YA,{strict:!1})?pr(YA):YA}),s={r:G(n,{size:32}),s:G(o,{size:32}),v:i?28n:27n,yParity:i};return(()=>{if(r==="bytes"||r==="hex")return bb({...s,to:r});return s})()}async function qF(e){let{chainId:t,nonce:r,privateKey:n,to:o="object"}=e,i=e.contractAddress??e.address,s=await mi({hash:Jy({address:i,chainId:t,nonce:r}),privateKey:n,to:o});if(o==="object")return{address:i,chainId:t,nonce:r,...s};return s}async function HF({message:e,privateKey:t}){return await mi({hash:gl(e),privateKey:t,to:"hex"})}Jn();on();Fe();function GF(e){if(!e||e.length===0)return[];let t=[];for(let r of e){let{chainId:n,nonce:o,...i}=r,s=r.address;t.push([n?Jt(n):"0x",s,o?Jt(o):"0x",...Rl({},i)])}return t}Fe();eP();ei();Ge();Qf();ls();Mn();mn();Ji();lr();function VF(e){let{authorizationList:t}=e;if(t)for(let r of t){let{chainId:n}=r,o=r.address;if(!ht(o))throw new Ft({address:o});if(n<0)throw new md({chainId:n})}ux(e)}function ZF(e){let{blobVersionedHashes:t}=e;if(t){if(t.length===0)throw new xm;for(let r of t){let n=et(r),o=Yt(gn(r,0,1));if(n!==32)throw new vP({hash:r,size:n});if(o!==eb)throw new TP({hash:r,version:o})}}ux(e)}function ux(e){let{chainId:t,maxPriorityFeePerGas:r,maxFeePerGas:n,to:o}=e;if(t<=0)throw new md({chainId:t});if(o&&!ht(o))throw new Ft({address:o});if(n&&n>Kd)throw new Oo({maxFeePerGas:n});if(r&&n&&r>n)throw new ds({maxFeePerGas:n,maxPriorityFeePerGas:r})}function WF(e){let{chainId:t,maxPriorityFeePerGas:r,gasPrice:n,maxFeePerGas:o,to:i}=e;if(t<=0)throw new md({chainId:t});if(i&&!ht(i))throw new Ft({address:i});if(r||o)throw new C("`maxFeePerGas`/`maxPriorityFeePerGas` is not a valid EIP-2930 Transaction attribute.");if(n&&n>Kd)throw new Oo({maxFeePerGas:n})}function KF(e){let{chainId:t,maxPriorityFeePerGas:r,gasPrice:n,maxFeePerGas:o,to:i}=e;if(i&&!ht(i))throw new Ft({address:i});if(typeof t<"u"&&t<=0)throw new md({chainId:t});if(r||o)throw new C("`maxFeePerGas`/`maxPriorityFeePerGas` is not a valid Legacy Transaction attribute.");if(n&&n>Kd)throw new Oo({maxFeePerGas:n})}ei();on();Mn();function Nm(e){if(!e||e.length===0)return[];let t=[];for(let r=0;r<e.length;r++){let{address:n,storageKeys:o}=e[r];for(let i=0;i<o.length;i++)if(o[i].length-2!==64)throw new PE({storageKey:o[i]});if(!ht(n,{strict:!1}))throw new Ft({address:n});t.push([n,o])}return t}function YF(e,t){let r=rb(e);if(r==="eip1559")return Ple(e,t);if(r==="eip2930")return Ale(e,t);if(r==="eip4844")return Ele(e,t);if(r==="eip7702")return Tle(e,t);return Ile(e,t)}function Tle(e,t){let{authorizationList:r,chainId:n,gas:o,nonce:i,to:s,value:a,maxFeePerGas:c,maxPriorityFeePerGas:d,accessList:l,data:p}=e;VF(e);let m=Nm(l),h=GF(r);return Qt(["0x04",gs([G(n),i?G(i):"0x",d?G(d):"0x",c?G(c):"0x",o?G(o):"0x",s??"0x",a?G(a):"0x",p??"0x",m,h,...Rl(e,t)])])}function Ele(e,t){let{chainId:r,gas:n,nonce:o,to:i,value:s,maxFeePerBlobGas:a,maxFeePerGas:c,maxPriorityFeePerGas:d,accessList:l,data:p}=e;ZF(e);let{blobVersionedHashes:m,sidecars:h}=e;if(e.blobs&&(typeof m>"u"||typeof h>"u")){let v=typeof e.blobs[0]==="string"?e.blobs:e.blobs.map((k)=>mt(k)),T=e.kzg,P=el({blobs:v,kzg:T});if(typeof m>"u")m=Xy({commitments:P});if(typeof h>"u"){let k=tl({blobs:v,commitments:P,kzg:T});h=tb({blobs:v,commitments:P,proofs:k})}}let b=Nm(l),x=[G(r),o?G(o):"0x",d?G(d):"0x",c?G(c):"0x",n?G(n):"0x",i??"0x",s?G(s):"0x",p??"0x",b,a?G(a):"0x",m??[],...Rl(e,t)],_=[],w=[],A=[];if(h)for(let v=0;v<h.length;v++){let{blob:T,commitment:P,proof:k}=h[v];_.push(T),w.push(P),A.push(k)}return Qt(["0x03",h?gs([x,_,w,A]):gs(x)])}function Ple(e,t){let{chainId:r,gas:n,nonce:o,to:i,value:s,maxFeePerGas:a,maxPriorityFeePerGas:c,accessList:d,data:l}=e;ux(e);let p=Nm(d),m=[G(r),o?G(o):"0x",c?G(c):"0x",a?G(a):"0x",n?G(n):"0x",i??"0x",s?G(s):"0x",l??"0x",p,...Rl(e,t)];return Qt(["0x02",gs(m)])}function Ale(e,t){let{chainId:r,gas:n,data:o,nonce:i,to:s,value:a,accessList:c,gasPrice:d}=e;WF(e);let l=Nm(c),p=[G(r),i?G(i):"0x",d?G(d):"0x",n?G(n):"0x",s??"0x",a?G(a):"0x",o??"0x",l,...Rl(e,t)];return Qt(["0x01",gs(p)])}function Ile(e,t){let{chainId:r=0,gas:n,data:o,nonce:i,to:s,value:a,gasPrice:c}=e;KF(e);let d=[i?G(i):"0x",c?G(c):"0x",n?G(n):"0x",s??"0x",a?G(a):"0x",o??"0x"];if(t){let l=(()=>{if(t.v>=35n){if((t.v-35n)/2n>0)return t.v;return 27n+(t.v===35n?0n:1n)}if(r>0)return BigInt(r*2)+BigInt(35n+t.v-27n);let h=27n+(t.v===27n?0n:1n);if(t.v!==h)throw new TE({v:t.v});return h})(),p=$r(t.r),m=$r(t.s);d=[...d,G(l),p==="0x00"?"0x":p,m==="0x00"?"0x":m]}else if(r>0)d=[...d,G(r),"0x","0x"];return gs(d)}function Rl(e,t){let r=t??e,{v:n,yParity:o}=r;if(typeof r.r>"u")return[];if(typeof r.s>"u")return[];if(typeof n>"u"&&typeof o>"u")return[];let i=$r(r.r),s=$r(r.s);return[(()=>{if(typeof o==="number")return o?G(1):"0x";if(n===0n)return"0x";if(n===1n)return G(1);return n===27n?"0x":G(1)})(),i==="0x00"?"0x":i,s==="0x00"?"0x":s]}async function JF(e){let{privateKey:t,transaction:r,serializer:n=YF}=e,o=(()=>{if(r.type==="eip4844")return{...r,sidecars:!1};return r})(),i=await mi({hash:St(await n(o)),privateKey:t});return await n(r,i)}async function QF(e){let{privateKey:t,...r}=e;return await mi({hash:wb(r),privateKey:t,to:"hex"})}function JA(e,t={}){let{nonceManager:r}=t,n=Jt(hs.getPublicKey(e.slice(2),!1)),o=Yy(n);return{...jF({address:o,nonceManager:r,async sign({hash:s}){return mi({hash:s,privateKey:e,to:"hex"})},async signAuthorization(s){return qF({...s,privateKey:e})},async signMessage({message:s}){return HF({message:s,privateKey:e})},async signTransaction(s,{serializer:a}={}){return JF({privateKey:e,transaction:s,serializer:a})},async signTypedData(s){return QF({...s,privateKey:e})}}),publicKey:n,source:"privateKey"}}var QA=null;var kle={privateKeyToAccount:JA,createWalletClient:bA,http:Am,createMonacoSDK:KA,sei:Im,seiTestnet:km};function Rle(e,t=kle){let r=e.network==="mainnet"?t.sei:t.seiTestnet,n;if(e.privateKey){let o=t.privateKeyToAccount(e.privateKey);n=t.createWalletClient({account:o,chain:r,transport:t.http(e.seiRpcUrl)})}return t.createMonacoSDK({walletClient:n,network:e.network,seiRpcUrl:e.seiRpcUrl})}function Ze(e){if(!QA){let t=e??lc();QA=Rle(t)}return QA}var Ole=60,dx=null;function Cle(){return Math.floor(Date.now()/1000)}function XF(e){return e-Ole<=Cle()}function Mle(e){for(let t=e,r=0;t instanceof Error&&r<5;r++){if(t instanceof Zt&&t.statusCode===401)return!0;t=t.cause}return!1}function XA(e){if(!dx)dx=e().finally(()=>{dx=null});return dx}async function ej(e,t){if(await e.login(t.clientId),t.delegatedOwnerUserId){try{let r=await e.loginAsDelegatedOwner(t.delegatedOwnerUserId);console.error(`Adopted delegated owner ${r.user.id} (session expires at ${new Date(r.expiresAt*1000).toISOString()})`)}catch(r){throw await e.logout().catch(()=>{}),r}return}console.error(`Authenticated as ${e.getAccountAddress()}`)}async function tj(e,t){try{await e.refreshAuth()}catch{await ej(e,t)}}async function X(e){let t=Ze(e),r=e??lc(),n=t.getAuthState(),o=r.delegatedOwnerUserId!=null&&n?.user?.id!==r.delegatedOwnerUserId;if(!n||o)return await XA(()=>ej(t,r)),t;if(XF(n.expiresAt))await XA(()=>tj(t,r));return t}async function $le(e){let t=e??lc();if(!t.privateKey)return!1;let r=Ze(e);return await XA(()=>tj(r,t)),!0}function rj(e,t){async function r(...n){let o=Ze(t).getAuthState(),i=o!==void 0&&!XF(o.expiresAt);try{return await e(...n)}catch(s){if(!Mle(s))throw s;if(!(i&&Ze(t).getAuthState()!==o)){if(!await $le(t))throw s}return await e(...n)}}return r}function L(e){return{content:[{type:"text",text:JSON.stringify(e,null,2)}]}}function lx(e){return{content:[{type:"text",text:e}]}}function nj(e,t){if(t.network==="mainnet")return;e.registerTool("get_faucet_info",{description:"Get the authenticated wallet's faucet quota: remaining requests in the rolling 24h window, when the next request becomes available, and the 5 most recent faucet requests. Check this before request_faucet to avoid rate-limit errors. Only available on non-mainnet networks (development, staging, local).",inputSchema:{}},async()=>{let n=await(await X()).faucet.getInfo();return L(n)})}function oj(e,t){if(t.network==="mainnet")return;e.registerTool("request_faucet",{description:"Request test funds from the faucet for all active trading pairs. Requires a Cloudflare Turnstile token (the faucet rejects requests without one). Only available on non-mainnet networks (development, staging, local).",inputSchema:S({turnstileToken:y().describe("Cloudflare Turnstile token proving the request came from a real client (required by the faucet).")})},async({turnstileToken:r})=>{let o=await(await X()).faucet.mint({turnstileToken:r});return L(o)})}function ij(e,t){oj(e,t),nj(e,t)}function sj(e){e.registerTool("get_my_fee_tier",{description:"Get the authenticated user's current fee tier, rolling 14-day volumes (with spot/perp breakdown), the volume needed to reach the next tier, and the requested pair's six-row fee schedule.",inputSchema:S({tradingPairId:y().describe("Trading pair UUID whose fee schedule to return")})},async({tradingPairId:t})=>{let n=await(await X()).fees.getMyFeeTier({tradingPairId:t});return L(n)})}function aj(e){e.registerTool("simulate_fees",{description:"Simulate the fees for an order before placing it. Returns Monaco protocol fees, application fees, and total amounts.",inputSchema:S({tradingPairId:y().describe("Trading pair UUID"),side:H(["BUY","SELL"]).describe("Order side"),price:y().describe("Price per unit as a decimal string"),quantity:y().describe("Quantity to trade as a decimal string")})},async({tradingPairId:t,side:r,price:n,quantity:o})=>{let s=await(await X()).fees.simulateFees({tradingPairId:t,side:r,price:n,quantity:o});return L(s)})}function cj(e){aj(e),sj(e)}function uj(e){e.registerTool("get_available_collateral",{description:"Get available (unlocked) collateral for allocating to margin accounts or risk buckets.",inputSchema:S({asset:y().optional().describe("Optional collateral asset symbol or ID to scope the query")})},async({asset:t})=>{let n=await(await X()).marginAccounts.getAvailableCollateral({asset:t});return L(n)})}function dj(e){e.registerTool("get_margin_accounts",{description:"List your margin accounts with optional filters (state, trading pair).",inputSchema:S({page:M().optional().describe("Page number (1-based)"),pageSize:M().optional().describe("Items per page"),state:y().optional().describe("Filter by margin account state"),tradingPairId:y().optional().describe("Filter by trading pair UUID")})},async({page:t,pageSize:r,state:n,tradingPairId:o})=>{let s=await(await X()).marginAccounts.listMarginAccounts({page:t,pageSize:r,state:n,tradingPairId:o});return L(s)})}function lj(e){e.registerTool("get_parent_margin_account_movements",{description:"List collateral movements for your parent (cross) margin account.",inputSchema:S({movementType:y().optional().describe("Filter by movement type"),page:M().optional().describe("Page number (1-based)"),pageSize:M().optional().describe("Items per page")})},async({movementType:t,page:r,pageSize:n})=>{let i=await(await X()).marginAccounts.getParentMarginAccountMovements({movementType:t,page:r,pageSize:n});return L(i)})}function pj(e){e.registerTool("get_parent_margin_account_summary",{description:"Get your parent (cross) margin account summary.",inputSchema:S({tradingPairId:y().optional().describe("Optional trading pair UUID to scope the summary")})},async({tradingPairId:t})=>{let n=await(await X()).marginAccounts.getParentMarginAccountSummary({tradingPairId:t});return L(n)})}var Nle=S({applicationId:y().uuid(),enrolled:ue(),payoutAddress:y().nullable().optional(),buildercodesEnabled:ue(),buildercodesBudgetBps:M().int().min(0).max(1e4)}),zle=S({page:M().int().min(1).max(1e4).optional(),pageSize:M().int().min(1).max(100).optional()}),fj=S({tradeId:y().uuid(),payoutAddress:y(),token:y(),amount:y(),appliedBps:M().int(),createdAt:y()}),Ble=S({payouts:Ie(fj),total:M().int().nonnegative(),page:M().int().positive(),pageSize:M().int().positive(),totalPages:M().int().nonnegative()}),mj=S({token:y(),totalAmount:y(),payoutCount:M().int().nonnegative(),lastCreditedAt:y()}),Lle=S({totalPayouts:M().int().nonnegative(),lastCreditedAt:y().nullable().optional(),byToken:Ie(mj)}),hj=S({token:y(),available:y()}),Dle=S({balances:Ie(hj)}),Ule=S({token:y().trim().min(1,"token is required").regex(/^0x[0-9a-fA-F]{40}$/,"token must be a 0x-prefixed EVM address"),amount:y().trim().min(1,"amount is required").refine((e)=>/^\d+$/.test(e)&&BigInt(e)>0n,"amount must be a positive integer string")}),Fle=S({payoutBalance:y(),tradingBalance:y()});var jle=S({tradingPairId:y().trim().min(1,"Trading pair ID is required and cannot be empty"),side:H(["BUY","SELL"],{message:"Order side is required and must be either 'BUY' or 'SELL'"}),price:y().trim().min(1,"Price is required and cannot be empty").refine((e)=>!Number.isNaN(Number(e)),"Price must be a valid number").refine((e)=>Number(e)>0,"Price must be greater than 0"),quantity:y().trim().min(1,"Quantity is required and cannot be empty").refine((e)=>!Number.isNaN(Number(e)),"Quantity must be a valid number").refine((e)=>Number(e)>0,"Quantity must be greater than 0"),orderType:H(["LIMIT","MARKET"]).optional(),slippageToleranceBps:M().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((e,t)=>{if(e.slippageToleranceBps!==void 0&&e.orderType!=="MARKET")t.addIssue({code:Hn.custom,message:"slippageToleranceBps is only valid when orderType is MARKET",path:["slippageToleranceBps"]})}),qle=S({applicationName:y().nullable().optional(),applicationTakerFee:y(),applicationTakerFeeBps:M(),buyOrderLockAmount:y().nullable().optional(),makerTotalReceipt:y(),monacoMakerRebate:y(),monacoMakerRebateBps:M(),monacoMakerRebateBpsExact:y(),monacoTakerFee:y(),monacoTakerFeeBps:M(),monacoTakerFeeBpsExact:y(),notional:y(),takerTotalPayment:y(),totalTakerFees:y(),maxQuantity:y().nullable(),maxQuantityRaw:y().nullable(),slippageToleranceBps:M().nullable()}),Hle=S({tradingPairId:y().trim().min(1,"Trading pair ID is required and cannot be empty")}),gj=S({tierLevel:M().int(),minVolumeThreshold:y(),makerFeeBps:y(),takerFeeBps:y()}),Gle=S({currentTierLevel:M().int(),weightedVolume14d:y(),spotVolume14d:y(),perpVolume14d:y(),volumeToNextTier:y().nullable().optional(),nextTierLevel:M().int().nullable().optional(),feeSchedule:Ie(gj)});var yj=S({token:y(),available:y()}),Vle=S({balances:Ie(yj)}),Zle=S({code:y(),createdAt:y(),customCode:y(),isCustom:ue(),display:y()}),bj=H(["taken","too_short","too_long","reserved","invalid_char","looks_like_address"]),Wle=S({available:ue(),reason:Lp((e)=>e===""||e===null?void 0:e,bj.optional())}),Kle=S({code:y().trim().min(1,"code is required").regex(/^[A-Za-z][A-Za-z0-9_]{4,19}$/,"code must start with a letter and be 5–20 chars of letters, digits, or underscores")}),Yle=S({code:y()}),Jle=S({token:y().trim().min(1,"token is required").regex(/^0x[0-9a-fA-F]{40}$/,"token must be a 0x-prefixed EVM address"),amount:y().trim().min(1,"amount is required").refine((e)=>/^\d+$/.test(e)&&BigInt(e)>0n,"amount must be a positive integer string")}),Qle=S({rewardsBalance:y(),tradingBalance:y()}),xj=S({source:y(),sourceDisplay:y(),level:M(),amount:y(),token:y(),rateApplied:y(),createdAt:y()}),Xle=S({referrer:y(),referrerDisplay:y(),totalEarned:y(),rewards:Ie(xj)}),_j=S({source:y(),sourceDisplay:y(),level:M(),totalEarned:y(),token:y()}),wj=S({wallet:y(),display:y(),referredAt:y(),totalEarned:y()}),Sj=S({totalEarned:y(),level1Earned:y(),level2Earned:y(),level3Earned:y()}),epe=S({earningsBySource:Ie(_j),directReferees:Ie(wj),summary:Sj});var Ol=["SUBMITTED","PARTIALLY_FILLED","FILLED","SETTLED_ON_CHAIN","SETTLED","CANCELLED","REJECTED","EXPIRED"];var Cl=H(["BUY","SELL"],{message:'Order side must be "BUY" or "SELL"'}),zm=H(["SPOT","MARGIN"],{message:'Trading mode must be "SPOT" or "MARGIN"'}),hx=H(["ISOLATED","CROSS"],{message:'Margin mode must be "ISOLATED" or "CROSS"'}),Bm=H(["LONG","SHORT","NONE"],{message:'Position side must be "LONG", "SHORT", or "NONE"'}),vj=H(["GTC","IOC","FOK"],{message:'Time in force must be "GTC", "IOC", or "FOK"'}),eI=H(["GTC","IOC"],{message:'Conditional order time in force must be "GTC" or "IOC"'}),Kc=H(["CANCEL_MAKER","CANCEL_TAKER","CANCEL_BOTH","SKIP"],{message:'Self-trade prevention mode must be "CANCEL_MAKER", "CANCEL_TAKER", "CANCEL_BOTH", or "SKIP"'}),Ml=H(["LIMIT","MARKET"],{message:'Order type must be "LIMIT" or "MARKET"'}),dt=y().trim().min(1,"Value cannot be empty").regex(/^\d+(\.\d+)?$/,"Value must be a positive decimal number (e.g., '1.5', '100')").refine((e)=>Number.parseFloat(e)>0,{message:"Value must be greater than 0"}),Oe=M5({message:"Must be a valid UUID (e.g., '123e4567-e89b-12d3-a456-426614174000')"}),Ra=Ou.datetime({message:"Must be a valid ISO 8601 date string (e.g., '2024-12-31T23:59:59Z')"}),Tj=M().min(0,"Slippage tolerance must be at least 0 (no slippage)").max(1,"Slippage tolerance cannot exceed 1 (100%)").optional(),Lm=M().int().min(0,"Slippage tolerance must be at least 0 bps").max(1e4,"Slippage tolerance cannot exceed 10000 bps"),$l=M().int().min(0,"Slippage tolerance must be at least 0 bps").max(1000,"Slippage tolerance cannot exceed 1000 bps"),tpe=M().int().min(0,"Slippage tolerance must be at least 0 bps").max(500,"TWAP slippage tolerance cannot exceed 500 bps (5%)"),px=S({triggerPrice:dt,orderType:Ml,limitPrice:dt.optional(),quantity:dt.optional(),closePosition:ue().optional(),timeInForce:eI.optional(),slippageToleranceBps:Lm.optional(),expiresAt:Ra.optional()}).refine((e)=>e.orderType!=="LIMIT"||e.limitPrice!==void 0,{message:"limitPrice is required for LIMIT parent TP/SL",path:["limitPrice"]}).refine((e)=>e.orderType!=="MARKET"||e.limitPrice===void 0,{message:"limitPrice must not be provided for MARKET parent TP/SL",path:["limitPrice"]}).refine((e)=>e.orderType!=="MARKET"||e.timeInForce===void 0,{message:"timeInForce is only allowed for LIMIT parent TP/SL",path:["timeInForce"]}).refine((e)=>e.orderType!=="LIMIT"||e.slippageToleranceBps===void 0,{message:"slippageToleranceBps is only allowed for MARKET parent TP/SL",path:["slippageToleranceBps"]}).refine((e)=>e.closePosition!==!0||e.quantity===void 0,{message:"quantity must be omitted when closePosition is true",path:["quantity"]}).refine((e)=>e.quantity!==void 0||e.closePosition!==!1,{message:"quantity is required when closePosition is false",path:["closePosition"]}),fx=(e)=>e?.takeProfit!==void 0||e?.stopLoss!==void 0,tI=(e,t)=>t===void 0||t!=="NONE"&&(e==="BUY"&&t==="LONG"||e==="SELL"&&t==="SHORT"),rI=y().min(1).max(64).regex(/^[A-Za-z0-9._:-]+$/,"idempotencyKey must contain only letters, digits, or . _ : -"),jMt=S({tradingPairId:Oe,side:Cl,quantity:dt,price:dt,options:S({idempotencyKey:rI.optional(),tradingMode:zm.optional(),useMasterBalance:ue().optional(),expirationDate:Ra.optional(),timeInForce:vj.optional(),marginAccountId:Oe.optional(),marginMode:hx.optional(),riskBucketId:Oe.optional(),riskBucketCollateral:dt.optional(),strategyKey:y().min(1).max(128).optional(),positionSide:Bm.optional(),leverage:dt.optional(),reduceOnly:ue().optional(),postOnly:ue().optional(),selfTradePreventionMode:Kc.optional(),takeProfit:px.optional(),stopLoss:px.optional()}).optional()}).refine((e)=>tI(e.side,e.options?.positionSide),{message:"positionSide is deprecated; when supplied BUY requires LONG and SELL requires SHORT",path:["options","positionSide"]}).refine((e)=>e.options?.tradingMode!=="MARGIN"||e.options.reduceOnly===!0||e.options.leverage!==void 0,{message:"leverage is required for normal MARGIN orders",path:["options","leverage"]}).refine((e)=>!fx(e.options)||e.options?.tradingMode==="MARGIN",{message:"takeProfit/stopLoss are only supported for MARGIN orders",path:["options"]}).refine((e)=>!fx(e.options)||e.options?.reduceOnly!==!0,{message:"takeProfit/stopLoss cannot be attached to reduce-only orders",path:["options"]}).refine((e)=>e.options?.riskBucketCollateral===void 0||e.options?.tradingMode==="MARGIN",{message:"riskBucketCollateral is only supported for MARGIN orders",path:["options","tradingMode"]}).refine((e)=>e.options?.marginMode===void 0||e.options?.tradingMode==="MARGIN",{message:"marginMode is only supported for MARGIN orders",path:["options","tradingMode"]}).refine((e)=>e.options?.marginMode!=="CROSS"||e.options?.marginAccountId!==void 0,{message:"marginAccountId is required for CROSS margin orders",path:["options","marginAccountId"]}).refine((e)=>e.options?.marginMode!=="CROSS"||e.options?.riskBucketId===void 0,{message:"marginMode CROSS cannot be combined with riskBucketId",path:["options","riskBucketId"]}).refine((e)=>e.options?.marginMode!=="CROSS"||e.options?.riskBucketCollateral===void 0,{message:"marginMode CROSS cannot be combined with riskBucketCollateral",path:["options","riskBucketCollateral"]}).refine((e)=>e.options?.marginMode!=="CROSS"||e.options?.strategyKey===void 0,{message:"marginMode CROSS cannot be combined with strategyKey",path:["options","strategyKey"]}).refine((e)=>e.options?.riskBucketCollateral===void 0||e.options?.riskBucketId===void 0,{message:"riskBucketCollateral creates a new risk bucket and cannot be combined with riskBucketId",path:["options","riskBucketId"]}).refine((e)=>e.options?.riskBucketCollateral===void 0||e.options?.reduceOnly!==!0,{message:"reduceOnly orders cannot create a new risk bucket",path:["options","reduceOnly"]}).refine((e)=>e.options?.postOnly!==!0||e.options?.timeInForce===void 0||e.options.timeInForce!=="IOC"&&e.options.timeInForce!=="FOK",{message:"postOnly cannot be combined with IOC/FOK time in force",path:["options","timeInForce"]}),qMt=S({tradingPairId:Oe,side:Cl,quantity:dt,options:S({idempotencyKey:rI.optional(),tradingMode:zm.optional(),slippageTolerance:Tj,marginAccountId:Oe.optional(),marginMode:hx.optional(),riskBucketId:Oe.optional(),riskBucketCollateral:dt.optional(),strategyKey:y().min(1).max(128).optional(),positionSide:Bm.optional(),leverage:dt.optional(),reduceOnly:ue().optional(),selfTradePreventionMode:Kc.optional(),takeProfit:px.optional(),stopLoss:px.optional()}).optional()}).refine((e)=>tI(e.side,e.options?.positionSide),{message:"positionSide is deprecated; when supplied BUY requires LONG and SELL requires SHORT",path:["options","positionSide"]}).refine((e)=>e.options?.tradingMode!=="MARGIN"||e.options.reduceOnly===!0||e.options.leverage!==void 0,{message:"leverage is required for normal MARGIN orders",path:["options","leverage"]}).refine((e)=>!fx(e.options)||e.options?.tradingMode==="MARGIN",{message:"takeProfit/stopLoss are only supported for MARGIN orders",path:["options"]}).refine((e)=>!fx(e.options)||e.options?.reduceOnly!==!0,{message:"takeProfit/stopLoss cannot be attached to reduce-only orders",path:["options"]}).refine((e)=>e.options?.riskBucketCollateral===void 0||e.options?.tradingMode==="MARGIN",{message:"riskBucketCollateral is only supported for MARGIN orders",path:["options","tradingMode"]}).refine((e)=>e.options?.marginMode===void 0||e.options?.tradingMode==="MARGIN",{message:"marginMode is only supported for MARGIN orders",path:["options","tradingMode"]}).refine((e)=>e.options?.marginMode!=="CROSS"||e.options?.marginAccountId!==void 0,{message:"marginAccountId is required for CROSS margin orders",path:["options","marginAccountId"]}).refine((e)=>e.options?.marginMode!=="CROSS"||e.options?.riskBucketId===void 0,{message:"marginMode CROSS cannot be combined with riskBucketId",path:["options","riskBucketId"]}).refine((e)=>e.options?.marginMode!=="CROSS"||e.options?.riskBucketCollateral===void 0,{message:"marginMode CROSS cannot be combined with riskBucketCollateral",path:["options","riskBucketCollateral"]}).refine((e)=>e.options?.marginMode!=="CROSS"||e.options?.strategyKey===void 0,{message:"marginMode CROSS cannot be combined with strategyKey",path:["options","strategyKey"]}).refine((e)=>e.options?.riskBucketCollateral===void 0||e.options?.riskBucketId===void 0,{message:"riskBucketCollateral creates a new risk bucket and cannot be combined with riskBucketId",path:["options","riskBucketId"]}).refine((e)=>e.options?.riskBucketCollateral===void 0||e.options?.reduceOnly!==!0,{message:"reduceOnly orders cannot create a new risk bucket",path:["options","reduceOnly"]}),HMt=S({orderId:Oe,remainingQuantityTarget:dt.optional()}),GMt=S({orderId:Oe,newOrder:S({price:dt.optional(),quantity:dt.optional(),useMasterBalance:ue().optional(),postOnly:ue().optional(),selfTradePreventionMode:Kc.optional()})}),VMt=S({status:st([H(Ol),Ie(H(Ol)).min(1,"Status filter must list at least one status")]).optional(),tradingPairId:Oe.optional(),tradingMode:zm.optional(),marginAccountId:Oe.optional(),page:M().int().min(1,"Page must be at least 1").optional(),pageSize:M().int().min(1,"Page size must be at least 1").max(1000,"Page size cannot exceed 1000").optional(),pageToken:y().optional()}).superRefine((e,t)=>{if(e.page!==void 0&&e.pageToken===void 0&&e.pageSize!==void 0&&e.pageSize>100)t.addIssue({code:Hn.custom,message:"Page size cannot exceed 100 in page-number mode (page without pageToken)",path:["pageSize"]})}),ZMt=H(["STOP_LOSS","TAKE_PROFIT"],{message:'conditionType must be "STOP_LOSS" or "TAKE_PROFIT"'}),WMt=H(["MARK_PRICE"],{message:'triggerSource must be "MARK_PRICE"'}),rpe=H(["PENDING_PARENT","ACTIVE","TRIGGERING","TRIGGERED","CANCELLED","EXPIRED","FAILED"],{message:"Invalid conditional order state"}),KMt=H(["LONG","SHORT"],{message:'Position side must be "LONG" or "SHORT"'}),YMt=S({conditionalOrderId:Oe}),JMt=S({marginAccountId:Oe.optional(),tradingPairId:Oe.optional(),state:rpe.optional(),page:M().int().min(1,"Page must be at least 1").optional(),pageSize:M().int().min(1,"Page size must be at least 1").max(100,"Page size cannot exceed 100").optional()}),npe=H(["PENDING","ACTIVE","COMPLETED","CANCELLED"],{message:"Invalid TWAP order state"}),ope=st([M().int("durationSeconds must be a whole number of seconds").positive("durationSeconds must be greater than 0"),y().regex(/^[1-9]\d*$/,"durationSeconds must be a positive integer string (e.g., '3600')")]),ipe=2592000000,QMt=S({tradingPairId:Oe,side:Cl,quantity:dt,options:S({durationSeconds:ope.optional(),startTime:Ra.optional(),endTime:Ra.optional(),limitPrice:dt.optional(),slippageToleranceBps:tpe.optional(),randomize:ue().optional(),executionStyle:H(["TAKER","PASSIVE"]).optional(),reduceOnly:ue().optional(),tradingMode:zm.optional(),marginAccountId:Oe.optional(),riskBucketId:Oe.optional(),marginMode:hx.optional(),leverage:dt.optional(),strategyKey:y().min(1).max(128).optional(),useMasterBalance:ue().optional(),clientTwapId:y().min(1).max(36,"clientTwapId cannot exceed 36 characters").optional(),triggerPrice:dt.optional(),triggerDirection:H(["ABOVE","BELOW"]).optional(),conditionalExpiry:Ra.optional()})}).refine((e)=>e.options.durationSeconds!==void 0!==(e.options.endTime!==void 0),{message:"Exactly one of durationSeconds or endTime must be set",path:["options","durationSeconds"]}).refine((e)=>e.options.startTime===void 0||e.options.endTime!==void 0,{message:"startTime is only valid together with endTime",path:["options","startTime"]}).refine((e)=>e.options.marginMode===void 0||e.options.tradingMode==="MARGIN",{message:"marginMode is only supported for MARGIN orders",path:["options","tradingMode"]}).refine((e)=>e.options.riskBucketId===void 0||e.options.tradingMode==="MARGIN",{message:"riskBucketId is only supported for MARGIN orders",path:["options","tradingMode"]}).refine((e)=>e.options.marginMode!=="CROSS"||e.options.riskBucketId===void 0,{message:"marginMode CROSS cannot be combined with riskBucketId",path:["options","riskBucketId"]}).refine((e)=>e.options.marginMode!=="CROSS"||e.options.strategyKey===void 0,{message:"marginMode CROSS cannot be combined with strategyKey",path:["options","strategyKey"]}).refine((e)=>e.options.tradingMode!=="MARGIN"||e.options.reduceOnly===!0||e.options.leverage!==void 0,{message:"leverage is required for normal MARGIN TWAP orders",path:["options","leverage"]}).refine((e)=>e.options.triggerPrice!==void 0===(e.options.triggerDirection!==void 0),{message:"triggerPrice and triggerDirection are both-or-neither",path:["options","triggerDirection"]}).refine((e)=>e.options.triggerPrice===void 0||e.options.durationSeconds!==void 0,{message:"conditional TWAP (triggerPrice) requires durationSeconds — the window floats from the trigger instant",path:["options","durationSeconds"]}).refine((e)=>e.options.triggerPrice===void 0||e.options.startTime===void 0&&e.options.endTime===void 0,{message:"triggerPrice is incompatible with startTime/endTime",path:["options","triggerPrice"]}).refine((e)=>e.options.conditionalExpiry===void 0||e.options.triggerPrice!==void 0,{message:"conditionalExpiry is only valid together with triggerPrice",path:["options","conditionalExpiry"]}).refine((e)=>{let t=e.options.conditionalExpiry;if(t===void 0)return!0;let r=Date.parse(t);return Number.isNaN(r)||r>Date.now()},{message:"conditionalExpiry must be in the future",path:["options","conditionalExpiry"]}).refine((e)=>{let t=e.options.conditionalExpiry;if(t===void 0)return!0;let r=Date.parse(t);return Number.isNaN(r)||r-Date.now()<=ipe},{message:"conditionalExpiry cannot be more than 30 days after creation (the maximum window)",path:["options","conditionalExpiry"]}),XMt=S({twapOrderId:Oe}),e$t=S({state:npe.optional(),tradingPairId:Oe.optional(),page:M().int().min(1,"Page must be at least 1").optional(),pageSize:M().int().min(1,"Page size must be at least 1").max(100,"Page size cannot exceed 100").optional()}),spe=S({tradingPairId:Oe,orderType:Ml,side:Cl,price:dt.optional(),quantity:dt,idempotencyKey:rI.optional(),tradingMode:zm.optional(),slippageTolerance:Tj,useMasterBalance:ue().optional(),expirationDate:Ra.optional(),timeInForce:vj.optional(),marginAccountId:Oe.optional(),marginMode:hx.optional(),riskBucketId:Oe.optional(),riskBucketCollateral:dt.optional(),strategyKey:y().min(1).max(128).optional(),positionSide:Bm.optional(),leverage:dt.optional(),reduceOnly:ue().optional(),postOnly:ue().optional(),selfTradePreventionMode:Kc.optional()}).refine((e)=>e.orderType!=="LIMIT"||e.price!==void 0,{message:"Price is required for LIMIT orders",path:["price"]}).refine((e)=>e.orderType!=="MARKET"||e.price===void 0,{message:"Price must not be provided for MARKET orders",path:["price"]}).refine((e)=>e.orderType!=="MARKET"||e.timeInForce===void 0,{message:"timeInForce must not be provided for MARKET orders",path:["timeInForce"]}).refine((e)=>e.orderType!=="MARKET"||e.postOnly!==!0,{message:"postOnly must not be provided for MARKET orders",path:["postOnly"]}).refine((e)=>e.postOnly!==!0||e.timeInForce===void 0||e.timeInForce!=="IOC"&&e.timeInForce!=="FOK",{message:"postOnly cannot be combined with IOC/FOK time in force",path:["postOnly"]}).refine((e)=>e.riskBucketCollateral===void 0||e.tradingMode==="MARGIN",{message:"riskBucketCollateral is only supported for MARGIN orders",path:["tradingMode"]}).refine((e)=>e.marginMode===void 0||e.tradingMode==="MARGIN",{message:"marginMode is only supported for MARGIN orders",path:["tradingMode"]}).refine((e)=>e.marginMode!=="CROSS"||e.marginAccountId!==void 0,{message:"marginAccountId is required for CROSS margin orders",path:["marginAccountId"]}).refine((e)=>e.marginMode!=="CROSS"||e.riskBucketId===void 0,{message:"marginMode CROSS cannot be combined with riskBucketId",path:["riskBucketId"]}).refine((e)=>e.marginMode!=="CROSS"||e.riskBucketCollateral===void 0,{message:"marginMode CROSS cannot be combined with riskBucketCollateral",path:["riskBucketCollateral"]}).refine((e)=>e.marginMode!=="CROSS"||e.strategyKey===void 0,{message:"marginMode CROSS cannot be combined with strategyKey",path:["strategyKey"]}).refine((e)=>e.riskBucketCollateral===void 0||e.riskBucketId===void 0,{message:"riskBucketCollateral creates a new risk bucket and cannot be combined with riskBucketId",path:["riskBucketId"]}).refine((e)=>e.riskBucketCollateral===void 0||e.reduceOnly!==!0,{message:"reduceOnly orders cannot create a new risk bucket",path:["reduceOnly"]}).refine((e)=>tI(e.side,e.positionSide),{message:"positionSide is deprecated; when supplied BUY requires LONG and SELL requires SHORT",path:["positionSide"]}).refine((e)=>e.tradingMode!=="MARGIN"||e.reduceOnly===!0||e.leverage!==void 0,{message:"leverage is required for normal MARGIN orders",path:["leverage"]}),mx=100,t$t=S({orders:Ie(spe).min(1,"At least one order is required").max(mx,`At most ${mx} orders per batch request`)}),ape=S({orderId:Oe,price:dt.optional(),quantity:dt.optional(),useMasterBalance:ue().optional(),postOnly:ue().optional(),selfTradePreventionMode:Kc.optional()}).refine((e)=>e.price!==void 0||e.quantity!==void 0,{message:"At least one of price or quantity must be provided"}),r$t=S({orders:Ie(ape).min(1,"At least one order is required").max(mx,`At most ${mx} orders per batch request`)});var nI=S({page:M().int().min(1,"Page must be at least 1").optional(),pageSize:M().int().min(1,"Page size must be at least 1").max(100,"Page size cannot exceed 100").optional()}),s$t=nI.extend({state:y().trim().min(1,"State cannot be empty").optional(),tradingPairId:Oe.optional()}),a$t=S({marginAccountId:Oe,tradingPairId:Oe.optional()}),c$t=S({tradingPairId:Oe.optional()}).optional(),u$t=S({asset:y().trim().min(1,"Asset cannot be empty").optional()}).optional(),cpe=S({asset:y().trim().min(1,"Asset cannot be empty"),amount:dt,tradingPairId:Oe.optional(),strategyKey:y().trim().min(1,"Strategy key cannot be empty").optional(),marginMode:H(["ISOLATED","CROSS"]).optional()}).refine((e)=>!(e.marginMode==="CROSS"&&e.tradingPairId!==void 0),{message:"tradingPairId is not supported for CROSS risk buckets",path:["tradingPairId"]}),gx=S({asset:y().trim().min(1,"Asset cannot be empty"),amount:dt}),upe=S({tradingPairId:Oe,strategyKey:y().trim().min(1,"Strategy key cannot be empty").optional()}),Ej=upe.extend({marginMode:_e("ISOLATED").optional(),selectedTradingPairIds:kn().optional(),applyToPositionMargin:ue().optional()}),dpe=S({marginMode:_e("CROSS"),selectedTradingPairIds:kn().optional(),strategyKey:kn().optional()}),lpe=S({marginMode:_e("CROSS"),selectedTradingPairIds:kn().optional(),strategyKey:kn().optional(),tradingPairId:kn().optional()}),d$t=S({marginAccountId:Oe,request:cpe}),l$t=S({request:gx}),ppe=S({marginMode:H(["ISOLATED","CROSS"]).optional(),selectedTradingPairIds:Et().optional()}).loose().superRefine((e,t)=>{if(e.selectedTradingPairIds===void 0)return;t.addIssue({code:"custom",path:["selectedTradingPairIds"],message:e.marginMode==="CROSS"?"selectedTradingPairIds is not accepted on a CROSS transfer: cross scope is derived from trading, so a funding call has nothing to declare":"selectedTradingPairIds is not supported for ISOLATED risk buckets"})}),p$t=S({request:ppe.pipe(st([gx.merge(Ej).strict(),gx.merge(lpe).strict()]))}),f$t=S({request:gx}),m$t=nI.extend({marginAccountId:Oe,movementType:y().trim().min(1,"Movement type cannot be empty").optional()}),h$t=nI.extend({movementType:y().trim().min(1,"Movement type cannot be empty").optional()}).optional(),oI=S({tradingPairId:Oe,side:Cl,positionSide:Bm.optional(),orderType:Ml,price:dt.optional(),quantity:dt,leverage:dt.optional(),reduceOnly:ue().optional(),slippageToleranceBps:$l.optional()}),iI=(e,t)=>{if(e.orderType!=="MARKET"&&e.slippageToleranceBps!==void 0)t.addIssue({code:Hn.custom,message:"slippageToleranceBps is only supported for MARKET orders",path:["slippageToleranceBps"]});if(e.positionSide!==void 0){let r=e.side==="BUY"?"LONG":"SHORT";if(e.positionSide!==r)t.addIssue({code:Hn.custom,message:"positionSide must match side when provided (BUY=LONG, SELL=SHORT)",path:["positionSide"]})}if(e.reduceOnly!==!0&&e.leverage===void 0)t.addIssue({code:Hn.custom,message:"leverage is required for normal margin orders",path:["leverage"]})},Pj=oI.strict().superRefine(iI),fpe=oI.merge(Ej).strict().superRefine(iI),mpe=oI.merge(dpe).strict().superRefine(iI),hpe=S({marginMode:H(["ISOLATED","CROSS"]).optional(),selectedTradingPairIds:Et().optional()}).loose().superRefine((e,t)=>{if(e.selectedTradingPairIds===void 0)return;t.addIssue({code:"custom",path:["selectedTradingPairIds"],message:e.marginMode==="CROSS"?"selectedTradingPairIds is not accepted on a CROSS preview: cross scope is derived from trading, so a preview has nothing to declare":"selectedTradingPairIds is not supported for ISOLATED risk buckets"})}),gpe=hpe.pipe(st([fpe,mpe])),g$t=S({marginAccountId:Oe,request:Pj}).refine((e)=>e.request.orderType!=="LIMIT"||e.request.price!==void 0,{message:"price is required for LIMIT risk simulations",path:["request","price"]}),y$t=S({request:Pj}).refine((e)=>e.request.orderType!=="LIMIT"||e.request.price!==void 0,{message:"price is required for LIMIT risk simulations",path:["request","price"]}),b$t=S({request:gpe}).refine((e)=>e.request.orderType!=="LIMIT"||e.request.price!==void 0,{message:"price is required for LIMIT risk simulations",path:["request","price"]});var Aj=H(["1m","5m","15m","30m","1h","4h","1d","1w","1M"],{message:'Interval must be one of: "1m", "5m", "15m", "30m", "1h", "4h", "1d", "1w", "1M"'}),ype=31536000000,bpe=946684800000,yx=M().int().positive({message:"Timestamp must be a positive integer (milliseconds since epoch)"}).min(bpe,{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((e)=>e<=Date.now()+ype,{message:"Timestamp must not be unreasonably far in the future (max 1 year ahead)"}),S$t=S({tradingPairId:Oe,interval:Aj,startTime:yx,endTime:yx}).refine((e)=>e.startTime<e.endTime,{message:"startTime must be less than endTime",path:["endTime"]}),v$t=y().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")'}),xpe=M().int().positive({message:"Limit must be a positive integer"}).max(500,{message:"Limit cannot exceed 500 bars per request"}).optional(),T$t=S({tradingPairId:Oe,interval:Aj,startTime:yx.optional(),endTime:yx.optional(),limit:xpe,priceType:H(["trade","mark"]).optional()}).refine((e)=>{if(e.startTime!==void 0&&e.endTime!==void 0)return e.startTime<e.endTime;return!0},{message:"startTime must be less than endTime",path:["endTime"]});var E$t=S({tradingPairId:Oe}),P$t=S({query:y().min(1,"Search query cannot be empty").optional(),pageSize:M().int().min(1).max(100).optional(),page:M().int().min(1).optional()}),A$t=S({tradingPairId:Oe});var kj=S({page:M().int().min(1,"Page must be at least 1").optional(),pageSize:M().int().min(1,"Page size must be at least 1").max(100,"Page size cannot exceed 100").optional()}),_pe=H(["OPEN","CLOSED","LIQUIDATING","LIQUIDATED"],{message:'Position status must be "OPEN", "CLOSED", "LIQUIDATING", or "LIQUIDATED"'}),wpe=H(["MARKET","LIMIT","IOC"],{message:'Close type must be "MARKET", "LIMIT", or "IOC"'}),sI=S({positionId:Oe}),O$t=kj.extend({marginAccountId:Oe.optional(),tradingPairId:Oe.optional(),status:_pe.optional()});var C$t=sI.extend({request:S({closeType:wpe,limitPrice:dt.optional(),slippageToleranceBps:Lm.optional(),quantity:dt.optional()})}).refine((e)=>e.request.closeType==="MARKET"||e.request.limitPrice!==void 0,{message:"limitPrice is required for LIMIT and IOC close requests",path:["request","limitPrice"]}).refine((e)=>e.request.closeType!=="MARKET"||e.request.limitPrice===void 0,{message:"limitPrice is not allowed for MARKET close requests",path:["request","limitPrice"]}),M$t=S({tradingPairId:Oe.optional(),slippageToleranceBps:Lm.optional()});var Ij=S({triggerPrice:dt,orderType:Ml,limitPrice:dt.optional(),quantity:dt.optional(),closePosition:ue().optional(),timeInForce:eI.optional(),slippageToleranceBps:Lm.optional(),expiresAt:Ra.optional()}).refine((e)=>e.orderType!=="LIMIT"||e.limitPrice!==void 0,{message:"limitPrice is required for LIMIT TP/SL legs",path:["limitPrice"]}).refine((e)=>e.orderType!=="MARKET"||e.limitPrice===void 0,{message:"limitPrice must not be provided for MARKET TP/SL legs",path:["limitPrice"]}).refine((e)=>e.orderType!=="MARKET"||e.timeInForce===void 0,{message:"timeInForce is only allowed for LIMIT TP/SL legs",path:["timeInForce"]}).refine((e)=>e.orderType!=="LIMIT"||e.slippageToleranceBps===void 0,{message:"slippageToleranceBps is only allowed for MARKET TP/SL legs",path:["slippageToleranceBps"]}).refine((e)=>e.closePosition!==!0||e.quantity===void 0,{message:"quantity must be omitted when closePosition is true",path:["quantity"]}).refine((e)=>e.quantity!==void 0||e.closePosition!==!1,{message:"quantity is required when closePosition is false",path:["closePosition"]}),$$t=sI.extend({request:S({takeProfit:Ij.optional(),stopLoss:Ij.optional(),oco:ue().optional()}).refine((e)=>e.takeProfit!==void 0||e.stopLoss!==void 0,{message:"At least one of takeProfit or stopLoss is required"}).refine((e)=>e.oco!==!0||e.takeProfit!==void 0&&e.stopLoss!==void 0,{message:"oco=true requires both takeProfit and stopLoss",path:["oco"]})}),N$t=kj.extend({positionId:Oe.optional(),marginAccountId:Oe.optional(),tradingPairId:Oe.optional(),reductionOnly:ue().optional()}),Spe=H(["1m","5m","15m","1h","4h","1d"],{message:'Interval must be one of "1m", "5m", "15m", "1h", "4h", "1d"'}),z$t=sI.extend({params:S({interval:Spe,startTime:M().int().min(0,"startTime must be a non-negative millisecond timestamp").optional(),endTime:M().int().min(0,"endTime must be a non-negative millisecond timestamp").optional()}).refine((e)=>e.startTime===void 0||e.endTime===void 0||e.startTime<e.endTime,{message:"startTime must be less than endTime",path:["startTime"]})});var vpe=H(["CREDIT","DEBIT","LOCK","UNLOCK","FEE"],{message:'Entry type must be "CREDIT", "DEBIT", "LOCK", "UNLOCK", or "FEE"'}),Tpe=H(["DEPOSIT","WITHDRAWAL","TRADE","FEE","FUNDING","LIQUIDATION","INTEREST","REWARD"],{message:'Transaction type must be "DEPOSIT", "WITHDRAWAL", "TRADE", "FEE", "FUNDING", "LIQUIDATION", "INTEREST", or "REWARD"'}),U$t=S({mode:Kc}),F$t=S({page:M().int("Page must be an integer").min(1,"Page must be at least 1").optional(),pageSize:M().int("Page size must be an integer").min(1,"Page size must be at least 1").max(100,"Page size cannot exceed 100").optional(),entryType:vpe.optional(),transactionType:Tpe.optional(),assetId:Oe.optional()}),j$t=S({page:M().int("Page must be an integer").min(1,"Page must be at least 1").optional(),pageSize:M().int("Page size must be an integer").min(1,"Page size must be at least 1").max(1000,"Page size cannot exceed 1000").optional(),tradingPairId:Oe.optional(),pageToken:y().optional()}).superRefine((e,t)=>{if(e.page!==void 0&&e.pageToken===void 0&&e.pageSize!==void 0&&e.pageSize>100)t.addIssue({code:Hn.custom,message:"Page size cannot exceed 100 in page-number mode (page without pageToken)",path:["pageSize"]})}),q$t=S({page:M().int("Page must be an integer").min(1,"Page must be at least 1").optional(),pageSize:M().int("Page size must be an integer").min(1,"Page size must be at least 1").max(100,"Page size cannot exceed 100").optional(),tradingPairId:Oe.optional(),positionId:Oe.optional(),marginAccountId:Oe.optional()});var Z$t=y().regex(/^0x[a-fA-F0-9]{40}$/,{message:"Must be a valid Ethereum address (e.g., '0x1234...5678')"}),aI=st([y().regex(/^\d+$/,"Must be a positive integer string").refine((e)=>BigInt(e)>0n,{message:"Amount must be greater than 0"}),N5().refine((e)=>e>0n,{message:"Amount must be greater than 0"})]),W$t=S({assetId:Oe,amount:aI,autoWait:ue().optional()}),K$t=S({assetId:Oe,amount:aI,autoWait:ue().optional(),target:H(["spot","margin"]).optional(),options:S({asErc20:ue().optional()}).optional()}),Y$t=S({assetId:Oe,amount:aI,destination:y().regex(/^0x[a-fA-F0-9]{40}$/,"destination must be a 0x-prefixed 20-byte hex address"),autoWait:ue().optional(),source:H(["spot","margin"]).optional()}),J$t=S({assetId:Oe});function Rj(e){e.registerTool("simulate_parent_margin_order_risk",{description:"Preview the risk impact of a prospective order against your parent (cross) margin account (read-only simulation).",inputSchema:S({tradingPairId:y().describe("Trading pair UUID"),side:H(["BUY","SELL"]).describe("Order side (authoritative: BUY=LONG, SELL=SHORT)"),orderType:H(["LIMIT","MARKET"]).describe("Order type"),quantity:y().describe("Order quantity as a decimal string"),price:y().optional().describe("Limit price as a decimal string — required for LIMIT"),leverage:y().optional().describe("Leverage as a decimal string — required unless reduceOnly is true"),reduceOnly:ue().optional().describe("Whether the order can only reduce exposure"),slippageToleranceBps:$l.optional().describe("MARKET only: slippage tolerance in bps (0..1000), tightening the previewed walk to the band placement will use; the response's expectedMatchResult (the engine's simulated fill, in the same shape as a placement's matchResult) and estimatedFee price under it")}).refine((t)=>t.orderType!=="LIMIT"||t.price!==void 0,{message:"price is required for LIMIT risk simulations",path:["price"]}).refine((t)=>t.reduceOnly===!0||t.leverage!==void 0,{message:"leverage is required for normal (non-reduce-only) margin orders",path:["leverage"]}).refine((t)=>t.orderType==="MARKET"||t.slippageToleranceBps===void 0,{message:"slippageToleranceBps is only supported for MARKET orders",path:["slippageToleranceBps"]})},async({tradingPairId:t,side:r,orderType:n,quantity:o,price:i,leverage:s,reduceOnly:a,slippageToleranceBps:c})=>{let l=await(await X()).marginAccounts.simulateParentMarginOrderRisk({tradingPairId:t,side:r,orderType:n,quantity:o,price:i,leverage:s,reduceOnly:a,slippageToleranceBps:c});return L(l)})}function Oj(e){e.registerTool("simulate_risk_bucket_order_risk",{description:"Preview the risk impact of a prospective order for a new or existing risk bucket (read-only simulation). A CROSS preview names no pairs: cross scope is derived from trading (a pair joins the cross risk bucket when a cross order on it succeeds and, once its positions close, stays listed until a later successful cross order on another pair reconciles the bucket), and the response's selectedTradingPairIds reports the derived scope the preview ran against. Unknown input keys are rejected.",inputSchema:S({tradingPairId:y().describe("Trading pair UUID"),side:H(["BUY","SELL"]).describe("Order side (authoritative: BUY=LONG, SELL=SHORT)"),positionSide:H(["LONG","SHORT"]).optional().describe("Deprecated compatibility field; order side is authoritative (BUY=LONG, SELL=SHORT)"),orderType:H(["LIMIT","MARKET"]).describe("Order type"),quantity:y().describe("Order quantity as a decimal string"),price:y().optional().describe("Limit price as a decimal string — required for LIMIT"),leverage:y().optional().describe("Leverage as a decimal string — required unless reduceOnly is true"),reduceOnly:ue().optional().describe("Whether the order can only reduce exposure"),slippageToleranceBps:$l.optional().describe("MARKET only: slippage tolerance in bps (0..1000), tightening the previewed walk to the band placement will use; the response's expectedMatchResult (the engine's simulated fill, in the same shape as a placement's matchResult) and estimatedFee price under it"),marginMode:H(["ISOLATED","CROSS"]).optional().describe("Risk bucket margin mode (default ISOLATED)"),strategyKey:y().optional().describe("Isolated risk bucket strategy key (ISOLATED only)")}).strict().refine((t)=>t.orderType!=="LIMIT"||t.price!==void 0,{message:"price is required for LIMIT risk simulations",path:["price"]}).refine((t)=>t.reduceOnly===!0||t.leverage!==void 0,{message:"leverage is required for normal (non-reduce-only) margin orders",path:["leverage"]}).refine((t)=>t.orderType==="MARKET"||t.slippageToleranceBps===void 0,{message:"slippageToleranceBps is only supported for MARKET orders",path:["slippageToleranceBps"]}).refine((t)=>t.marginMode!=="CROSS"||t.strategyKey===void 0,{message:"strategyKey is not allowed for CROSS risk buckets",path:["strategyKey"]})},async({tradingPairId:t,side:r,positionSide:n,orderType:o,quantity:i,price:s,leverage:a,reduceOnly:c,slippageToleranceBps:d,marginMode:l,strategyKey:p})=>{let m=await X(),h={tradingPairId:t,side:r,positionSide:n,orderType:o,quantity:i,price:s,leverage:a,reduceOnly:c,slippageToleranceBps:d},b=l==="CROSS"?await m.marginAccounts.simulateRiskBucketOrderRisk({...h,marginMode:l}):await m.marginAccounts.simulateRiskBucketOrderRisk({...h,marginMode:l,strategyKey:p});return L(b)})}function Cj(e){e.registerTool("transfer_collateral_from_parent_margin_account",{description:"Move collateral out of your parent (cross) margin account back to spot.",inputSchema:S({asset:y().describe("Collateral asset symbol or ID"),amount:y().describe("Amount to transfer as a decimal string")})},async({asset:t,amount:r})=>{let o=await(await X()).marginAccounts.transferCollateralFromParentMarginAccount({asset:t,amount:r});return L(o)})}function Mj(e){e.registerTool("transfer_collateral_to_parent_margin_account",{description:"Move collateral from spot into your parent (cross) margin account.",inputSchema:S({asset:y().describe("Collateral asset symbol or ID"),amount:y().describe("Amount to transfer as a decimal string")})},async({asset:t,amount:r})=>{let o=await(await X()).marginAccounts.transferCollateralToParentMarginAccount({asset:t,amount:r});return L(o)})}function $j(e){e.registerTool("transfer_collateral_to_risk_bucket",{description:"Allocate collateral into an isolated or cross risk bucket. A cross transfer names no pairs: cross scope is derived from trading (a pair joins the cross bucket when a cross order on it succeeds and leaves when its positions close).",inputSchema:S({asset:y().describe("Collateral asset symbol or ID"),amount:y().describe("Amount to transfer as a decimal string"),marginMode:H(["ISOLATED","CROSS"]).optional().describe("Risk bucket margin mode (default ISOLATED)"),tradingPairId:y().optional().describe("Trading pair UUID (required for ISOLATED; not allowed for CROSS)"),strategyKey:y().optional().describe("Isolated risk bucket strategy key (ISOLATED only)"),applyToPositionMargin:ue().optional().describe("ISOLATED only. Omitted/true (Adjust Margin, the default): commit the amount to the sole open position's stored margin — leverage drops and stays down, initial margin required rises, free collateral is unchanged. false: plain allocation — free collateral rises and the next order can spend it; funding loops targeting free collateral MUST pass false.")}).strict().refine((t)=>t.marginMode==="CROSS"||t.tradingPairId!==void 0,{message:"tradingPairId is required for ISOLATED risk buckets",path:["tradingPairId"]}).refine((t)=>t.marginMode!=="CROSS"||t.tradingPairId===void 0,{message:"tradingPairId is not allowed for CROSS risk buckets",path:["tradingPairId"]}).refine((t)=>t.marginMode!=="CROSS"||t.strategyKey===void 0,{message:"strategyKey is not allowed for CROSS risk buckets",path:["strategyKey"]}).refine((t)=>t.marginMode!=="CROSS"||t.applyToPositionMargin===void 0,{message:"applyToPositionMargin is only allowed for ISOLATED risk buckets",path:["applyToPositionMargin"]})},async({asset:t,amount:r,marginMode:n,tradingPairId:o,strategyKey:i,applyToPositionMargin:s})=>{let a=await X(),c=n==="CROSS"?await a.marginAccounts.transferCollateralToRiskBucket({asset:t,amount:r,marginMode:n}):await a.marginAccounts.transferCollateralToRiskBucket({asset:t,amount:r,marginMode:n,tradingPairId:o??"",strategyKey:i,applyToPositionMargin:s});return L(c)})}function Nj(e){dj(e),pj(e),uj(e),lj(e),Rj(e),Oj(e),Mj(e),Cj(e),$j(e)}function zj(e){e.registerTool("get_candlesticks",{description:"Get OHLCV candlestick data for a trading pair. Useful for charting and price analysis.",inputSchema:S({tradingPairId:y().describe("Trading pair UUID"),interval:H(["1m","5m","15m","1h","4h","1d"]).describe("Candlestick interval"),startTime:M().optional().describe("Start time as Unix timestamp (seconds)"),endTime:M().optional().describe("End time as Unix timestamp (seconds)"),limit:M().optional().describe("Max number of candlesticks to return")})},async({tradingPairId:t,interval:r,startTime:n,endTime:o,limit:i})=>{let a=await Ze().market.getCandlesticks(t,r,{startTime:n,endTime:o,limit:i});return L(a)})}function Bj(e){e.registerTool("get_market_metadata",{description:"Get metadata for a specific trading pair including tick size, min order size, and trading rules.",inputSchema:S({tradingPairId:y().describe("Trading pair UUID")})},async({tradingPairId:t})=>{let n=await Ze().market.getMarketMetadata(t);return L(n)})}function Lj(e){e.registerTool("get_market_stats",{description:"Get exchange-wide life-to-date cumulative volume and trade count across all markets."},async()=>{let r=await Ze().market.getMarketStats();return L(r)})}function Dj(e){e.registerTool("get_screener",{description:"Screen trading pairs with market stats (price, volume, change), filtered by market type, category, and active status.",inputSchema:S({page:M().optional().describe("Page number (1-based)"),pageSize:M().optional().describe("Items per page"),marketType:H(["SPOT","MARGIN"]).optional().describe("Filter by market type"),isActive:ue().optional().describe("Filter by active status"),category:y().optional().describe("Filter by category (e.g. crypto, equities, commodities)")})},async({page:t,pageSize:r,marketType:n,isActive:o,category:i})=>{let a=await Ze().market.getScreener({page:t,pageSize:r,marketType:n,isActive:o,category:i});return L(a)})}function Uj(e){e.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:S({symbol:y().describe("Trading pair symbol (e.g. 'BTC/USDC')")})},async({symbol:t})=>{let n=await Ze().market.getTradingPairBySymbol(t);if(!n)return lx(`Trading pair '${t}' not found.`);return L(n)})}function Fj(e){e.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:S({page:M().optional().describe("Page number (starts from 1)"),pageSize:M().optional().describe("Number of items per page (max 100)"),marketType:H(["SPOT","MARGIN"]).optional().describe("Filter by market type"),baseToken:y().optional().describe("Filter by base token"),quoteToken:y().optional().describe("Filter by quote token"),isActive:ue().optional().describe("Filter by active status"),category:y().optional().describe("Filter by category (e.g. crypto, equities, commodities)")})},async(t)=>{let n=await Ze().market.getPaginatedTradingPairs(t);return L(n)})}function jj(e){Fj(e),Uj(e),zj(e),Bj(e),Dj(e),Lj(e)}function qj(e){e.registerTool("get_orderbook",{description:"Get the current orderbook snapshot for a trading pair. Shows bids, asks, best bid/ask, and volumes.",inputSchema:S({tradingPairId:y().describe("Trading pair UUID"),depth:M().optional().describe("Number of price levels to return (max 100, default 10)"),tradingMode:H(["SPOT"]).optional().describe("Trading mode (default: SPOT)"),magnitude:M().optional().describe("Price grouping magnitude (e.g. 0.01, 0.1, 1, 10, 100)"),denomination:H(["BASE","QUOTE"]).optional().describe("Quantity denomination: BASE or QUOTE")})},async({tradingPairId:t,depth:r,tradingMode:n,magnitude:o,denomination:i})=>{let a=await Ze().orderbook.getOrderbook(t,{depth:r,tradingMode:n,magnitude:o,denomination:i});return L(a)})}function Hj(e){qj(e)}function Gj(e){e.registerTool("get_all_funding_history",{description:"List historical funding-rate records across all perpetual markets.",inputSchema:S({startTime:y().optional().describe('Start time as a Unix millisecond-epoch timestamp string (e.g. "1717200000000"); ISO 8601 is rejected by the API'),endTime:y().optional().describe('End time as a Unix millisecond-epoch timestamp string (e.g. "1717200000000"); ISO 8601 is rejected by the API'),page:M().optional().describe("Page number (1-based)"),pageSize:M().optional().describe("Items per page"),orderBy:H(["ASC","DESC"]).optional().describe("Sort order by time")})},async({startTime:t,endTime:r,page:n,pageSize:o,orderBy:i})=>{let a=await Ze().market.listAllFundingHistory({startTime:t,endTime:r,page:n,pageSize:o,orderBy:i});return L(a)})}function Vj(e){e.registerTool("get_funding_history",{description:"List historical funding-rate records for a perpetual market.",inputSchema:S({tradingPairId:y().describe("Trading pair UUID"),startTime:y().optional().describe('Start time as a Unix millisecond-epoch timestamp string (e.g. "1717200000000"); ISO 8601 is rejected by the API'),endTime:y().optional().describe('End time as a Unix millisecond-epoch timestamp string (e.g. "1717200000000"); ISO 8601 is rejected by the API'),page:M().optional().describe("Page number (1-based)"),pageSize:M().optional().describe("Items per page"),orderBy:H(["ASC","DESC"]).optional().describe("Sort order by time")})},async({tradingPairId:t,startTime:r,endTime:n,page:o,pageSize:i,orderBy:s})=>{let c=await Ze().market.listFundingHistory(t,{startTime:r,endTime:n,page:o,pageSize:i,orderBy:s});return L(c)})}function Zj(e){e.registerTool("get_funding_state",{description:"Get the current funding rate and next funding time for a perpetual market.",inputSchema:S({tradingPairId:y().describe("Trading pair UUID")})},async({tradingPairId:t})=>{let n=await Ze().market.getFundingState(t);return L(n)})}function Wj(e){e.registerTool("get_index_price",{description:"Get the current index (oracle) price for a perpetual market.",inputSchema:S({tradingPairId:y().describe("Trading pair UUID")})},async({tradingPairId:t})=>{let n=await Ze().market.getIndexPrice(t);return L(n)})}function Kj(e){e.registerTool("get_mark_price",{description:"Get the current mark price for a perpetual market.",inputSchema:S({tradingPairId:y().describe("Trading pair UUID")})},async({tradingPairId:t})=>{let n=await Ze().market.getMarkPrice(t);return L(n)})}function Yj(e){e.registerTool("get_open_interest",{description:"Get the current open interest for a perpetual market.",inputSchema:S({tradingPairId:y().describe("Trading pair UUID")})},async({tradingPairId:t})=>{let n=await Ze().market.getOpenInterest(t);return L(n)})}function Jj(e){e.registerTool("get_perp_market_config",{description:"Get a perpetual market's configuration (leverage limits, margin requirements, funding parameters).",inputSchema:S({tradingPairId:y().describe("Trading pair UUID")})},async({tradingPairId:t})=>{let n=await Ze().market.getPerpMarketConfig(t);return L(n)})}function Qj(e){e.registerTool("get_perp_market_summary",{description:"Get a perpetual market's live summary (mark/index price, funding rate, open interest, 24h stats).",inputSchema:S({tradingPairId:y().describe("Trading pair UUID")})},async({tradingPairId:t})=>{let n=await Ze().market.getPerpMarketSummary(t);return L(n)})}function Xj(e){Jj(e),Qj(e),Kj(e),Wj(e),Zj(e),Yj(e),Vj(e),Gj(e)}function eq(e){e.registerTool("check_trader_code_availability",{description:"Public advisory check of whether a custom PitPass TraderCode handle is available. Returns `available` and, when unavailable, a `reason` (one of taken, too_short, too_long, reserved, invalid_char, looks_like_address). Advisory only — the authoritative gate is the atomic claim in set_trader_code, so a positive result is not a reservation.",inputSchema:S({code:y().describe("The custom handle to check for availability.")})},async({code:t})=>{let n=await Ze().pitpass.checkTraderCodeAvailability(t);return L(n)})}function tq(e){e.registerTool("clear_trader_code",{description:"Clear the authenticated caller's custom PitPass TraderCode handle, reverting to the wallet-derived default. The freed handle enters a cooldown before anyone else can claim it. Returns the caller's TraderCode identity after the revert.",inputSchema:S({})},async()=>{let r=await(await X()).pitpass.clearTraderCode();return L(r)})}function rq(e){e.registerTool("get_my_trader_code",{description:"Return the authenticated caller's PitPass TraderCode — their normalized wallet address. Clients render it as `Monaco - <address>`. Never 404s; ensures the backing row so referrals attributed to this wallet link correctly.",inputSchema:S({})},async()=>{let r=await(await X()).pitpass.getMyTraderCode();return L(r)})}function nq(e){e.registerTool("get_rewards_balance",{description:"Return the authenticated caller's current PitPass rewards-bucket balances across all reward tokens. Returns an empty list when no rewards have been earned yet. Use transfer_rewards to move earned rewards into a tradeable balance.",inputSchema:S({})},async()=>{let r=await(await X()).pitpass.getRewardsBalance();return L(r)})}function oq(e){e.registerTool("get_trader_code_info",{description:"Public lookup of a PitPass TraderCode (wallet address or 'Monaco - <address>' form). Returns the resolved normalized code when it belongs to a known wallet, or a 404 error if not found. Use this to validate a referral code before sign-up.",inputSchema:S({code:y().describe("The TraderCode to look up — a wallet address (0x-prefixed) or the 'Monaco - <address>' display form.")})},async({code:t})=>{let n=await Ze().pitpass.getTraderCodeInfo(t);return L(n)})}function iq(e){e.registerTool("set_trader_code",{description:"Claim or edit the authenticated caller's custom (vanity) PitPass TraderCode handle. Stored exactly as entered (case preserved); uniqueness is case-insensitive. Must start with a letter and be 5–20 characters of letters, digits, or underscores. The server is the authoritative gate: 409 if the handle is taken, 422 on validation failure, 429 when the per-hour edit limit is hit, 403 when the feature is disabled.",inputSchema:S({code:y().describe("The custom handle to claim or edit to — letter-first [A-Za-z0-9_], 5–20 characters. Case is preserved.")})},async({code:t})=>{let n=await(await X()).pitpass.setTraderCode(t);return L(n)})}function sq(e){e.registerTool("transfer_rewards",{description:"Transfer earned PitPass rewards from your rewards bucket into your trading balance, making them immediately tradeable. Ledger-only — no on-chain transaction. Fails if the rewards balance is insufficient.",inputSchema:S({token:y().describe("Reward token contract address (0x-prefixed EVM address) to transfer."),amount:y().describe("Amount to transfer in RAW atomic units of the token (positive integer string).")})},async({token:t,amount:r})=>{let o=await(await X()).pitpass.transferRewards({token:t,amount:r});return L(o)})}function aq(e){oq(e),eq(e)}function cq(e){rq(e),nq(e),sq(e),iq(e),tq(e)}function uq(e){e.registerTool("get_portfolio_assets",{description:"Get your per-asset portfolio allocation and balances over a period.",inputSchema:S({period:H(["1d","1w","1m","all"]).optional().describe("Analytics period (default: all)")})},async({period:t})=>{let n=await(await X()).portfolio.getAssets({period:t});return L(n)})}function dq(e){e.registerTool("get_portfolio_margin",{description:"Get your portfolio margin overview (collateral, maintenance margin, health)."},async()=>{let r=await(await X()).portfolio.getMargin();return L(r)})}function lq(e){e.registerTool("get_portfolio_performance",{description:"Get your portfolio performance time series over a period.",inputSchema:S({period:H(["1d","1w","1m","all"]).optional().describe("Analytics period (default: all)")})},async({period:t})=>{let n=await(await X()).portfolio.getPerformance({period:t});return L(n)})}function pq(e){e.registerTool("get_portfolio_realized_pnl",{description:"Get your realized PnL breakdown over a period.",inputSchema:S({period:H(["1d","1w","1m","all"]).optional().describe("Analytics period (default: all)")})},async({period:t})=>{let n=await(await X()).portfolio.getRealizedPnl({period:t});return L(n)})}function fq(e){e.registerTool("get_portfolio_summary",{description:"Get your authoritative portfolio summary (equity, PnL, exposure) over a period.",inputSchema:S({period:H(["1d","1w","1m","all"]).optional().describe("Analytics period (default: all)")})},async({period:t})=>{let n=await(await X()).portfolio.getSummary({period:t});return L(n)})}function mq(e){fq(e),lq(e),pq(e),uq(e),dq(e)}function hq(e){e.registerTool("close_position",{description:"Close a perpetual position with a market, limit, or IOC reduce order.",inputSchema:S({positionId:y().describe("Position UUID"),closeType:H(["MARKET","LIMIT","IOC"]).describe("Close order type"),limitPrice:y().optional().describe("Limit price as a decimal string — required for LIMIT and IOC, not allowed for MARKET"),slippageToleranceBps:M().optional().describe("Slippage tolerance in basis points (MARKET/IOC)"),quantity:y().optional().describe("Quantity to close as a decimal string (defaults to full position)")}).refine((t)=>t.closeType==="MARKET"||t.limitPrice!==void 0,{message:"limitPrice is required for LIMIT and IOC close requests",path:["limitPrice"]}).refine((t)=>t.closeType!=="MARKET"||t.limitPrice===void 0,{message:"limitPrice is not allowed for MARKET close requests",path:["limitPrice"]})},async({positionId:t,closeType:r,limitPrice:n,slippageToleranceBps:o,quantity:i})=>{let a=await(await X()).positions.closePosition(t,{closeType:r,limitPrice:n,slippageToleranceBps:o,quantity:i});return L(a)})}function gq(e){e.registerTool("get_position",{description:"Get details for a specific perpetual position by ID.",inputSchema:S({positionId:y().describe("Position UUID")})},async({positionId:t})=>{let n=await(await X()).positions.getPosition(t);return L(n)})}function yq(e){e.registerTool("get_position_history",{description:"List historical (closed/reduced) perpetual position records with optional filters.",inputSchema:S({positionId:y().optional().describe("Filter by position UUID"),marginAccountId:y().optional().describe("Filter by margin account UUID"),tradingPairId:y().optional().describe("Filter by trading pair UUID"),page:M().optional().describe("Page number (1-based)"),pageSize:M().optional().describe("Items per page"),reductionOnly:ue().optional().describe("Only include reduction events")})},async({positionId:t,marginAccountId:r,tradingPairId:n,page:o,pageSize:i,reductionOnly:s})=>{let c=await(await X()).positions.listPositionHistory({positionId:t,marginAccountId:r,tradingPairId:n,page:o,pageSize:i,reductionOnly:s});return L(c)})}function bq(e){e.registerTool("get_position_pnl_history",{description:"Get the PnL history time series for a perpetual position over an interval.",inputSchema:S({positionId:y().describe("Position UUID"),interval:H(["1m","5m","15m","1h","4h","1d"]).describe("Sampling interval"),startTime:M().int().min(0).optional().describe("Start time as a Unix timestamp in milliseconds"),endTime:M().int().min(0).optional().describe("End time as a Unix timestamp in milliseconds")}).refine((t)=>t.startTime===void 0||t.endTime===void 0||t.startTime<t.endTime,{message:"startTime must be less than endTime",path:["startTime"]})},async({positionId:t,interval:r,startTime:n,endTime:o})=>{let s=await(await X()).positions.getPositionPnlHistory(t,{interval:r,startTime:n,endTime:o});return L(s)})}function xq(e){e.registerTool("get_position_risk",{description:"Get liquidation price, margin ratio, and risk metrics for a perpetual position.",inputSchema:S({positionId:y().describe("Position UUID")})},async({positionId:t})=>{let n=await(await X()).positions.getPositionRisk(t);return L(n)})}function _q(e){e.registerTool("get_positions",{description:"List your perpetual positions with optional filters (margin account, trading pair, status).",inputSchema:S({marginAccountId:y().optional().describe("Filter by margin account UUID"),tradingPairId:y().optional().describe("Filter by trading pair UUID"),status:H(["OPEN","CLOSED","LIQUIDATING","LIQUIDATED"]).optional().describe("Filter by position status"),page:M().optional().describe("Page number (1-based)"),pageSize:M().optional().describe("Items per page")})},async({marginAccountId:t,tradingPairId:r,status:n,page:o,pageSize:i})=>{let a=await(await X()).positions.listPositions({marginAccountId:t,tradingPairId:r,status:n,page:o,pageSize:i});return L(a)})}function wq(e){_q(e),gq(e),xq(e),yq(e),bq(e),hq(e)}function Sq(e){e.registerTool("get_balance_by_asset",{description:"Get the authenticated user's balance for a specific asset by its UUID.",inputSchema:S({assetId:y().describe("The asset UUID")})},async({assetId:t})=>{let n=await(await X()).profile.getUserBalanceByAssetId(t);return L(n)})}function vq(e){e.registerTool("get_balances",{description:"Get the authenticated user's token balances with pagination.",inputSchema:S({page:M().optional().describe("Page number (starts from 1, default: 1)"),pageSize:M().optional().describe("Number of items per page (default: 20, max: 100)")})},async({page:t,pageSize:r})=>{let o=await(await X()).profile.getUserBalances({page:t,pageSize:r});return L(o)})}function Tq(e){e.registerTool("get_funding_payments",{description:"List your perpetual funding payments with optional filters (trading pair, position, margin account).",inputSchema:S({tradingPairId:y().optional().describe("Filter by trading pair UUID"),positionId:y().optional().describe("Filter by position UUID"),marginAccountId:y().optional().describe("Filter by margin account UUID"),page:M().optional().describe("Page number (1-based)"),pageSize:M().optional().describe("Items per page")})},async({tradingPairId:t,positionId:r,marginAccountId:n,page:o,pageSize:i})=>{let a=await(await X()).profile.listFundingPayments({tradingPairId:t,positionId:r,marginAccountId:n,page:o,pageSize:i});return L(a)})}function Eq(e){e.registerTool("get_movements",{description:"Get the authenticated user's ledger movements (transaction history) with pagination.",inputSchema:S({page:M().int().min(1).optional().describe("Page number (starts from 1, default: 1)"),pageSize:M().int().min(1).max(100).optional().describe("Items per page (default: 20, max: 100)"),entryType:H(["CREDIT","DEBIT","LOCK","UNLOCK","FEE"]).optional().describe("Filter by entry type (e.g. CREDIT, DEBIT, LOCK, UNLOCK, FEE)"),transactionType:H(["DEPOSIT","WITHDRAWAL","TRADE","FEE","FUNDING","LIQUIDATION","INTEREST","REWARD"]).optional().describe("Filter by transaction type (e.g. DEPOSIT, WITHDRAWAL, TRADE, FEE, FUNDING, LIQUIDATION, INTEREST, REWARD)"),assetId:y().uuid().optional().describe("Filter by asset ID (UUID)")})},async({page:t,pageSize:r,entryType:n,transactionType:o,assetId:i})=>{let a=await(await X()).profile.getPaginatedUserMovements({page:t,pageSize:r,entryType:n,transactionType:o,assetId:i});return L(a)})}function Pq(e){e.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 r=await(await X()).profile.getProfile();return L(r)})}function Aq(e){e.registerTool("get_user_trades",{description:"List your own trade fills with optional filters and cursor pagination.",inputSchema:S({tradingPairId:y().optional().describe("Filter by trading pair UUID"),pageSize:M().optional().describe("Items per page"),pageToken:y().optional().describe("Cursor for the next page"),page:M().optional().describe("Page number (legacy offset mode; prefer pageToken)")})},async({tradingPairId:t,pageSize:r,pageToken:n,page:o})=>{let s=await(await X()).profile.getUserTrades({tradingPairId:t,pageSize:r,pageToken:n,page:o});return L(s)})}function Iq(e){Pq(e),vq(e),Sq(e),Eq(e),Aq(e),Tq(e)}function kq(e){e.registerTool("get_pulse",{description:"Get the latest market-pulse news feed: AI-synthesized, per-asset headlines with sentiment tags."},async()=>{let r=await Ze().pulse.getPulse();return L(r)})}function Rq(e){kq(e)}var Epe="https://docs.0xmonaco.com/mcp",Ppe="SearchMonacoDocs",bx=null;async function Oq(e,t,r){let n=await fetch(Epe,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json, text/event-stream",...bx?{"Mcp-Session-Id":bx}:{}},body:JSON.stringify({jsonrpc:"2.0",id:r,method:e,params:t})});if(!n.ok)throw Error(`Mintlify MCP error: ${n.status}`);let o=n.headers.get("mcp-session-id");if(o)bx=o;let s=(await n.text()).split(`
152
- `).find((a)=>a.startsWith("data: "));if(!s)throw Error("No data in Mintlify MCP response");return JSON.parse(s.slice(6))}async function Ape(){if(bx)return;await Oq("initialize",{protocolVersion:"2025-03-26",capabilities:{},clientInfo:{name:"monaco-mcp-server",version:S0.version}},0)}async function Ipe(e){return await Ape(),(await Oq("tools/call",{name:Ppe,arguments:{query:e}},1))?.result}function Cq(e){e.registerTool("search_docs",{description:"Search the Monaco documentation for information about the protocol, SDK, trading, and development guides.",inputSchema:S({query:y().describe("The search query")})},async({query:t})=>{try{let r=await Ipe(t);if(r?.content&&Array.isArray(r.content))return{content:r.content};return L(r)}catch(r){return lx(`Search failed: ${r instanceof Error?r.message:String(r)}`)}})}function Mq(e){Cq(e)}function $q(e){e.registerTool("get_trades",{description:"Get historical trades for a trading pair. Returns recent trades sorted by execution time (newest first).",inputSchema:S({tradingPairId:y().describe("Trading pair UUID"),page:M().optional().describe("Page number (starts from 1, default: 1)"),pageSize:M().optional().describe("Max number of records to return (default: 25, max: 100)")})},async({tradingPairId:t,page:r,pageSize:n})=>{let i=await Ze().trades.getTrades(t,{page:r,pageSize:n});return L(i)})}function Nq(e){$q(e)}function zq(e){e.registerTool("batch_cancel_all_orders",{description:"Cancel EVERY one of your open orders in one call. Destructive and unfiltered by default — with no tradingPairId it cancels your entire open-order book across all pairs; pass a tradingPairId to limit it to that pair.",inputSchema:S({tradingPairId:y().optional().describe("Optional trading pair UUID to limit cancellation to")})},async({tradingPairId:t})=>{let n=await(await X()).trading.batchCancelAll(t);return L(n)})}function Bq(e){e.registerTool("batch_cancel_orders",{description:"Cancel multiple orders by their IDs in a single request. Non-atomic and best-effort: each order is cancelled independently, so a failed leg does not stop the others. Inspect the per-order results and reconcile (retry or re-check) any that did not cancel.",inputSchema:S({orderIds:Ie(y()).describe("Array of order IDs to cancel")})},async({orderIds:t})=>{let n=await(await X()).trading.batchCancel(t);return L(n)})}function Lq(e){e.registerTool("batch_close_all_positions",{description:"Close all open perpetual positions with MARKET reduce-only orders ('panic close'), optionally filtered to a specific trading pair. Best-effort: each position closes independently and per-position failures are reported in the result.",inputSchema:S({tradingPairId:y().optional().describe("Optional trading pair UUID to limit the close to"),slippageToleranceBps:M().int().optional().describe("Optional slippage tolerance (basis points) applied to each close")})},async({tradingPairId:t,slippageToleranceBps:r})=>{let o=await(await X()).positions.batchCloseAllPositions({tradingPairId:t,slippageToleranceBps:r});return L(o)})}function Dq(e){e.registerTool("cancel_order",{description:"Cancel an open order by its ID.",inputSchema:S({orderId:y().describe("The order ID to cancel")})},async({orderId:t})=>{let n=await(await X()).trading.cancelOrder(t);return L(n)})}function Uq(e){e.registerTool("get_order",{description:"Get detailed information about a specific order by its ID.",inputSchema:S({orderId:y().describe("The order ID to look up")})},async({orderId:t})=>{let n=await(await X()).trading.getOrder(t);return L(n)})}function Fq(e){e.registerTool("get_orders",{description:"Get a cursor-paginated list of orders with optional filters by status and trading pair. Omit both page and pageToken for the newest orders; pass the previous response's nextPageToken to fetch the next page. A response with zero orders and an empty nextPageToken means the walk is exhausted. Cursor responses have no exact totals (total/totalPages are 0).",inputSchema:S({status:H(Ol).optional().describe("Filter by order status (e.g. SUBMITTED, FILLED, CANCELLED)"),tradingPairId:y().optional().describe("Filter by trading pair UUID"),page:M().optional().describe("Deprecated: page number for legacy offset pagination, which only sees recent history. Use pageToken instead."),pageSize:M().optional().describe("Orders per page (default: 10; max 100 in legacy page mode, up to 1000 with pageToken)"),pageToken:y().optional().describe("Pagination cursor from a previous response's nextPageToken. Omit it (and page) to start from the newest orders.")})},async({status:t,tradingPairId:r,page:n,pageSize:o,pageToken:i})=>{let a=await(await X()).trading.getPaginatedOrders({status:t,tradingPairId:r,page:n,pageSize:o,pageToken:i});return L(a)})}function jq(e){e.registerTool("place_limit_order",{description:"Place a limit order on Monaco. With idempotencyKey, retry the same submission safely within 24 hours of acceptance; different order details conflict. Limit orders execute only when the market reaches the specified price. The SDK generates a key if omitted. Calling this tool again without the original key starts a new submission and is not idempotent: do NOT retry an ambiguous outcome with a new key. Supply and retain your own idempotencyKey to recover across tool calls. get_orders/get_order are replica-backed; a missing row does not prove that an order failed. If the original key is unavailable, report the ambiguity.",inputSchema:S({tradingPairId:y().describe("Trading pair UUID"),side:H(["BUY","SELL"]).describe("Order side"),quantity:y().describe("Order quantity as a decimal string"),price:y().describe("Limit price as a decimal string"),tradingMode:H(["SPOT","MARGIN"]).optional().describe("Trading mode (default: SPOT)"),timeInForce:H(["GTC","IOC","FOK"]).optional().describe("Time in force (default: GTC)"),expirationDate:y().optional().describe("Expiration date for GTC orders (ISO 8601)"),marginAccountId:y().optional().describe("Parent margin account UUID for MARGIN orders"),marginMode:H(["ISOLATED","CROSS"]).optional().describe("Risk bucket mode for MARGIN orders: ISOLATED (default) or CROSS"),riskBucketId:y().optional().describe("Existing isolated risk bucket UUID for risk-bucket-scoped MARGIN orders"),riskBucketCollateral:y().optional().describe("Collateral to allocate into a new isolated risk bucket"),strategyKey:y().optional().describe("Optional client strategy key"),positionSide:H(["LONG","SHORT"]).optional().describe("Deprecated compatibility field; order side is authoritative (BUY=LONG, SELL=SHORT)"),leverage:y().optional().describe("Leverage as a decimal string, required for normal MARGIN orders (ignored for reduce-only)"),reduceOnly:ue().optional().describe("Whether the order can only reduce existing exposure"),postOnly:ue().optional().describe("Maker-only: rejected with a 400 carrying the structured error code 'POST_ONLY_WOULD_CROSS' if this order would cross the book. GTC time in force only; rejected with IOC/FOK."),selfTradePreventionMode:H(["CANCEL_MAKER","CANCEL_TAKER","CANCEL_BOTH","SKIP"]).optional().describe("Per-order self-trade-prevention override for matches against your own resting orders. CANCEL_MAKER cancels your resting orders and keeps matching; CANCEL_TAKER cancels this order's remainder at the first self-touch; CANCEL_BOTH does both; SKIP trades around your orders and cancels a remainder that would cross them. Omitted, your wallet default applies, else the platform default CANCEL_MAKER. Echoed back as selfTradePreventionMode on order reads."),idempotencyKey:y().min(1).max(64).regex(/^[A-Za-z0-9._:-]+$/).optional().describe("Stable identity for this submission; the SDK generates a key if omitted. Supply and retain a key for recovery across tool calls. Reuse with the same order details to safely retry a lost response within 24 hours of acceptance, including after a fill. Use a fresh key for each new order. Different details conflict; after 24 hours this key may execute again. Separate from clientOrderId."),clientOrderId:y().optional().describe("Client-assigned correlation handle, echoed back on order reads and order WebSocket events. Up to 64 characters from A-Za-z0-9._:-. Not an idempotency key: it is claimed only while the order rests, and is released on fill/cancel/expiry/rejection, so a marketable order that fills on arrival never takes it. Never resubmit on a lost response without the original idempotencyKey — a resubmission can execute a second time. Reconciling a lost response needs the order WebSocket stream (it carries the handle even for orders that never rested), which is outside MCP — this server exposes no stream tool, and get_orders is replica-backed and can omit an order that did land.")})},async({tradingPairId:t,side:r,quantity:n,price:o,tradingMode:i,timeInForce:s,expirationDate:a,marginAccountId:c,marginMode:d,riskBucketId:l,riskBucketCollateral:p,strategyKey:m,positionSide:h,leverage:b,reduceOnly:x,postOnly:_,selfTradePreventionMode:w,clientOrderId:A,idempotencyKey:v})=>{let P=await(await X()).trading.placeLimitOrder(t,r,n,o,{tradingMode:i,timeInForce:s,expirationDate:a,marginAccountId:c,marginMode:d,riskBucketId:l,riskBucketCollateral:p,strategyKey:m,positionSide:h,leverage:b,reduceOnly:x,postOnly:_,selfTradePreventionMode:w,clientOrderId:A,idempotencyKey:v});return L(P)})}function qq(e){e.registerTool("place_market_order",{description:"Place a market order on Monaco. With idempotencyKey, retry the same submission safely within 24 hours of acceptance; different order details conflict. It executes immediately against resting liquidity, but only inside a mandatory 1,000 bps (10%) server-side protective price band anchored to the mark/last-trade reference price. Fills stop at the edge of the band, so a market order may partially fill and cancel the remainder, be rejected when no liquidity sits inside the band, or be rejected when the market has no trustworthy price anchor. Optional slippageTolerance is merged tighter-wins with this band: it can only TIGHTEN execution, never widen past the mandatory band; omitting it applies the full 1,000 bps band. The SDK generates a key if omitted. Calling this tool again without the original key starts a new submission and is not idempotent: do NOT retry an ambiguous outcome with a new key. Supply and retain your own idempotencyKey to recover across tool calls. get_orders/get_order are replica-backed; a missing row does not prove that an order failed. If the original key is unavailable, report the ambiguity.",inputSchema:S({tradingPairId:y().describe("Trading pair UUID"),side:H(["BUY","SELL"]).describe("Order side"),quantity:y().describe("Order quantity as a decimal string"),tradingMode:H(["SPOT","MARGIN"]).optional().describe("Trading mode (default: SPOT)"),slippageTolerance:M().optional().describe("Tightens the mandatory 1,000 bps band, as a decimal (e.g. 0.01 for 1%; 0 for best price only). Can only tighten, never widen; omit to apply the full band."),marginAccountId:y().optional().describe("Parent margin account UUID for MARGIN orders"),marginMode:H(["ISOLATED","CROSS"]).optional().describe("Risk bucket mode for MARGIN orders: ISOLATED (default) or CROSS"),riskBucketId:y().optional().describe("Existing isolated risk bucket UUID for risk-bucket-scoped MARGIN orders"),riskBucketCollateral:y().optional().describe("Collateral to allocate into a new isolated risk bucket"),strategyKey:y().optional().describe("Optional client strategy key"),positionSide:H(["LONG","SHORT"]).optional().describe("Deprecated compatibility field; order side is authoritative (BUY=LONG, SELL=SHORT)"),leverage:y().optional().describe("Leverage as a decimal string, required for normal MARGIN orders (ignored for reduce-only)"),reduceOnly:ue().optional().describe("Whether the order can only reduce existing exposure"),idempotencyKey:y().min(1).max(64).regex(/^[A-Za-z0-9._:-]+$/).optional().describe("Stable identity for this submission; the SDK generates a key if omitted. Supply and retain a key for recovery across tool calls. Reuse with the same order details to safely retry a lost response within 24 hours of acceptance, including after a fill. Use a fresh key for each new order. Different details conflict; after 24 hours this key may execute again. Separate from clientOrderId."),clientOrderId:y().optional().describe("Client-assigned correlation handle, echoed back on order reads and order WebSocket events. Up to 64 characters from A-Za-z0-9._:-. Not an idempotency key. A market order never rests, so it never claims the handle and no duplicate-submission guard can fire for it: Without idempotencyKey, NEVER resubmit a market order on a lost response — it can execute again and increase your exposure (or reject, or fill at a different price; you cannot tell which in advance). Reconciling a lost response needs the order WebSocket stream (it carries the handle even for orders that never rested), which is outside MCP — this server exposes no stream tool, and get_orders is replica-backed and can omit an order that did land.")})},async({tradingPairId:t,side:r,quantity:n,tradingMode:o,slippageTolerance:i,marginAccountId:s,marginMode:a,riskBucketId:c,riskBucketCollateral:d,strategyKey:l,positionSide:p,leverage:m,reduceOnly:h,clientOrderId:b,idempotencyKey:x})=>{let w=await(await X()).trading.placeMarketOrder(t,r,n,{tradingMode:o,slippageTolerance:i,marginAccountId:s,marginMode:a,riskBucketId:c,riskBucketCollateral:d,strategyKey:l,positionSide:p,leverage:m,reduceOnly:h,clientOrderId:b,idempotencyKey:x});return L(w)})}function Hq(e){e.registerTool("replace_order",{description:"Replace an existing order with new price and/or quantity. The order must be open. "+"Not idempotent, and MCP has no order-stream tool, so an ambiguous outcome (timeout, network error, or a 5xx with no order returned) CANNOT be resolved from inside MCP: do NOT retry. get_orders/get_order are replica-backed and an order rejected before acceptance is never written to them, so a missing row is not evidence the order failed. Check whether the position or balance moved, and otherwise report the ambiguity to the user rather than resubmitting. A retry here cannot double your exposure — replace names the original order id and a second attempt returns ORDER_NOT_FOUND once the first succeeded — but that code does not distinguish a landed replacement from an original that filled or was cancelled, so retrying still reports the wrong state.",inputSchema:S({orderId:y().describe("The order ID to replace"),price:y().optional().describe("New price as a decimal string"),quantity:y().optional().describe("New quantity as a decimal string"),postOnly:ue().optional().describe("Re-states maker-only intent for the replacement (nothing is inherited from the original order): rejected with a 400 carrying the structured error code 'POST_ONLY_WOULD_CROSS' if it would cross the book."),selfTradePreventionMode:H(["CANCEL_MAKER","CANCEL_TAKER","CANCEL_BOTH","SKIP"]).optional().describe("Re-states the per-order self-trade-prevention override for the replacement (nothing is inherited from the original order). Omitted, your wallet default applies, else the platform default CANCEL_MAKER."),clientOrderId:y().optional().describe("Client-assigned correlation handle for the replacement order, echoed back on order reads and order WebSocket events. Nothing is inherited from the original order — re-state it here to keep the handle across a requote. Up to 64 characters from A-Za-z0-9._:-. Not an idempotency key: it is claimed only while the order rests and is released on fill/cancel/expiry/rejection, so it cannot make a lost-response retry safe. Reconciling a lost response needs the order WebSocket stream, which is outside MCP — this server exposes no stream tool.")})},async({orderId:t,price:r,quantity:n,postOnly:o,selfTradePreventionMode:i,clientOrderId:s})=>{let c=await(await X()).trading.replaceOrder(t,{price:r,quantity:n,postOnly:o,selfTradePreventionMode:i,clientOrderId:s});return L(c)})}function Gq(e){jq(e),qq(e),Dq(e),Bq(e),zq(e),Lq(e),Hq(e),Fq(e),Uq(e)}function Vq(e){e.registerTool("vault_get_allowance",{description:"Check the current token allowance granted to the Monaco vault for a specific asset.",inputSchema:S({assetId:y().describe("The asset UUID to check allowance for")})},async({assetId:t})=>{let n=await(await X()).vault.getAllowance(t);return L({assetId:t,allowance:n.toString()})})}function Zq(e){e.registerTool("vault_approve",{description:"Approve the Monaco vault contract to spend tokens on your behalf. Required before depositing ERC20 tokens.",inputSchema:S({assetId:y().describe("The asset UUID to approve"),amount:y().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({assetId:t,amount:r})=>{let o=await(await X()).vault.approve(t,BigInt(r));return L({hash:o.hash,status:o.status})})}function Wq(e){e.registerTool("vault_deposit",{description:"Deposit tokens into the Monaco vault. Requires prior approval for ERC20 tokens (use vault_approve first). Set target to 'margin' to route the deposit straight into margin collateral instead of the spot wallet.",inputSchema:S({assetId:y().describe("The asset UUID to deposit"),amount:y().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)"),target:H(["spot","margin"]).optional().describe("Destination ledger: 'spot' (default) or 'margin' to route into margin collateral")})},async({assetId:t,amount:r,target:n})=>{let i=await(await X()).vault.deposit(t,BigInt(r),void 0,n);return L({hash:i.hash,status:i.status})})}function Kq(e){e.registerTool("get_pending_withdrawals",{description:"List your pending withdrawals still awaiting on-chain root confirmation.",inputSchema:S({page:M().optional().describe("Page number (1-based)"),pageSize:M().optional().describe("Items per page")})},async({page:t,pageSize:r})=>{let o=await(await X()).withdrawals.listPendingWithdrawals({page:t,pageSize:r});return L(o)})}function Yq(e){e.registerTool("vault_needs_approval",{description:"Check if approval is needed before depositing a specific amount of tokens.",inputSchema:S({assetId:y().describe("The asset UUID to check"),amount:y().regex(/^\d+$/,"Must be a non-negative integer string").describe("Amount to check as a raw integer string")})},async({assetId:t,amount:r})=>{let o=await(await X()).vault.needsApproval(t,BigInt(r));return L({assetId:t,amount:r,needs_approval:o})})}function Jq(e){e.registerTool("vault_withdraw",{description:"Withdraw tokens from the Monaco vault back to your wallet.",inputSchema:S({assetId:y().describe("The asset UUID to withdraw"),amount:y().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({assetId:t,amount:r})=>{let o=await(await X()).vault.withdraw(t,BigInt(r));return L({withdrawalIndex:o.withdrawalIndex,status:o.status,hash:o.hash})})}function Qq(e){Zq(e),Wq(e),Jq(e),Vq(e),Yq(e),Kq(e)}function kpe(e){let t=e.length-1,r=e[t];if(typeof r!=="function")return e;let n=rj(r);return[...e.slice(0,t),n]}function Rpe(e,t){let[r,...n]=t;if(!r||typeof r!=="object")return t;let o=U4(e);if(!o)return t;let i=r.annotations;return[{...r,annotations:{...o,...i}},...n]}function Xq(e,t,r){return new Proxy(e,{get(n,o,i){if(o==="registerTool")return(a,...c)=>{if(!G4(a,t))return;let d=Rpe(a,c);if(r&&H4(a))d=kpe(d);return n.registerTool(a,...d)};let s=Reflect.get(n,o,i);return typeof s==="function"?s.bind(n):s}})}function e7(e,t){let r={authenticated:t.authenticated,capability:t.capability,allow:t.allow??[],deny:t.deny??[],network:t.network},n=Xq(e,r,!1);if(Mq(n),jj(n),Xj(n),Hj(n),Nq(n),aq(n),Rq(n),t.authenticated){let o=Xq(e,r,!0);Gq(o),wq(o),Iq(o),mq(o),Nj(o),cj(o),Qq(o),ij(o,{network:t.network}),cq(o)}}if(typeof globalThis.crypto?.getRandomValues!=="function")globalThis.crypto=Ope;if(!globalThis.fetch)globalThis.fetch=_h,globalThis.Headers=Zr,globalThis.Request=Ti,globalThis.Response=Ar;if(!globalThis.WebSocket)globalThis.WebSocket=_1.default;async function Cpe(){let e=lc(),t=e.privateKey!==null,r=new Av({name:"monaco-mcp-server",version:S0.version});e7(r,{authenticated:t,network:e.network,capability:e.capability,allow:e.allow,deny:e.deny});let n=new kv;await r.connect(n),console.error(t?`Monaco MCP server running on stdio (network=${e.network}, capability=${e.capability}). Fund-movement and privilege tools require MONACO_CAPABILITY=full or an explicit MONACO_TOOL_ALLOWLIST entry.`:"Monaco MCP server running on stdio (public read-only mode — set MONACO_PRIVATE_KEY, MONACO_CLIENT_ID and MONACO_NETWORK to enable authenticated tools).")}Cpe().catch((e)=>{console.error("Fatal error:",e),process.exit(1)});
152
+ `).find((a)=>a.startsWith("data: "));if(!s)throw Error("No data in Mintlify MCP response");return JSON.parse(s.slice(6))}async function Ape(){if(bx)return;await Oq("initialize",{protocolVersion:"2025-03-26",capabilities:{},clientInfo:{name:"monaco-mcp-server",version:S0.version}},0)}async function Ipe(e){return await Ape(),(await Oq("tools/call",{name:Ppe,arguments:{query:e}},1))?.result}function Cq(e){e.registerTool("search_docs",{description:"Search the Monaco documentation for information about the protocol, SDK, trading, and development guides.",inputSchema:S({query:y().describe("The search query")})},async({query:t})=>{try{let r=await Ipe(t);if(r?.content&&Array.isArray(r.content))return{content:r.content};return L(r)}catch(r){return lx(`Search failed: ${r instanceof Error?r.message:String(r)}`)}})}function Mq(e){Cq(e)}function $q(e){e.registerTool("get_trades",{description:"Get historical trades for a trading pair. Returns recent trades sorted by execution time (newest first).",inputSchema:S({tradingPairId:y().describe("Trading pair UUID"),page:M().optional().describe("Page number (starts from 1, default: 1)"),pageSize:M().optional().describe("Max number of records to return (default: 25, max: 100)")})},async({tradingPairId:t,page:r,pageSize:n})=>{let i=await Ze().trades.getTrades(t,{page:r,pageSize:n});return L(i)})}function Nq(e){$q(e)}function zq(e){e.registerTool("batch_cancel_all_orders",{description:"Cancel EVERY one of your open orders in one call. Destructive and unfiltered by default — with no tradingPairId it cancels your entire open-order book across all pairs; pass a tradingPairId to limit it to that pair.",inputSchema:S({tradingPairId:y().optional().describe("Optional trading pair UUID to limit cancellation to")})},async({tradingPairId:t})=>{let n=await(await X()).trading.batchCancelAll(t);return L(n)})}function Bq(e){e.registerTool("batch_cancel_orders",{description:"Cancel multiple orders by their IDs in a single request. Non-atomic and best-effort: each order is cancelled independently, so a failed leg does not stop the others. Inspect the per-order results and reconcile (retry or re-check) any that did not cancel.",inputSchema:S({orderIds:Ie(y()).describe("Array of order IDs to cancel")})},async({orderIds:t})=>{let n=await(await X()).trading.batchCancel(t);return L(n)})}function Lq(e){e.registerTool("batch_close_all_positions",{description:"Close all open perpetual positions with MARKET reduce-only orders ('panic close'), optionally filtered to a specific trading pair. Best-effort: each position closes independently and per-position failures are reported in the result.",inputSchema:S({tradingPairId:y().optional().describe("Optional trading pair UUID to limit the close to"),slippageToleranceBps:M().int().optional().describe("Optional slippage tolerance (basis points) applied to each close")})},async({tradingPairId:t,slippageToleranceBps:r})=>{let o=await(await X()).positions.batchCloseAllPositions({tradingPairId:t,slippageToleranceBps:r});return L(o)})}function Dq(e){e.registerTool("cancel_order",{description:"Cancel an open order by its ID.",inputSchema:S({orderId:y().describe("The order ID to cancel")})},async({orderId:t})=>{let n=await(await X()).trading.cancelOrder(t);return L(n)})}function Uq(e){e.registerTool("get_order",{description:"Get detailed information about a specific order by its ID.",inputSchema:S({orderId:y().describe("The order ID to look up")})},async({orderId:t})=>{let n=await(await X()).trading.getOrder(t);return L(n)})}function Fq(e){e.registerTool("get_orders",{description:"Get a cursor-paginated list of orders with optional filters by status and trading pair. Omit both page and pageToken for the newest orders; pass the previous response's nextPageToken to fetch the next page. A response with zero orders and an empty nextPageToken means the walk is exhausted. Both modes return a bounded item count: total and totalPages are populated, exact up to a server ceiling and then reported as the ceiling with totalCapped=true (a lower bound). Only page is 0 in cursor mode.",inputSchema:S({status:H(Ol).optional().describe("Filter by order status (e.g. SUBMITTED, FILLED, CANCELLED)"),tradingPairId:y().optional().describe("Filter by trading pair UUID"),page:M().optional().describe("Deprecated: page number for legacy offset pagination, which only sees recent history. Use pageToken instead."),pageSize:M().optional().describe("Orders per page (default: 10; max 100 in legacy page mode, up to 1000 with pageToken)"),pageToken:y().optional().describe("Pagination cursor from a previous response's nextPageToken. Omit it (and page) to start from the newest orders.")})},async({status:t,tradingPairId:r,page:n,pageSize:o,pageToken:i})=>{let a=await(await X()).trading.getPaginatedOrders({status:t,tradingPairId:r,page:n,pageSize:o,pageToken:i});return L(a)})}function jq(e){e.registerTool("place_limit_order",{description:"Place a limit order on Monaco. With idempotencyKey, retry the same submission safely within 24 hours of acceptance; different order details conflict. Limit orders execute only when the market reaches the specified price. The SDK generates a key if omitted. Calling this tool again without the original key starts a new submission and is not idempotent: do NOT retry an ambiguous outcome with a new key. Supply and retain your own idempotencyKey to recover across tool calls. get_orders/get_order are replica-backed; a missing row does not prove that an order failed. If the original key is unavailable, report the ambiguity.",inputSchema:S({tradingPairId:y().describe("Trading pair UUID"),side:H(["BUY","SELL"]).describe("Order side"),quantity:y().describe("Order quantity as a decimal string"),price:y().describe("Limit price as a decimal string"),tradingMode:H(["SPOT","MARGIN"]).optional().describe("Trading mode (default: SPOT)"),timeInForce:H(["GTC","IOC","FOK"]).optional().describe("Time in force (default: GTC)"),expirationDate:y().optional().describe("Expiration date for GTC orders (ISO 8601)"),marginAccountId:y().optional().describe("Parent margin account UUID for MARGIN orders"),marginMode:H(["ISOLATED","CROSS"]).optional().describe("Risk bucket mode for MARGIN orders: ISOLATED (default) or CROSS"),riskBucketId:y().optional().describe("Existing isolated risk bucket UUID for risk-bucket-scoped MARGIN orders"),riskBucketCollateral:y().optional().describe("Collateral to allocate into a new isolated risk bucket"),strategyKey:y().optional().describe("Optional client strategy key"),positionSide:H(["LONG","SHORT"]).optional().describe("Deprecated compatibility field; order side is authoritative (BUY=LONG, SELL=SHORT)"),leverage:y().optional().describe("Leverage as a decimal string, required for normal MARGIN orders (ignored for reduce-only)"),reduceOnly:ue().optional().describe("Whether the order can only reduce existing exposure"),postOnly:ue().optional().describe("Maker-only: rejected with a 400 carrying the structured error code 'POST_ONLY_WOULD_CROSS' if this order would cross the book. GTC time in force only; rejected with IOC/FOK."),selfTradePreventionMode:H(["CANCEL_MAKER","CANCEL_TAKER","CANCEL_BOTH","SKIP"]).optional().describe("Per-order self-trade-prevention override for matches against your own resting orders. CANCEL_MAKER cancels your resting orders and keeps matching; CANCEL_TAKER cancels this order's remainder at the first self-touch; CANCEL_BOTH does both; SKIP trades around your orders and cancels a remainder that would cross them. Omitted, your wallet default applies, else the platform default CANCEL_MAKER. Echoed back as selfTradePreventionMode on order reads."),idempotencyKey:y().min(1).max(64).regex(/^[A-Za-z0-9._:-]+$/).optional().describe("Stable identity for this submission; the SDK generates a key if omitted. Supply and retain a key for recovery across tool calls. Reuse with the same order details to safely retry a lost response within 24 hours of acceptance, including after a fill. Use a fresh key for each new order. Different details conflict; after 24 hours this key may execute again. Separate from clientOrderId."),clientOrderId:y().optional().describe("Client-assigned correlation handle, echoed back on order reads and order WebSocket events. Up to 64 characters from A-Za-z0-9._:-. Not an idempotency key: it is claimed only while the order rests, and is released on fill/cancel/expiry/rejection, so a marketable order that fills on arrival never takes it. Never resubmit on a lost response without the original idempotencyKey — a resubmission can execute a second time. Reconciling a lost response needs the order WebSocket stream (it carries the handle even for orders that never rested), which is outside MCP — this server exposes no stream tool, and get_orders is replica-backed and can omit an order that did land.")})},async({tradingPairId:t,side:r,quantity:n,price:o,tradingMode:i,timeInForce:s,expirationDate:a,marginAccountId:c,marginMode:d,riskBucketId:l,riskBucketCollateral:p,strategyKey:m,positionSide:h,leverage:b,reduceOnly:x,postOnly:_,selfTradePreventionMode:w,clientOrderId:A,idempotencyKey:v})=>{let P=await(await X()).trading.placeLimitOrder(t,r,n,o,{tradingMode:i,timeInForce:s,expirationDate:a,marginAccountId:c,marginMode:d,riskBucketId:l,riskBucketCollateral:p,strategyKey:m,positionSide:h,leverage:b,reduceOnly:x,postOnly:_,selfTradePreventionMode:w,clientOrderId:A,idempotencyKey:v});return L(P)})}function qq(e){e.registerTool("place_market_order",{description:"Place a market order on Monaco. With idempotencyKey, retry the same submission safely within 24 hours of acceptance; different order details conflict. It executes immediately against resting liquidity, but only inside a mandatory 1,000 bps (10%) server-side protective price band anchored to the mark/last-trade reference price. Fills stop at the edge of the band, so a market order may partially fill and cancel the remainder, be rejected when no liquidity sits inside the band, or be rejected when the market has no trustworthy price anchor. Optional slippageTolerance is merged tighter-wins with this band: it can only TIGHTEN execution, never widen past the mandatory band; omitting it applies the full 1,000 bps band. The SDK generates a key if omitted. Calling this tool again without the original key starts a new submission and is not idempotent: do NOT retry an ambiguous outcome with a new key. Supply and retain your own idempotencyKey to recover across tool calls. get_orders/get_order are replica-backed; a missing row does not prove that an order failed. If the original key is unavailable, report the ambiguity.",inputSchema:S({tradingPairId:y().describe("Trading pair UUID"),side:H(["BUY","SELL"]).describe("Order side"),quantity:y().describe("Order quantity as a decimal string"),tradingMode:H(["SPOT","MARGIN"]).optional().describe("Trading mode (default: SPOT)"),slippageTolerance:M().optional().describe("Tightens the mandatory 1,000 bps band, as a decimal (e.g. 0.01 for 1%; 0 for best price only). Can only tighten, never widen; omit to apply the full band."),marginAccountId:y().optional().describe("Parent margin account UUID for MARGIN orders"),marginMode:H(["ISOLATED","CROSS"]).optional().describe("Risk bucket mode for MARGIN orders: ISOLATED (default) or CROSS"),riskBucketId:y().optional().describe("Existing isolated risk bucket UUID for risk-bucket-scoped MARGIN orders"),riskBucketCollateral:y().optional().describe("Collateral to allocate into a new isolated risk bucket"),strategyKey:y().optional().describe("Optional client strategy key"),positionSide:H(["LONG","SHORT"]).optional().describe("Deprecated compatibility field; order side is authoritative (BUY=LONG, SELL=SHORT)"),leverage:y().optional().describe("Leverage as a decimal string, required for normal MARGIN orders (ignored for reduce-only)"),reduceOnly:ue().optional().describe("Whether the order can only reduce existing exposure"),idempotencyKey:y().min(1).max(64).regex(/^[A-Za-z0-9._:-]+$/).optional().describe("Stable identity for this submission; the SDK generates a key if omitted. Supply and retain a key for recovery across tool calls. Reuse with the same order details to safely retry a lost response within 24 hours of acceptance, including after a fill. Use a fresh key for each new order. Different details conflict; after 24 hours this key may execute again. Separate from clientOrderId."),clientOrderId:y().optional().describe("Client-assigned correlation handle, echoed back on order reads and order WebSocket events. Up to 64 characters from A-Za-z0-9._:-. Not an idempotency key. A market order never rests, so it never claims the handle and no duplicate-submission guard can fire for it: Without idempotencyKey, NEVER resubmit a market order on a lost response — it can execute again and increase your exposure (or reject, or fill at a different price; you cannot tell which in advance). Reconciling a lost response needs the order WebSocket stream (it carries the handle even for orders that never rested), which is outside MCP — this server exposes no stream tool, and get_orders is replica-backed and can omit an order that did land.")})},async({tradingPairId:t,side:r,quantity:n,tradingMode:o,slippageTolerance:i,marginAccountId:s,marginMode:a,riskBucketId:c,riskBucketCollateral:d,strategyKey:l,positionSide:p,leverage:m,reduceOnly:h,clientOrderId:b,idempotencyKey:x})=>{let w=await(await X()).trading.placeMarketOrder(t,r,n,{tradingMode:o,slippageTolerance:i,marginAccountId:s,marginMode:a,riskBucketId:c,riskBucketCollateral:d,strategyKey:l,positionSide:p,leverage:m,reduceOnly:h,clientOrderId:b,idempotencyKey:x});return L(w)})}function Hq(e){e.registerTool("replace_order",{description:"Replace an existing order with new price and/or quantity. The order must be open. "+"Not idempotent, and MCP has no order-stream tool, so an ambiguous outcome (timeout, network error, or a 5xx with no order returned) CANNOT be resolved from inside MCP: do NOT retry. get_orders/get_order are replica-backed and an order rejected before acceptance is never written to them, so a missing row is not evidence the order failed. Check whether the position or balance moved, and otherwise report the ambiguity to the user rather than resubmitting. A retry here cannot double your exposure — replace names the original order id and a second attempt returns ORDER_NOT_FOUND once the first succeeded — but that code does not distinguish a landed replacement from an original that filled or was cancelled, so retrying still reports the wrong state.",inputSchema:S({orderId:y().describe("The order ID to replace"),price:y().optional().describe("New price as a decimal string"),quantity:y().optional().describe("New quantity as a decimal string"),postOnly:ue().optional().describe("Re-states maker-only intent for the replacement (nothing is inherited from the original order): rejected with a 400 carrying the structured error code 'POST_ONLY_WOULD_CROSS' if it would cross the book."),selfTradePreventionMode:H(["CANCEL_MAKER","CANCEL_TAKER","CANCEL_BOTH","SKIP"]).optional().describe("Re-states the per-order self-trade-prevention override for the replacement (nothing is inherited from the original order). Omitted, your wallet default applies, else the platform default CANCEL_MAKER."),clientOrderId:y().optional().describe("Client-assigned correlation handle for the replacement order, echoed back on order reads and order WebSocket events. Nothing is inherited from the original order — re-state it here to keep the handle across a requote. Up to 64 characters from A-Za-z0-9._:-. Not an idempotency key: it is claimed only while the order rests and is released on fill/cancel/expiry/rejection, so it cannot make a lost-response retry safe. Reconciling a lost response needs the order WebSocket stream, which is outside MCP — this server exposes no stream tool.")})},async({orderId:t,price:r,quantity:n,postOnly:o,selfTradePreventionMode:i,clientOrderId:s})=>{let c=await(await X()).trading.replaceOrder(t,{price:r,quantity:n,postOnly:o,selfTradePreventionMode:i,clientOrderId:s});return L(c)})}function Gq(e){jq(e),qq(e),Dq(e),Bq(e),zq(e),Lq(e),Hq(e),Fq(e),Uq(e)}function Vq(e){e.registerTool("vault_get_allowance",{description:"Check the current token allowance granted to the Monaco vault for a specific asset.",inputSchema:S({assetId:y().describe("The asset UUID to check allowance for")})},async({assetId:t})=>{let n=await(await X()).vault.getAllowance(t);return L({assetId:t,allowance:n.toString()})})}function Zq(e){e.registerTool("vault_approve",{description:"Approve the Monaco vault contract to spend tokens on your behalf. Required before depositing ERC20 tokens.",inputSchema:S({assetId:y().describe("The asset UUID to approve"),amount:y().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({assetId:t,amount:r})=>{let o=await(await X()).vault.approve(t,BigInt(r));return L({hash:o.hash,status:o.status})})}function Wq(e){e.registerTool("vault_deposit",{description:"Deposit tokens into the Monaco vault. Requires prior approval for ERC20 tokens (use vault_approve first). Set target to 'margin' to route the deposit straight into margin collateral instead of the spot wallet.",inputSchema:S({assetId:y().describe("The asset UUID to deposit"),amount:y().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)"),target:H(["spot","margin"]).optional().describe("Destination ledger: 'spot' (default) or 'margin' to route into margin collateral")})},async({assetId:t,amount:r,target:n})=>{let i=await(await X()).vault.deposit(t,BigInt(r),void 0,n);return L({hash:i.hash,status:i.status})})}function Kq(e){e.registerTool("get_pending_withdrawals",{description:"List your pending withdrawals still awaiting on-chain root confirmation.",inputSchema:S({page:M().optional().describe("Page number (1-based)"),pageSize:M().optional().describe("Items per page")})},async({page:t,pageSize:r})=>{let o=await(await X()).withdrawals.listPendingWithdrawals({page:t,pageSize:r});return L(o)})}function Yq(e){e.registerTool("vault_needs_approval",{description:"Check if approval is needed before depositing a specific amount of tokens.",inputSchema:S({assetId:y().describe("The asset UUID to check"),amount:y().regex(/^\d+$/,"Must be a non-negative integer string").describe("Amount to check as a raw integer string")})},async({assetId:t,amount:r})=>{let o=await(await X()).vault.needsApproval(t,BigInt(r));return L({assetId:t,amount:r,needs_approval:o})})}function Jq(e){e.registerTool("vault_withdraw",{description:"Withdraw tokens from the Monaco vault back to your wallet.",inputSchema:S({assetId:y().describe("The asset UUID to withdraw"),amount:y().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({assetId:t,amount:r})=>{let o=await(await X()).vault.withdraw(t,BigInt(r));return L({withdrawalIndex:o.withdrawalIndex,status:o.status,hash:o.hash})})}function Qq(e){Zq(e),Wq(e),Jq(e),Vq(e),Yq(e),Kq(e)}function kpe(e){let t=e.length-1,r=e[t];if(typeof r!=="function")return e;let n=rj(r);return[...e.slice(0,t),n]}function Rpe(e,t){let[r,...n]=t;if(!r||typeof r!=="object")return t;let o=U4(e);if(!o)return t;let i=r.annotations;return[{...r,annotations:{...o,...i}},...n]}function Xq(e,t,r){return new Proxy(e,{get(n,o,i){if(o==="registerTool")return(a,...c)=>{if(!G4(a,t))return;let d=Rpe(a,c);if(r&&H4(a))d=kpe(d);return n.registerTool(a,...d)};let s=Reflect.get(n,o,i);return typeof s==="function"?s.bind(n):s}})}function e7(e,t){let r={authenticated:t.authenticated,capability:t.capability,allow:t.allow??[],deny:t.deny??[],network:t.network},n=Xq(e,r,!1);if(Mq(n),jj(n),Xj(n),Hj(n),Nq(n),aq(n),Rq(n),t.authenticated){let o=Xq(e,r,!0);Gq(o),wq(o),Iq(o),mq(o),Nj(o),cj(o),Qq(o),ij(o,{network:t.network}),cq(o)}}if(typeof globalThis.crypto?.getRandomValues!=="function")globalThis.crypto=Ope;if(!globalThis.fetch)globalThis.fetch=_h,globalThis.Headers=Zr,globalThis.Request=Ti,globalThis.Response=Ar;if(!globalThis.WebSocket)globalThis.WebSocket=_1.default;async function Cpe(){let e=lc(),t=e.privateKey!==null,r=new Av({name:"monaco-mcp-server",version:S0.version});e7(r,{authenticated:t,network:e.network,capability:e.capability,allow:e.allow,deny:e.deny});let n=new kv;await r.connect(n),console.error(t?`Monaco MCP server running on stdio (network=${e.network}, capability=${e.capability}). Fund-movement and privilege tools require MONACO_CAPABILITY=full or an explicit MONACO_TOOL_ALLOWLIST entry.`:"Monaco MCP server running on stdio (public read-only mode — set MONACO_PRIVATE_KEY, MONACO_CLIENT_ID and MONACO_NETWORK to enable authenticated tools).")}Cpe().catch((e)=>{console.error("Fatal error:",e),process.exit(1)});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@0xmonaco/mcp-server",
3
- "version": "1.0.62",
3
+ "version": "1.0.64",
4
4
  "type": "module",
5
5
  "homepage": "https://docs.0xmonaco.com/sdk/typescript",
6
6
  "description": "MCP server for the Monaco SDK",
@@ -21,8 +21,8 @@
21
21
  },
22
22
  "author": "@codebycarson",
23
23
  "dependencies": {
24
- "@0xmonaco/core": "1.0.62",
25
- "@0xmonaco/types": "1.0.62",
24
+ "@0xmonaco/core": "1.0.64",
25
+ "@0xmonaco/types": "1.0.64",
26
26
  "@modelcontextprotocol/sdk": "^1.29.0",
27
27
  "node-fetch": "^3.3.2",
28
28
  "viem": "^2.56.3",