@bulletxyz/bullet-sdk 0.49.8 → 0.49.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/bullet_wasm_bg.wasm +0 -0
- package/dist/browser/index.js +175 -103
- package/dist/browser/index.js.map +7 -6
- package/dist/node/bullet_wasm_bg.wasm +0 -0
- package/dist/node/index.js +175 -103
- package/dist/node/index.js.map +7 -6
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types/bullet-wasm/wasm-glue.d.ts +4 -4
- package/dist/types/client.d.ts +1 -1
- package/dist/types/client.d.ts.map +1 -1
- package/dist/types/rollupTypes.d.ts +4 -4
- package/dist/types/rollupTypes.d.ts.map +1 -1
- package/dist/types/types.d.ts +6 -1
- package/dist/types/types.d.ts.map +1 -1
- package/dist/types/zod-types/rest.d.ts +1822 -473
- package/dist/types/zod-types/rest.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1,31 +1,32 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../../node_modules/bech32/dist/index.js", "../../../node_modules/eventemitter3/index.js", "../../src/bullet-wasm/wasm-glue.js", "../../src/bullet-wasm/loader.ts", "../../../node_modules/@noble/hashes/esm/utils.js", "../../../node_modules/@noble/hashes/esm/_md.js", "../../../node_modules/@noble/hashes/esm/sha2.js", "../../../node_modules/@sovereign-sdk/modules/dist/index.mjs", "../../src/client.ts", "../../src/constants.ts", "../../src/error.ts", "../../src/utils.ts", "../../../node_modules/eventemitter3/index.mjs", "../../src/orderbook.ts", "../../src/zod-types/ws.ts", "../../src/zod-types/index.ts", "../../src/websocket.ts", "../../src/zod-types/rest.ts", "../../src/zod-types/wasm.ts", "../../src/wallet/wallet.ts", "../../src/wallet/ledgerWallet.ts", "../../src/browser.ts"],
|
|
3
|
+
"sources": ["../../../node_modules/bech32/dist/index.js", "../../../node_modules/eventemitter3/index.js", "../../src/bullet-wasm/wasm-glue.js", "../../src/bullet-wasm/loader.ts", "../../../node_modules/@noble/hashes/esm/utils.js", "../../../node_modules/@noble/hashes/esm/_md.js", "../../../node_modules/@noble/hashes/esm/sha2.js", "../../../node_modules/@sovereign-sdk/modules/dist/index.mjs", "../../src/client.ts", "../../src/constants.ts", "../../src/error.ts", "../../src/types.ts", "../../src/utils.ts", "../../../node_modules/eventemitter3/index.mjs", "../../src/orderbook.ts", "../../src/zod-types/ws.ts", "../../src/zod-types/index.ts", "../../src/websocket.ts", "../../src/zod-types/rest.ts", "../../src/zod-types/wasm.ts", "../../src/wallet/wallet.ts", "../../src/wallet/ledgerWallet.ts", "../../src/browser.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.bech32m = exports.bech32 = void 0;\nconst ALPHABET = 'qpzry9x8gf2tvdw0s3jn54khce6mua7l';\nconst ALPHABET_MAP = {};\nfor (let z = 0; z < ALPHABET.length; z++) {\n const x = ALPHABET.charAt(z);\n ALPHABET_MAP[x] = z;\n}\nfunction polymodStep(pre) {\n const b = pre >> 25;\n return (((pre & 0x1ffffff) << 5) ^\n (-((b >> 0) & 1) & 0x3b6a57b2) ^\n (-((b >> 1) & 1) & 0x26508e6d) ^\n (-((b >> 2) & 1) & 0x1ea119fa) ^\n (-((b >> 3) & 1) & 0x3d4233dd) ^\n (-((b >> 4) & 1) & 0x2a1462b3));\n}\nfunction prefixChk(prefix) {\n let chk = 1;\n for (let i = 0; i < prefix.length; ++i) {\n const c = prefix.charCodeAt(i);\n if (c < 33 || c > 126)\n return 'Invalid prefix (' + prefix + ')';\n chk = polymodStep(chk) ^ (c >> 5);\n }\n chk = polymodStep(chk);\n for (let i = 0; i < prefix.length; ++i) {\n const v = prefix.charCodeAt(i);\n chk = polymodStep(chk) ^ (v & 0x1f);\n }\n return chk;\n}\nfunction convert(data, inBits, outBits, pad) {\n let value = 0;\n let bits = 0;\n const maxV = (1 << outBits) - 1;\n const result = [];\n for (let i = 0; i < data.length; ++i) {\n value = (value << inBits) | data[i];\n bits += inBits;\n while (bits >= outBits) {\n bits -= outBits;\n result.push((value >> bits) & maxV);\n }\n }\n if (pad) {\n if (bits > 0) {\n result.push((value << (outBits - bits)) & maxV);\n }\n }\n else {\n if (bits >= inBits)\n return 'Excess padding';\n if ((value << (outBits - bits)) & maxV)\n return 'Non-zero padding';\n }\n return result;\n}\nfunction toWords(bytes) {\n return convert(bytes, 8, 5, true);\n}\nfunction fromWordsUnsafe(words) {\n const res = convert(words, 5, 8, false);\n if (Array.isArray(res))\n return res;\n}\nfunction fromWords(words) {\n const res = convert(words, 5, 8, false);\n if (Array.isArray(res))\n return res;\n throw new Error(res);\n}\nfunction getLibraryFromEncoding(encoding) {\n let ENCODING_CONST;\n if (encoding === 'bech32') {\n ENCODING_CONST = 1;\n }\n else {\n ENCODING_CONST = 0x2bc830a3;\n }\n function encode(prefix, words, LIMIT) {\n LIMIT = LIMIT || 90;\n if (prefix.length + 7 + words.length > LIMIT)\n throw new TypeError('Exceeds length limit');\n prefix = prefix.toLowerCase();\n // determine chk mod\n let chk = prefixChk(prefix);\n if (typeof chk === 'string')\n throw new Error(chk);\n let result = prefix + '1';\n for (let i = 0; i < words.length; ++i) {\n const x = words[i];\n if (x >> 5 !== 0)\n throw new Error('Non 5-bit word');\n chk = polymodStep(chk) ^ x;\n result += ALPHABET.charAt(x);\n }\n for (let i = 0; i < 6; ++i) {\n chk = polymodStep(chk);\n }\n chk ^= ENCODING_CONST;\n for (let i = 0; i < 6; ++i) {\n const v = (chk >> ((5 - i) * 5)) & 0x1f;\n result += ALPHABET.charAt(v);\n }\n return result;\n }\n function __decode(str, LIMIT) {\n LIMIT = LIMIT || 90;\n if (str.length < 8)\n return str + ' too short';\n if (str.length > LIMIT)\n return 'Exceeds length limit';\n // don't allow mixed case\n const lowered = str.toLowerCase();\n const uppered = str.toUpperCase();\n if (str !== lowered && str !== uppered)\n return 'Mixed-case string ' + str;\n str = lowered;\n const split = str.lastIndexOf('1');\n if (split === -1)\n return 'No separator character for ' + str;\n if (split === 0)\n return 'Missing prefix for ' + str;\n const prefix = str.slice(0, split);\n const wordChars = str.slice(split + 1);\n if (wordChars.length < 6)\n return 'Data too short';\n let chk = prefixChk(prefix);\n if (typeof chk === 'string')\n return chk;\n const words = [];\n for (let i = 0; i < wordChars.length; ++i) {\n const c = wordChars.charAt(i);\n const v = ALPHABET_MAP[c];\n if (v === undefined)\n return 'Unknown character ' + c;\n chk = polymodStep(chk) ^ v;\n // not in the checksum?\n if (i + 6 >= wordChars.length)\n continue;\n words.push(v);\n }\n if (chk !== ENCODING_CONST)\n return 'Invalid checksum for ' + str;\n return { prefix, words };\n }\n function decodeUnsafe(str, LIMIT) {\n const res = __decode(str, LIMIT);\n if (typeof res === 'object')\n return res;\n }\n function decode(str, LIMIT) {\n const res = __decode(str, LIMIT);\n if (typeof res === 'object')\n return res;\n throw new Error(res);\n }\n return {\n decodeUnsafe,\n decode,\n encode,\n toWords,\n fromWordsUnsafe,\n fromWords,\n };\n}\nexports.bech32 = getLibraryFromEncoding('bech32');\nexports.bech32m = getLibraryFromEncoding('bech32m');\n",
|
|
6
6
|
"'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n",
|
|
7
|
-
"/* @ts-self-types=\"./bullet_wasm.d.ts\" */\n\nexport class BulletWasm {\n __destroy_into_raw() {\n const ptr = this.__wbg_ptr;\n this.__wbg_ptr = 0;\n BulletWasmFinalization.unregister(this);\n return ptr;\n }\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_bulletwasm_free(ptr, 0);\n }\n /**\n * @param {MarginMode} margin_mode\n * @param {any} user_account\n * @param {boolean} conservative\n * @param {EquityType} equity_type\n * @param {any} risk_engine\n * @returns {string}\n */\n static calculate_account_equity(margin_mode, user_account, conservative, equity_type, risk_engine) {\n let deferred3_0;\n let deferred3_1;\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n _assertClass(margin_mode, MarginMode);\n var ptr0 = margin_mode.__destroy_into_raw();\n wasm.bulletwasm_calculate_account_equity(retptr, ptr0, addHeapObject(user_account), conservative, (__wbindgen_enum_EquityType.indexOf(equity_type) + 1 || 4) - 1, addHeapObject(risk_engine));\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);\n var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);\n var ptr2 = r0;\n var len2 = r1;\n if (r3) {\n ptr2 = 0; len2 = 0;\n throw takeObject(r2);\n }\n deferred3_0 = ptr2;\n deferred3_1 = len2;\n return getStringFromWasm0(ptr2, len2);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n wasm.__wbindgen_export4(deferred3_0, deferred3_1, 1);\n }\n }\n /**\n * @param {MarginMode} margin_mode\n * @param {any} user_account\n * @param {any} risk_engine\n * @returns {string}\n */\n static calculate_account_leverage(margin_mode, user_account, risk_engine) {\n let deferred3_0;\n let deferred3_1;\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n _assertClass(margin_mode, MarginMode);\n var ptr0 = margin_mode.__destroy_into_raw();\n wasm.bulletwasm_calculate_account_leverage(retptr, ptr0, addHeapObject(user_account), addHeapObject(risk_engine));\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);\n var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);\n var ptr2 = r0;\n var len2 = r1;\n if (r3) {\n ptr2 = 0; len2 = 0;\n throw takeObject(r2);\n }\n deferred3_0 = ptr2;\n deferred3_1 = len2;\n return getStringFromWasm0(ptr2, len2);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n wasm.__wbindgen_export4(deferred3_0, deferred3_1, 1);\n }\n }\n /**\n * @param {MarginMode} margin_mode\n * @param {any} user_account\n * @param {boolean} conservative\n * @param {MarginType} margin_type\n * @param {any} risk_engine\n * @returns {string}\n */\n static calculate_available_margin(margin_mode, user_account, conservative, margin_type, risk_engine) {\n let deferred3_0;\n let deferred3_1;\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n _assertClass(margin_mode, MarginMode);\n var ptr0 = margin_mode.__destroy_into_raw();\n wasm.bulletwasm_calculate_available_margin(retptr, ptr0, addHeapObject(user_account), conservative, (__wbindgen_enum_MarginType.indexOf(margin_type) + 1 || 3) - 1, addHeapObject(risk_engine));\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);\n var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);\n var ptr2 = r0;\n var len2 = r1;\n if (r3) {\n ptr2 = 0; len2 = 0;\n throw takeObject(r2);\n }\n deferred3_0 = ptr2;\n deferred3_1 = len2;\n return getStringFromWasm0(ptr2, len2);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n wasm.__wbindgen_export4(deferred3_0, deferred3_1, 1);\n }\n }\n /**\n * @param {any} borrow_lend_market\n * @returns {any}\n */\n static calculate_borrow_lend_additional_metadata(borrow_lend_market) {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n wasm.bulletwasm_calculate_borrow_lend_additional_metadata(retptr, addHeapObject(borrow_lend_market));\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);\n if (r2) {\n throw takeObject(r1);\n }\n return takeObject(r0);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * @param {any} user_accounts\n * @param {any} risk_engine\n * @param {boolean} use_weighted_equity\n * @returns {any}\n */\n static calculate_cross_margin_account_summary_batch(user_accounts, risk_engine, use_weighted_equity) {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n wasm.bulletwasm_calculate_cross_margin_account_summary_batch(retptr, addHeapObject(user_accounts), addHeapObject(risk_engine), use_weighted_equity);\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);\n if (r2) {\n throw takeObject(r1);\n }\n return takeObject(r0);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * @param {MarginMode} margin_mode\n * @param {any} user_account\n * @param {number} market_id\n * @param {number} base_asset_id\n * @param {any} risk_engine\n * @returns {string}\n */\n static calculate_estimated_liquidation_price(margin_mode, user_account, market_id, base_asset_id, risk_engine) {\n let deferred3_0;\n let deferred3_1;\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n _assertClass(margin_mode, MarginMode);\n var ptr0 = margin_mode.__destroy_into_raw();\n wasm.bulletwasm_calculate_estimated_liquidation_price(retptr, ptr0, addHeapObject(user_account), market_id, base_asset_id, addHeapObject(risk_engine));\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);\n var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);\n var ptr2 = r0;\n var len2 = r1;\n if (r3) {\n ptr2 = 0; len2 = 0;\n throw takeObject(r2);\n }\n deferred3_0 = ptr2;\n deferred3_1 = len2;\n return getStringFromWasm0(ptr2, len2);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n wasm.__wbindgen_export4(deferred3_0, deferred3_1, 1);\n }\n }\n /**\n * @param {MarginMode} margin_mode\n * @param {any} user_account\n * @param {any} risk_engine\n * @returns {string}\n */\n static calculate_force_cancel_risk_percentage(margin_mode, user_account, risk_engine) {\n let deferred3_0;\n let deferred3_1;\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n _assertClass(margin_mode, MarginMode);\n var ptr0 = margin_mode.__destroy_into_raw();\n wasm.bulletwasm_calculate_force_cancel_risk_percentage(retptr, ptr0, addHeapObject(user_account), addHeapObject(risk_engine));\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);\n var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);\n var ptr2 = r0;\n var len2 = r1;\n if (r3) {\n ptr2 = 0; len2 = 0;\n throw takeObject(r2);\n }\n deferred3_0 = ptr2;\n deferred3_1 = len2;\n return getStringFromWasm0(ptr2, len2);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n wasm.__wbindgen_export4(deferred3_0, deferred3_1, 1);\n }\n }\n /**\n * @param {MarginMode} margin_mode\n * @param {any} user_account\n * @param {any} risk_engine\n * @returns {string}\n */\n static calculate_liquidation_risk_percentage(margin_mode, user_account, risk_engine) {\n let deferred3_0;\n let deferred3_1;\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n _assertClass(margin_mode, MarginMode);\n var ptr0 = margin_mode.__destroy_into_raw();\n wasm.bulletwasm_calculate_liquidation_risk_percentage(retptr, ptr0, addHeapObject(user_account), addHeapObject(risk_engine));\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);\n var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);\n var ptr2 = r0;\n var len2 = r1;\n if (r3) {\n ptr2 = 0; len2 = 0;\n throw takeObject(r2);\n }\n deferred3_0 = ptr2;\n deferred3_1 = len2;\n return getStringFromWasm0(ptr2, len2);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n wasm.__wbindgen_export4(deferred3_0, deferred3_1, 1);\n }\n }\n /**\n * @param {MarginMode} margin_mode\n * @param {any} user_account\n * @param {any} risk_engine\n * @returns {any}\n */\n static calculate_margin_balance(margin_mode, user_account, risk_engine) {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n _assertClass(margin_mode, MarginMode);\n var ptr0 = margin_mode.__destroy_into_raw();\n wasm.bulletwasm_calculate_margin_balance(retptr, ptr0, addHeapObject(user_account), addHeapObject(risk_engine));\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);\n if (r2) {\n throw takeObject(r1);\n }\n return takeObject(r0);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * Calculates the maximum amount that can be borrowed for a given asset\n * @param initial_liability_weight The initial liability weight for the market must be passed in separately since the user may not have a spot ledger for this asset yet\n * @param {number} asset_id\n * @param {any} user_account\n * @param {any} risk_engine\n * @returns {string}\n */\n static calculate_max_borrow_amount(asset_id, user_account, risk_engine) {\n let deferred2_0;\n let deferred2_1;\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n wasm.bulletwasm_calculate_max_borrow_amount(retptr, asset_id, addHeapObject(user_account), addHeapObject(risk_engine));\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);\n var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);\n var ptr1 = r0;\n var len1 = r1;\n if (r3) {\n ptr1 = 0; len1 = 0;\n throw takeObject(r2);\n }\n deferred2_0 = ptr1;\n deferred2_1 = len1;\n return getStringFromWasm0(ptr1, len1);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n wasm.__wbindgen_export4(deferred2_0, deferred2_1, 1);\n }\n }\n /**\n * @param {MarginMode} margin_mode\n * @param {number} market_id\n * @param {string} price\n * @param {Side} side\n * @param {OrderType} order_type\n * @param {boolean} reduce_only\n * @param {any} user_account\n * @param {any} risk_engine\n * @param {any} orderbook\n * @param {number} n_iterations\n * @param {string} error_tolerance\n * @returns {string}\n */\n static calculate_max_order_size(margin_mode, market_id, price, side, order_type, reduce_only, user_account, risk_engine, orderbook, n_iterations, error_tolerance) {\n let deferred5_0;\n let deferred5_1;\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n _assertClass(margin_mode, MarginMode);\n var ptr0 = margin_mode.__destroy_into_raw();\n const ptr1 = passStringToWasm0(price, wasm.__wbindgen_export, wasm.__wbindgen_export2);\n const len1 = WASM_VECTOR_LEN;\n const ptr2 = passStringToWasm0(error_tolerance, wasm.__wbindgen_export, wasm.__wbindgen_export2);\n const len2 = WASM_VECTOR_LEN;\n wasm.bulletwasm_calculate_max_order_size(retptr, ptr0, market_id, ptr1, len1, (__wbindgen_enum_Side.indexOf(side) + 1 || 3) - 1, (__wbindgen_enum_OrderType.indexOf(order_type) + 1 || 7) - 1, reduce_only, addHeapObject(user_account), addHeapObject(risk_engine), addHeapObject(orderbook), n_iterations, ptr2, len2);\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);\n var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);\n var ptr4 = r0;\n var len4 = r1;\n if (r3) {\n ptr4 = 0; len4 = 0;\n throw takeObject(r2);\n }\n deferred5_0 = ptr4;\n deferred5_1 = len4;\n return getStringFromWasm0(ptr4, len4);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n wasm.__wbindgen_export4(deferred5_0, deferred5_1, 1);\n }\n }\n /**\n * @param {MarginMode} margin_mode\n * @param {any} user_account\n * @param {MarginType} margin_type\n * @param {boolean} withdrawal\n * @param {any} risk_engine\n * @returns {string}\n */\n static calculate_perp_margin_requirement(margin_mode, user_account, margin_type, withdrawal, risk_engine) {\n let deferred3_0;\n let deferred3_1;\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n _assertClass(margin_mode, MarginMode);\n var ptr0 = margin_mode.__destroy_into_raw();\n wasm.bulletwasm_calculate_perp_margin_requirement(retptr, ptr0, addHeapObject(user_account), (__wbindgen_enum_MarginType.indexOf(margin_type) + 1 || 3) - 1, withdrawal, addHeapObject(risk_engine));\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);\n var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);\n var ptr2 = r0;\n var len2 = r1;\n if (r3) {\n ptr2 = 0; len2 = 0;\n throw takeObject(r2);\n }\n deferred3_0 = ptr2;\n deferred3_1 = len2;\n return getStringFromWasm0(ptr2, len2);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n wasm.__wbindgen_export4(deferred3_0, deferred3_1, 1);\n }\n }\n /**\n * @param {MarginMode} margin_mode\n * @param {any} user_account\n * @param {any} risk_engine\n * @returns {string}\n */\n static calculate_perp_unrealized_pnl(margin_mode, user_account, risk_engine) {\n let deferred3_0;\n let deferred3_1;\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n _assertClass(margin_mode, MarginMode);\n var ptr0 = margin_mode.__destroy_into_raw();\n wasm.bulletwasm_calculate_perp_unrealized_pnl(retptr, ptr0, addHeapObject(user_account), addHeapObject(risk_engine));\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);\n var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);\n var ptr2 = r0;\n var len2 = r1;\n if (r3) {\n ptr2 = 0; len2 = 0;\n throw takeObject(r2);\n }\n deferred3_0 = ptr2;\n deferred3_1 = len2;\n return getStringFromWasm0(ptr2, len2);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n wasm.__wbindgen_export4(deferred3_0, deferred3_1, 1);\n }\n }\n /**\n * @param {any} user_account\n * @param {any} risk_engine\n * @param {any} exchange_info\n * @returns {any}\n */\n static calculate_positions_additional_metadata(user_account, risk_engine, exchange_info) {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n wasm.bulletwasm_calculate_positions_additional_metadata(retptr, addHeapObject(user_account), addHeapObject(risk_engine), addHeapObject(exchange_info));\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);\n if (r2) {\n throw takeObject(r1);\n }\n return takeObject(r0);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * @param {MarginMode} margin_mode\n * @param {any} user_account\n * @param {any} risk_engine\n * @returns {string}\n */\n static calculate_total_notional_assets(margin_mode, user_account, risk_engine) {\n let deferred3_0;\n let deferred3_1;\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n _assertClass(margin_mode, MarginMode);\n var ptr0 = margin_mode.__destroy_into_raw();\n wasm.bulletwasm_calculate_total_notional_assets(retptr, ptr0, addHeapObject(user_account), addHeapObject(risk_engine));\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);\n var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);\n var ptr2 = r0;\n var len2 = r1;\n if (r3) {\n ptr2 = 0; len2 = 0;\n throw takeObject(r2);\n }\n deferred3_0 = ptr2;\n deferred3_1 = len2;\n return getStringFromWasm0(ptr2, len2);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n wasm.__wbindgen_export4(deferred3_0, deferred3_1, 1);\n }\n }\n /**\n * @param {any} user_account\n * @param {any} risk_engine\n * @returns {string}\n */\n static calculate_total_notional_liabilities(user_account, risk_engine) {\n let deferred2_0;\n let deferred2_1;\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n wasm.bulletwasm_calculate_total_notional_liabilities(retptr, addHeapObject(user_account), addHeapObject(risk_engine));\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);\n var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);\n var ptr1 = r0;\n var len1 = r1;\n if (r3) {\n ptr1 = 0; len1 = 0;\n throw takeObject(r2);\n }\n deferred2_0 = ptr1;\n deferred2_1 = len1;\n return getStringFromWasm0(ptr1, len1);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n wasm.__wbindgen_export4(deferred2_0, deferred2_1, 1);\n }\n }\n /**\n * @param {any} user_account\n * @param {MarginType} margin_type\n * @param {any} risk_engine\n * @returns {string}\n */\n static calculate_used_borrow_lend_margin(user_account, margin_type, risk_engine) {\n let deferred2_0;\n let deferred2_1;\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n wasm.bulletwasm_calculate_used_borrow_lend_margin(retptr, addHeapObject(user_account), (__wbindgen_enum_MarginType.indexOf(margin_type) + 1 || 3) - 1, addHeapObject(risk_engine));\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);\n var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);\n var ptr1 = r0;\n var len1 = r1;\n if (r3) {\n ptr1 = 0; len1 = 0;\n throw takeObject(r2);\n }\n deferred2_0 = ptr1;\n deferred2_1 = len1;\n return getStringFromWasm0(ptr1, len1);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n wasm.__wbindgen_export4(deferred2_0, deferred2_1, 1);\n }\n }\n /**\n * @param {MarginMode} margin_mode\n * @param {any} user_account\n * @param {boolean} withdrawal\n * @param {MarginType} margin_type\n * @param {any} risk_engine\n * @returns {string}\n */\n static calculate_used_margin(margin_mode, user_account, withdrawal, margin_type, risk_engine) {\n let deferred3_0;\n let deferred3_1;\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n _assertClass(margin_mode, MarginMode);\n var ptr0 = margin_mode.__destroy_into_raw();\n wasm.bulletwasm_calculate_used_margin(retptr, ptr0, addHeapObject(user_account), withdrawal, (__wbindgen_enum_MarginType.indexOf(margin_type) + 1 || 3) - 1, addHeapObject(risk_engine));\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);\n var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);\n var ptr2 = r0;\n var len2 = r1;\n if (r3) {\n ptr2 = 0; len2 = 0;\n throw takeObject(r2);\n }\n deferred3_0 = ptr2;\n deferred3_1 = len2;\n return getStringFromWasm0(ptr2, len2);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n wasm.__wbindgen_export4(deferred3_0, deferred3_1, 1);\n }\n }\n /**\n * @param {MarginMode} margin_mode\n * @param {any} user_account\n * @param {MarginType} margin_type\n * @param {any} risk_engine\n * @returns {string}\n */\n static calculate_used_perp_margin(margin_mode, user_account, margin_type, risk_engine) {\n let deferred3_0;\n let deferred3_1;\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n _assertClass(margin_mode, MarginMode);\n var ptr0 = margin_mode.__destroy_into_raw();\n wasm.bulletwasm_calculate_used_perp_margin(retptr, ptr0, addHeapObject(user_account), (__wbindgen_enum_MarginType.indexOf(margin_type) + 1 || 3) - 1, addHeapObject(risk_engine));\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);\n var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);\n var ptr2 = r0;\n var len2 = r1;\n if (r3) {\n ptr2 = 0; len2 = 0;\n throw takeObject(r2);\n }\n deferred3_0 = ptr2;\n deferred3_1 = len2;\n return getStringFromWasm0(ptr2, len2);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n wasm.__wbindgen_export4(deferred3_0, deferred3_1, 1);\n }\n }\n /**\n * @param {number} asset_id\n * @param {boolean} for_transfer_spot_collateral_or_sub_account\n * @param {any} user_account\n * @param {any} risk_engine\n * @param {any} exchange_info\n * @returns {string}\n */\n static calculate_withdrawable_amount_of_cross_margin_asset(asset_id, for_transfer_spot_collateral_or_sub_account, user_account, risk_engine, exchange_info) {\n let deferred2_0;\n let deferred2_1;\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n wasm.bulletwasm_calculate_withdrawable_amount_of_cross_margin_asset(retptr, asset_id, for_transfer_spot_collateral_or_sub_account, addHeapObject(user_account), addHeapObject(risk_engine), addHeapObject(exchange_info));\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);\n var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);\n var ptr1 = r0;\n var len1 = r1;\n if (r3) {\n ptr1 = 0; len1 = 0;\n throw takeObject(r2);\n }\n deferred2_0 = ptr1;\n deferred2_1 = len1;\n return getStringFromWasm0(ptr1, len1);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n wasm.__wbindgen_export4(deferred2_0, deferred2_1, 1);\n }\n }\n /**\n * @param {string} decimal_str\n * @returns {any}\n */\n static convert_rust_decimal_to_json(decimal_str) {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n const ptr0 = passStringToWasm0(decimal_str, wasm.__wbindgen_export, wasm.__wbindgen_export2);\n const len0 = WASM_VECTOR_LEN;\n wasm.bulletwasm_convert_rust_decimal_to_json(retptr, ptr0, len0);\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);\n if (r2) {\n throw takeObject(r1);\n }\n return takeObject(r0);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * @param {string} token_id\n * @returns {Uint8Array}\n */\n static convert_token_id_to_bytes(token_id) {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n const ptr0 = passStringToWasm0(token_id, wasm.__wbindgen_export, wasm.__wbindgen_export2);\n const len0 = WASM_VECTOR_LEN;\n wasm.bulletwasm_convert_token_id_to_bytes(retptr, ptr0, len0);\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);\n var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);\n if (r3) {\n throw takeObject(r2);\n }\n var v2 = getArrayU8FromWasm0(r0, r1).slice();\n wasm.__wbindgen_export4(r0, r1 * 1, 1);\n return v2;\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * @param {number} a\n * @returns {number}\n */\n static dummy(a) {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n wasm.bulletwasm_dummy(retptr, a);\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);\n if (r2) {\n throw takeObject(r1);\n }\n return r0 >>> 0;\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * @param {number} market_id\n * @param {any} risk_engine\n * @returns {string}\n */\n static estimate_hourly_funding_rate(market_id, risk_engine) {\n let deferred2_0;\n let deferred2_1;\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n wasm.bulletwasm_estimate_hourly_funding_rate(retptr, market_id, addHeapObject(risk_engine));\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);\n var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);\n var ptr1 = r0;\n var len1 = r1;\n if (r3) {\n ptr1 = 0; len1 = 0;\n throw takeObject(r2);\n }\n deferred2_0 = ptr1;\n deferred2_1 = len1;\n return getStringFromWasm0(ptr1, len1);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n wasm.__wbindgen_export4(deferred2_0, deferred2_1, 1);\n }\n }\n constructor() {\n const ret = wasm.bulletwasm_new();\n this.__wbg_ptr = ret >>> 0;\n BulletWasmFinalization.register(this, this.__wbg_ptr, this);\n return this;\n }\n /**\n * @param {number} market_id\n * @param {any} new_order_args\n * @param {number} base_asset_id\n * @param {any} user_account\n * @param {any} risk_engine\n * @param {any} orderbook\n * @returns {any}\n */\n static simulate_cross_margin_estimated_liquidation_price_on_order(market_id, new_order_args, base_asset_id, user_account, risk_engine, orderbook) {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n wasm.bulletwasm_simulate_cross_margin_estimated_liquidation_price_on_order(retptr, market_id, addHeapObject(new_order_args), base_asset_id, addHeapObject(user_account), addHeapObject(risk_engine), addHeapObject(orderbook));\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);\n if (r2) {\n throw takeObject(r1);\n }\n return takeObject(r0);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * @param {number} asset_id\n * @param {string} borrow_amount\n * @param {any} user_account\n * @param {MarginType} margin_type\n * @param {any} risk_engine\n * @returns {any}\n */\n static simulate_used_cross_margin_on_borrow(asset_id, borrow_amount, user_account, margin_type, risk_engine) {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n const ptr0 = passStringToWasm0(borrow_amount, wasm.__wbindgen_export, wasm.__wbindgen_export2);\n const len0 = WASM_VECTOR_LEN;\n wasm.bulletwasm_simulate_used_cross_margin_on_borrow(retptr, asset_id, ptr0, len0, addHeapObject(user_account), (__wbindgen_enum_MarginType.indexOf(margin_type) + 1 || 3) - 1, addHeapObject(risk_engine));\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);\n if (r2) {\n throw takeObject(r1);\n }\n return takeObject(r0);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * @param {number} market_id\n * @param {any} new_order_args\n * @param {any} user_account\n * @param {any} risk_engine\n * @param {any} orderbook\n * @returns {any}\n */\n static simulate_used_cross_margin_on_order(market_id, new_order_args, user_account, risk_engine, orderbook) {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n wasm.bulletwasm_simulate_used_cross_margin_on_order(retptr, market_id, addHeapObject(new_order_args), addHeapObject(user_account), addHeapObject(risk_engine), addHeapObject(orderbook));\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);\n if (r2) {\n throw takeObject(r1);\n }\n return takeObject(r0);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n}\nif (Symbol.dispose) BulletWasm.prototype[Symbol.dispose] = BulletWasm.prototype.free;\n\nexport class MarginMode {\n static __wrap(ptr) {\n ptr = ptr >>> 0;\n const obj = Object.create(MarginMode.prototype);\n obj.__wbg_ptr = ptr;\n MarginModeFinalization.register(obj, obj.__wbg_ptr, obj);\n return obj;\n }\n __destroy_into_raw() {\n const ptr = this.__wbg_ptr;\n this.__wbg_ptr = 0;\n MarginModeFinalization.unregister(this);\n return ptr;\n }\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_marginmode_free(ptr, 0);\n }\n /**\n * @returns {MarginMode}\n */\n static cross() {\n const ret = wasm.marginmode_cross();\n return MarginMode.__wrap(ret);\n }\n /**\n * @param {number} market_id\n * @returns {MarginMode}\n */\n static iso(market_id) {\n const ret = wasm.marginmode_iso(market_id);\n return MarginMode.__wrap(ret);\n }\n}\nif (Symbol.dispose) MarginMode.prototype[Symbol.dispose] = MarginMode.prototype.free;\nfunction __wbg_get_imports() {\n const import0 = {\n __proto__: null,\n __wbg_Error_960c155d3d49e4c2: function(arg0, arg1) {\n const ret = Error(getStringFromWasm0(arg0, arg1));\n return addHeapObject(ret);\n },\n __wbg_Number_32bf70a599af1d4b: function(arg0) {\n const ret = Number(getObject(arg0));\n return ret;\n },\n __wbg_String_8564e559799eccda: function(arg0, arg1) {\n const ret = String(getObject(arg1));\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export, wasm.__wbindgen_export2);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n },\n __wbg___wbindgen_bigint_get_as_i64_3d3aba5d616c6a51: function(arg0, arg1) {\n const v = getObject(arg1);\n const ret = typeof(v) === 'bigint' ? v : undefined;\n getDataViewMemory0().setBigInt64(arg0 + 8 * 1, isLikeNone(ret) ? BigInt(0) : ret, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, !isLikeNone(ret), true);\n },\n __wbg___wbindgen_boolean_get_6ea149f0a8dcc5ff: function(arg0) {\n const v = getObject(arg0);\n const ret = typeof(v) === 'boolean' ? v : undefined;\n return isLikeNone(ret) ? 0xFFFFFF : ret ? 1 : 0;\n },\n __wbg___wbindgen_debug_string_ab4b34d23d6778bd: function(arg0, arg1) {\n const ret = debugString(getObject(arg1));\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export, wasm.__wbindgen_export2);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n },\n __wbg___wbindgen_in_a5d8b22e52b24dd1: function(arg0, arg1) {\n const ret = getObject(arg0) in getObject(arg1);\n return ret;\n },\n __wbg___wbindgen_is_bigint_ec25c7f91b4d9e93: function(arg0) {\n const ret = typeof(getObject(arg0)) === 'bigint';\n return ret;\n },\n __wbg___wbindgen_is_function_3baa9db1a987f47d: function(arg0) {\n const ret = typeof(getObject(arg0)) === 'function';\n return ret;\n },\n __wbg___wbindgen_is_object_63322ec0cd6ea4ef: function(arg0) {\n const val = getObject(arg0);\n const ret = typeof(val) === 'object' && val !== null;\n return ret;\n },\n __wbg___wbindgen_is_string_6df3bf7ef1164ed3: function(arg0) {\n const ret = typeof(getObject(arg0)) === 'string';\n return ret;\n },\n __wbg___wbindgen_is_undefined_29a43b4d42920abd: function(arg0) {\n const ret = getObject(arg0) === undefined;\n return ret;\n },\n __wbg___wbindgen_jsval_eq_d3465d8a07697228: function(arg0, arg1) {\n const ret = getObject(arg0) === getObject(arg1);\n return ret;\n },\n __wbg___wbindgen_jsval_loose_eq_cac3565e89b4134c: function(arg0, arg1) {\n const ret = getObject(arg0) == getObject(arg1);\n return ret;\n },\n __wbg___wbindgen_number_get_c7f42aed0525c451: function(arg0, arg1) {\n const obj = getObject(arg1);\n const ret = typeof(obj) === 'number' ? obj : undefined;\n getDataViewMemory0().setFloat64(arg0 + 8 * 1, isLikeNone(ret) ? 0 : ret, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, !isLikeNone(ret), true);\n },\n __wbg___wbindgen_string_get_7ed5322991caaec5: function(arg0, arg1) {\n const obj = getObject(arg1);\n const ret = typeof(obj) === 'string' ? obj : undefined;\n var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_export, wasm.__wbindgen_export2);\n var len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n },\n __wbg___wbindgen_throw_6b64449b9b9ed33c: function(arg0, arg1) {\n throw new Error(getStringFromWasm0(arg0, arg1));\n },\n __wbg_call_14b169f759b26747: function() { return handleError(function (arg0, arg1) {\n const ret = getObject(arg0).call(getObject(arg1));\n return addHeapObject(ret);\n }, arguments); },\n __wbg_done_9158f7cc8751ba32: function(arg0) {\n const ret = getObject(arg0).done;\n return ret;\n },\n __wbg_entries_e0b73aa8571ddb56: function(arg0) {\n const ret = Object.entries(getObject(arg0));\n return addHeapObject(ret);\n },\n __wbg_error_a6fa202b58aa1cd3: function(arg0, arg1) {\n let deferred0_0;\n let deferred0_1;\n try {\n deferred0_0 = arg0;\n deferred0_1 = arg1;\n console.error(getStringFromWasm0(arg0, arg1));\n } finally {\n wasm.__wbindgen_export4(deferred0_0, deferred0_1, 1);\n }\n },\n __wbg_get_1affdbdd5573b16a: function() { return handleError(function (arg0, arg1) {\n const ret = Reflect.get(getObject(arg0), getObject(arg1));\n return addHeapObject(ret);\n }, arguments); },\n __wbg_get_8360291721e2339f: function(arg0, arg1) {\n const ret = getObject(arg0)[arg1 >>> 0];\n return addHeapObject(ret);\n },\n __wbg_get_unchecked_17f53dad852b9588: function(arg0, arg1) {\n const ret = getObject(arg0)[arg1 >>> 0];\n return addHeapObject(ret);\n },\n __wbg_get_with_ref_key_6412cf3094599694: function(arg0, arg1) {\n const ret = getObject(arg0)[getObject(arg1)];\n return addHeapObject(ret);\n },\n __wbg_instanceof_ArrayBuffer_7c8433c6ed14ffe3: function(arg0) {\n let result;\n try {\n result = getObject(arg0) instanceof ArrayBuffer;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n },\n __wbg_instanceof_Map_1b76fd4635be43eb: function(arg0) {\n let result;\n try {\n result = getObject(arg0) instanceof Map;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n },\n __wbg_instanceof_Uint8Array_152ba1f289edcf3f: function(arg0) {\n let result;\n try {\n result = getObject(arg0) instanceof Uint8Array;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n },\n __wbg_isArray_c3109d14ffc06469: function(arg0) {\n const ret = Array.isArray(getObject(arg0));\n return ret;\n },\n __wbg_isSafeInteger_4fc213d1989d6d2a: function(arg0) {\n const ret = Number.isSafeInteger(getObject(arg0));\n return ret;\n },\n __wbg_iterator_013bc09ec998c2a7: function() {\n const ret = Symbol.iterator;\n return addHeapObject(ret);\n },\n __wbg_length_3d4ecd04bd8d22f1: function(arg0) {\n const ret = getObject(arg0).length;\n return ret;\n },\n __wbg_length_9f1775224cf1d815: function(arg0) {\n const ret = getObject(arg0).length;\n return ret;\n },\n __wbg_new_0c7403db6e782f19: function(arg0) {\n const ret = new Uint8Array(getObject(arg0));\n return addHeapObject(ret);\n },\n __wbg_new_227d7c05414eb861: function() {\n const ret = new Error();\n return addHeapObject(ret);\n },\n __wbg_new_34d45cc8e36aaead: function() {\n const ret = new Map();\n return addHeapObject(ret);\n },\n __wbg_new_682678e2f47e32bc: function() {\n const ret = new Array();\n return addHeapObject(ret);\n },\n __wbg_new_aa8d0fa9762c29bd: function() {\n const ret = new Object();\n return addHeapObject(ret);\n },\n __wbg_next_0340c4ae324393c3: function() { return handleError(function (arg0) {\n const ret = getObject(arg0).next();\n return addHeapObject(ret);\n }, arguments); },\n __wbg_next_7646edaa39458ef7: function(arg0) {\n const ret = getObject(arg0).next;\n return addHeapObject(ret);\n },\n __wbg_prototypesetcall_a6b02eb00b0f4ce2: function(arg0, arg1, arg2) {\n Uint8Array.prototype.set.call(getArrayU8FromWasm0(arg0, arg1), getObject(arg2));\n },\n __wbg_set_3bf1de9fab0cd644: function(arg0, arg1, arg2) {\n getObject(arg0)[arg1 >>> 0] = takeObject(arg2);\n },\n __wbg_set_6be42768c690e380: function(arg0, arg1, arg2) {\n getObject(arg0)[takeObject(arg1)] = takeObject(arg2);\n },\n __wbg_set_fde2cec06c23692b: function(arg0, arg1, arg2) {\n const ret = getObject(arg0).set(getObject(arg1), getObject(arg2));\n return addHeapObject(ret);\n },\n __wbg_stack_3b0d974bbf31e44f: function(arg0, arg1) {\n const ret = getObject(arg1).stack;\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export, wasm.__wbindgen_export2);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n },\n __wbg_value_ee3a06f4579184fa: function(arg0) {\n const ret = getObject(arg0).value;\n return addHeapObject(ret);\n },\n __wbindgen_cast_0000000000000001: function(arg0) {\n // Cast intrinsic for `F64 -> Externref`.\n const ret = arg0;\n return addHeapObject(ret);\n },\n __wbindgen_cast_0000000000000002: function(arg0) {\n // Cast intrinsic for `I64 -> Externref`.\n const ret = arg0;\n return addHeapObject(ret);\n },\n __wbindgen_cast_0000000000000003: function(arg0, arg1) {\n // Cast intrinsic for `Ref(String) -> Externref`.\n const ret = getStringFromWasm0(arg0, arg1);\n return addHeapObject(ret);\n },\n __wbindgen_cast_0000000000000004: function(arg0) {\n // Cast intrinsic for `U64 -> Externref`.\n const ret = BigInt.asUintN(64, arg0);\n return addHeapObject(ret);\n },\n __wbindgen_object_clone_ref: function(arg0) {\n const ret = getObject(arg0);\n return addHeapObject(ret);\n },\n __wbindgen_object_drop_ref: function(arg0) {\n takeObject(arg0);\n },\n };\n return {\n __proto__: null,\n \"./bullet_wasm_bg.js\": import0,\n };\n}\n\nconst __wbindgen_enum_EquityType = [\"unweighted\", \"weighted_initial\", \"weighted_maintenance\"];\n\n\nconst __wbindgen_enum_MarginType = [\"initial\", \"maintenance\"];\n\n\nconst __wbindgen_enum_OrderType = [\"limit\", \"post_only\", \"fill_or_kill\", \"immediate_or_cancel\", \"post_only_slide\", \"post_only_front\"];\n\n\nconst __wbindgen_enum_Side = [\"bid\", \"ask\"];\nconst BulletWasmFinalization = (typeof FinalizationRegistry === 'undefined')\n ? { register: () => {}, unregister: () => {} }\n : new FinalizationRegistry(ptr => wasm.__wbg_bulletwasm_free(ptr >>> 0, 1));\nconst MarginModeFinalization = (typeof FinalizationRegistry === 'undefined')\n ? { register: () => {}, unregister: () => {} }\n : new FinalizationRegistry(ptr => wasm.__wbg_marginmode_free(ptr >>> 0, 1));\n\nfunction addHeapObject(obj) {\n if (heap_next === heap.length) heap.push(heap.length + 1);\n const idx = heap_next;\n heap_next = heap[idx];\n\n heap[idx] = obj;\n return idx;\n}\n\nfunction _assertClass(instance, klass) {\n if (!(instance instanceof klass)) {\n throw new Error(`expected instance of ${klass.name}`);\n }\n}\n\nfunction debugString(val) {\n // primitive types\n const type = typeof val;\n if (type == 'number' || type == 'boolean' || val == null) {\n return `${val}`;\n }\n if (type == 'string') {\n return `\"${val}\"`;\n }\n if (type == 'symbol') {\n const description = val.description;\n if (description == null) {\n return 'Symbol';\n } else {\n return `Symbol(${description})`;\n }\n }\n if (type == 'function') {\n const name = val.name;\n if (typeof name == 'string' && name.length > 0) {\n return `Function(${name})`;\n } else {\n return 'Function';\n }\n }\n // objects\n if (Array.isArray(val)) {\n const length = val.length;\n let debug = '[';\n if (length > 0) {\n debug += debugString(val[0]);\n }\n for(let i = 1; i < length; i++) {\n debug += ', ' + debugString(val[i]);\n }\n debug += ']';\n return debug;\n }\n // Test for built-in\n const builtInMatches = /\\[object ([^\\]]+)\\]/.exec(toString.call(val));\n let className;\n if (builtInMatches && builtInMatches.length > 1) {\n className = builtInMatches[1];\n } else {\n // Failed to match the standard '[object ClassName]'\n return toString.call(val);\n }\n if (className == 'Object') {\n // we're a user defined class or Object\n // JSON.stringify avoids problems with cycles, and is generally much\n // easier than looping through ownProperties of `val`.\n try {\n return 'Object(' + JSON.stringify(val) + ')';\n } catch (_) {\n return 'Object';\n }\n }\n // errors\n if (val instanceof Error) {\n return `${val.name}: ${val.message}\\n${val.stack}`;\n }\n // TODO we could test for more things here, like `Set`s and `Map`s.\n return className;\n}\n\nfunction dropObject(idx) {\n if (idx < 1028) return;\n heap[idx] = heap_next;\n heap_next = idx;\n}\n\nfunction getArrayU8FromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return getUint8ArrayMemory0().subarray(ptr / 1, ptr / 1 + len);\n}\n\nlet cachedDataViewMemory0 = null;\nfunction getDataViewMemory0() {\n if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || (cachedDataViewMemory0.buffer.detached === undefined && cachedDataViewMemory0.buffer !== wasm.memory.buffer)) {\n cachedDataViewMemory0 = new DataView(wasm.memory.buffer);\n }\n return cachedDataViewMemory0;\n}\n\nfunction getStringFromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return decodeText(ptr, len);\n}\n\nlet cachedUint8ArrayMemory0 = null;\nfunction getUint8ArrayMemory0() {\n if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {\n cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);\n }\n return cachedUint8ArrayMemory0;\n}\n\nfunction getObject(idx) { return heap[idx]; }\n\nfunction handleError(f, args) {\n try {\n return f.apply(this, args);\n } catch (e) {\n wasm.__wbindgen_export3(addHeapObject(e));\n }\n}\n\nlet heap = new Array(1024).fill(undefined);\nheap.push(undefined, null, true, false);\n\nlet heap_next = heap.length;\n\nfunction isLikeNone(x) {\n return x === undefined || x === null;\n}\n\nfunction passStringToWasm0(arg, malloc, realloc) {\n if (realloc === undefined) {\n const buf = cachedTextEncoder.encode(arg);\n const ptr = malloc(buf.length, 1) >>> 0;\n getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf);\n WASM_VECTOR_LEN = buf.length;\n return ptr;\n }\n\n let len = arg.length;\n let ptr = malloc(len, 1) >>> 0;\n\n const mem = getUint8ArrayMemory0();\n\n let offset = 0;\n\n for (; offset < len; offset++) {\n const code = arg.charCodeAt(offset);\n if (code > 0x7F) break;\n mem[ptr + offset] = code;\n }\n if (offset !== len) {\n if (offset !== 0) {\n arg = arg.slice(offset);\n }\n ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;\n const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len);\n const ret = cachedTextEncoder.encodeInto(arg, view);\n\n offset += ret.written;\n ptr = realloc(ptr, len, offset, 1) >>> 0;\n }\n\n WASM_VECTOR_LEN = offset;\n return ptr;\n}\n\nfunction takeObject(idx) {\n const ret = getObject(idx);\n dropObject(idx);\n return ret;\n}\n\nlet cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });\ncachedTextDecoder.decode();\nconst MAX_SAFARI_DECODE_BYTES = 2146435072;\nlet numBytesDecoded = 0;\nfunction decodeText(ptr, len) {\n numBytesDecoded += len;\n if (numBytesDecoded >= MAX_SAFARI_DECODE_BYTES) {\n cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });\n cachedTextDecoder.decode();\n numBytesDecoded = len;\n }\n return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));\n}\n\nconst cachedTextEncoder = new TextEncoder();\n\nif (!('encodeInto' in cachedTextEncoder)) {\n cachedTextEncoder.encodeInto = function (arg, view) {\n const buf = cachedTextEncoder.encode(arg);\n view.set(buf);\n return {\n read: arg.length,\n written: buf.length\n };\n };\n}\n\nlet WASM_VECTOR_LEN = 0;\n\nlet wasmModule, wasm;\nfunction __wbg_finalize_init(instance, module) {\n wasm = instance.exports;\n wasmModule = module;\n cachedDataViewMemory0 = null;\n cachedUint8ArrayMemory0 = null;\n return wasm;\n}\n\nasync function __wbg_load(module, imports) {\n if (typeof Response === 'function' && module instanceof Response) {\n if (typeof WebAssembly.instantiateStreaming === 'function') {\n try {\n return await WebAssembly.instantiateStreaming(module, imports);\n } catch (e) {\n const validResponse = module.ok && expectedResponseType(module.type);\n\n if (validResponse && module.headers.get('Content-Type') !== 'application/wasm') {\n console.warn(\"`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\\n\", e);\n\n } else { throw e; }\n }\n }\n\n const bytes = await module.arrayBuffer();\n return await WebAssembly.instantiate(bytes, imports);\n } else {\n const instance = await WebAssembly.instantiate(module, imports);\n\n if (instance instanceof WebAssembly.Instance) {\n return { instance, module };\n } else {\n return instance;\n }\n }\n\n function expectedResponseType(type) {\n switch (type) {\n case 'basic': case 'cors': case 'default': return true;\n }\n return false;\n }\n}\n\nfunction initSync(module) {\n if (wasm !== undefined) return wasm;\n\n\n if (module !== undefined) {\n if (Object.getPrototypeOf(module) === Object.prototype) {\n ({module} = module)\n } else {\n console.warn('using deprecated parameters for `initSync()`; pass a single object instead')\n }\n }\n\n const imports = __wbg_get_imports();\n if (!(module instanceof WebAssembly.Module)) {\n module = new WebAssembly.Module(module);\n }\n const instance = new WebAssembly.Instance(module, imports);\n return __wbg_finalize_init(instance, module);\n}\n\nasync function __wbg_init(module_or_path) {\n if (wasm !== undefined) return wasm;\n\n\n if (module_or_path !== undefined) {\n if (Object.getPrototypeOf(module_or_path) === Object.prototype) {\n ({module_or_path} = module_or_path)\n } else {\n console.warn('using deprecated parameters for the initialization function; pass a single object instead')\n }\n }\n\n if (module_or_path === undefined) {\n module_or_path = new URL('bullet_wasm_bg.wasm', import.meta.url);\n }\n const imports = __wbg_get_imports();\n\n if (typeof module_or_path === 'string' || (typeof Request === 'function' && module_or_path instanceof Request) || (typeof URL === 'function' && module_or_path instanceof URL)) {\n module_or_path = fetch(module_or_path);\n }\n\n const { instance, module } = await __wbg_load(await module_or_path, imports);\n\n return __wbg_finalize_init(instance, module);\n}\n\nexport { initSync, __wbg_init as default };\n",
|
|
7
|
+
"/* @ts-self-types=\"./bullet_wasm.d.ts\" */\n\nexport class BulletWasm {\n __destroy_into_raw() {\n const ptr = this.__wbg_ptr;\n this.__wbg_ptr = 0;\n BulletWasmFinalization.unregister(this);\n return ptr;\n }\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_bulletwasm_free(ptr, 0);\n }\n /**\n * @param {MarginMode} margin_mode\n * @param {any} user_account\n * @param {boolean} conservative\n * @param {EquityType} equity_type\n * @param {any} risk_engine\n * @returns {string}\n */\n static calculate_account_equity(margin_mode, user_account, conservative, equity_type, risk_engine) {\n let deferred3_0;\n let deferred3_1;\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n _assertClass(margin_mode, MarginMode);\n var ptr0 = margin_mode.__destroy_into_raw();\n wasm.bulletwasm_calculate_account_equity(retptr, ptr0, addHeapObject(user_account), conservative, (__wbindgen_enum_EquityType.indexOf(equity_type) + 1 || 4) - 1, addHeapObject(risk_engine));\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);\n var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);\n var ptr2 = r0;\n var len2 = r1;\n if (r3) {\n ptr2 = 0; len2 = 0;\n throw takeObject(r2);\n }\n deferred3_0 = ptr2;\n deferred3_1 = len2;\n return getStringFromWasm0(ptr2, len2);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n wasm.__wbindgen_export4(deferred3_0, deferred3_1, 1);\n }\n }\n /**\n * @param {MarginMode} margin_mode\n * @param {any} user_account\n * @param {any} risk_engine\n * @returns {string}\n */\n static calculate_account_leverage(margin_mode, user_account, risk_engine) {\n let deferred3_0;\n let deferred3_1;\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n _assertClass(margin_mode, MarginMode);\n var ptr0 = margin_mode.__destroy_into_raw();\n wasm.bulletwasm_calculate_account_leverage(retptr, ptr0, addHeapObject(user_account), addHeapObject(risk_engine));\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);\n var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);\n var ptr2 = r0;\n var len2 = r1;\n if (r3) {\n ptr2 = 0; len2 = 0;\n throw takeObject(r2);\n }\n deferred3_0 = ptr2;\n deferred3_1 = len2;\n return getStringFromWasm0(ptr2, len2);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n wasm.__wbindgen_export4(deferred3_0, deferred3_1, 1);\n }\n }\n /**\n * @param {MarginMode} margin_mode\n * @param {any} user_account\n * @param {boolean} conservative\n * @param {MarginType} margin_type\n * @param {any} risk_engine\n * @returns {string}\n */\n static calculate_available_margin(margin_mode, user_account, conservative, margin_type, risk_engine) {\n let deferred3_0;\n let deferred3_1;\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n _assertClass(margin_mode, MarginMode);\n var ptr0 = margin_mode.__destroy_into_raw();\n wasm.bulletwasm_calculate_available_margin(retptr, ptr0, addHeapObject(user_account), conservative, (__wbindgen_enum_MarginType.indexOf(margin_type) + 1 || 3) - 1, addHeapObject(risk_engine));\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);\n var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);\n var ptr2 = r0;\n var len2 = r1;\n if (r3) {\n ptr2 = 0; len2 = 0;\n throw takeObject(r2);\n }\n deferred3_0 = ptr2;\n deferred3_1 = len2;\n return getStringFromWasm0(ptr2, len2);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n wasm.__wbindgen_export4(deferred3_0, deferred3_1, 1);\n }\n }\n /**\n * @param {any} borrow_lend_market\n * @returns {any}\n */\n static calculate_borrow_lend_additional_metadata(borrow_lend_market) {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n wasm.bulletwasm_calculate_borrow_lend_additional_metadata(retptr, addHeapObject(borrow_lend_market));\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);\n if (r2) {\n throw takeObject(r1);\n }\n return takeObject(r0);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * @param {any} user_accounts\n * @param {any} risk_engine\n * @param {boolean} use_weighted_equity\n * @returns {any}\n */\n static calculate_cross_margin_account_summary_batch(user_accounts, risk_engine, use_weighted_equity) {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n wasm.bulletwasm_calculate_cross_margin_account_summary_batch(retptr, addHeapObject(user_accounts), addHeapObject(risk_engine), use_weighted_equity);\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);\n if (r2) {\n throw takeObject(r1);\n }\n return takeObject(r0);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * @param {MarginMode} margin_mode\n * @param {any} user_account\n * @param {number} market_id\n * @param {number} base_asset_id\n * @param {any} risk_engine\n * @returns {string}\n */\n static calculate_estimated_liquidation_price(margin_mode, user_account, market_id, base_asset_id, risk_engine) {\n let deferred3_0;\n let deferred3_1;\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n _assertClass(margin_mode, MarginMode);\n var ptr0 = margin_mode.__destroy_into_raw();\n wasm.bulletwasm_calculate_estimated_liquidation_price(retptr, ptr0, addHeapObject(user_account), market_id, base_asset_id, addHeapObject(risk_engine));\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);\n var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);\n var ptr2 = r0;\n var len2 = r1;\n if (r3) {\n ptr2 = 0; len2 = 0;\n throw takeObject(r2);\n }\n deferred3_0 = ptr2;\n deferred3_1 = len2;\n return getStringFromWasm0(ptr2, len2);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n wasm.__wbindgen_export4(deferred3_0, deferred3_1, 1);\n }\n }\n /**\n * @param {MarginMode} margin_mode\n * @param {any} user_account\n * @param {any} risk_engine\n * @returns {string}\n */\n static calculate_force_cancel_risk_percentage(margin_mode, user_account, risk_engine) {\n let deferred3_0;\n let deferred3_1;\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n _assertClass(margin_mode, MarginMode);\n var ptr0 = margin_mode.__destroy_into_raw();\n wasm.bulletwasm_calculate_force_cancel_risk_percentage(retptr, ptr0, addHeapObject(user_account), addHeapObject(risk_engine));\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);\n var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);\n var ptr2 = r0;\n var len2 = r1;\n if (r3) {\n ptr2 = 0; len2 = 0;\n throw takeObject(r2);\n }\n deferred3_0 = ptr2;\n deferred3_1 = len2;\n return getStringFromWasm0(ptr2, len2);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n wasm.__wbindgen_export4(deferred3_0, deferred3_1, 1);\n }\n }\n /**\n * @param {MarginMode} margin_mode\n * @param {any} user_account\n * @param {any} risk_engine\n * @returns {string}\n */\n static calculate_liquidation_risk_percentage(margin_mode, user_account, risk_engine) {\n let deferred3_0;\n let deferred3_1;\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n _assertClass(margin_mode, MarginMode);\n var ptr0 = margin_mode.__destroy_into_raw();\n wasm.bulletwasm_calculate_liquidation_risk_percentage(retptr, ptr0, addHeapObject(user_account), addHeapObject(risk_engine));\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);\n var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);\n var ptr2 = r0;\n var len2 = r1;\n if (r3) {\n ptr2 = 0; len2 = 0;\n throw takeObject(r2);\n }\n deferred3_0 = ptr2;\n deferred3_1 = len2;\n return getStringFromWasm0(ptr2, len2);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n wasm.__wbindgen_export4(deferred3_0, deferred3_1, 1);\n }\n }\n /**\n * @param {MarginMode} margin_mode\n * @param {any} user_account\n * @param {any} risk_engine\n * @returns {any}\n */\n static calculate_margin_balance(margin_mode, user_account, risk_engine) {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n _assertClass(margin_mode, MarginMode);\n var ptr0 = margin_mode.__destroy_into_raw();\n wasm.bulletwasm_calculate_margin_balance(retptr, ptr0, addHeapObject(user_account), addHeapObject(risk_engine));\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);\n if (r2) {\n throw takeObject(r1);\n }\n return takeObject(r0);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * Calculates the maximum amount that can be borrowed for a given asset\n * @param initial_liability_weight The initial liability weight for the market must be passed in separately since the user may not have a spot ledger for this asset yet\n * @param {number} asset_id\n * @param {any} user_account\n * @param {any} risk_engine\n * @returns {string}\n */\n static calculate_max_borrow_amount(asset_id, user_account, risk_engine) {\n let deferred2_0;\n let deferred2_1;\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n wasm.bulletwasm_calculate_max_borrow_amount(retptr, asset_id, addHeapObject(user_account), addHeapObject(risk_engine));\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);\n var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);\n var ptr1 = r0;\n var len1 = r1;\n if (r3) {\n ptr1 = 0; len1 = 0;\n throw takeObject(r2);\n }\n deferred2_0 = ptr1;\n deferred2_1 = len1;\n return getStringFromWasm0(ptr1, len1);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n wasm.__wbindgen_export4(deferred2_0, deferred2_1, 1);\n }\n }\n /**\n * @param {MarginMode} margin_mode\n * @param {number} market_id\n * @param {string} price\n * @param {Side} side\n * @param {OrderType} order_type\n * @param {boolean} reduce_only\n * @param {any} user_account\n * @param {any} risk_engine\n * @param {any} orderbook\n * @param {number} n_iterations\n * @param {string} error_tolerance\n * @returns {string}\n */\n static calculate_max_order_size(margin_mode, market_id, price, side, order_type, reduce_only, user_account, risk_engine, orderbook, n_iterations, error_tolerance) {\n let deferred5_0;\n let deferred5_1;\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n _assertClass(margin_mode, MarginMode);\n var ptr0 = margin_mode.__destroy_into_raw();\n const ptr1 = passStringToWasm0(price, wasm.__wbindgen_export, wasm.__wbindgen_export2);\n const len1 = WASM_VECTOR_LEN;\n const ptr2 = passStringToWasm0(error_tolerance, wasm.__wbindgen_export, wasm.__wbindgen_export2);\n const len2 = WASM_VECTOR_LEN;\n wasm.bulletwasm_calculate_max_order_size(retptr, ptr0, market_id, ptr1, len1, (__wbindgen_enum_Side.indexOf(side) + 1 || 3) - 1, (__wbindgen_enum_OrderType.indexOf(order_type) + 1 || 7) - 1, reduce_only, addHeapObject(user_account), addHeapObject(risk_engine), addHeapObject(orderbook), n_iterations, ptr2, len2);\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);\n var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);\n var ptr4 = r0;\n var len4 = r1;\n if (r3) {\n ptr4 = 0; len4 = 0;\n throw takeObject(r2);\n }\n deferred5_0 = ptr4;\n deferred5_1 = len4;\n return getStringFromWasm0(ptr4, len4);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n wasm.__wbindgen_export4(deferred5_0, deferred5_1, 1);\n }\n }\n /**\n * @param {MarginMode} margin_mode\n * @param {any} user_account\n * @param {MarginType} margin_type\n * @param {boolean} withdrawal\n * @param {any} risk_engine\n * @returns {string}\n */\n static calculate_perp_margin_requirement(margin_mode, user_account, margin_type, withdrawal, risk_engine) {\n let deferred3_0;\n let deferred3_1;\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n _assertClass(margin_mode, MarginMode);\n var ptr0 = margin_mode.__destroy_into_raw();\n wasm.bulletwasm_calculate_perp_margin_requirement(retptr, ptr0, addHeapObject(user_account), (__wbindgen_enum_MarginType.indexOf(margin_type) + 1 || 3) - 1, withdrawal, addHeapObject(risk_engine));\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);\n var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);\n var ptr2 = r0;\n var len2 = r1;\n if (r3) {\n ptr2 = 0; len2 = 0;\n throw takeObject(r2);\n }\n deferred3_0 = ptr2;\n deferred3_1 = len2;\n return getStringFromWasm0(ptr2, len2);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n wasm.__wbindgen_export4(deferred3_0, deferred3_1, 1);\n }\n }\n /**\n * @param {MarginMode} margin_mode\n * @param {any} user_account\n * @param {any} risk_engine\n * @returns {string}\n */\n static calculate_perp_unrealized_pnl(margin_mode, user_account, risk_engine) {\n let deferred3_0;\n let deferred3_1;\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n _assertClass(margin_mode, MarginMode);\n var ptr0 = margin_mode.__destroy_into_raw();\n wasm.bulletwasm_calculate_perp_unrealized_pnl(retptr, ptr0, addHeapObject(user_account), addHeapObject(risk_engine));\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);\n var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);\n var ptr2 = r0;\n var len2 = r1;\n if (r3) {\n ptr2 = 0; len2 = 0;\n throw takeObject(r2);\n }\n deferred3_0 = ptr2;\n deferred3_1 = len2;\n return getStringFromWasm0(ptr2, len2);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n wasm.__wbindgen_export4(deferred3_0, deferred3_1, 1);\n }\n }\n /**\n * @param {any} user_account\n * @param {any} risk_engine\n * @param {any} exchange_info\n * @returns {any}\n */\n static calculate_positions_additional_metadata(user_account, risk_engine, exchange_info) {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n wasm.bulletwasm_calculate_positions_additional_metadata(retptr, addHeapObject(user_account), addHeapObject(risk_engine), addHeapObject(exchange_info));\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);\n if (r2) {\n throw takeObject(r1);\n }\n return takeObject(r0);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * @param {MarginMode} margin_mode\n * @param {any} user_account\n * @param {any} risk_engine\n * @returns {string}\n */\n static calculate_total_notional_assets(margin_mode, user_account, risk_engine) {\n let deferred3_0;\n let deferred3_1;\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n _assertClass(margin_mode, MarginMode);\n var ptr0 = margin_mode.__destroy_into_raw();\n wasm.bulletwasm_calculate_total_notional_assets(retptr, ptr0, addHeapObject(user_account), addHeapObject(risk_engine));\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);\n var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);\n var ptr2 = r0;\n var len2 = r1;\n if (r3) {\n ptr2 = 0; len2 = 0;\n throw takeObject(r2);\n }\n deferred3_0 = ptr2;\n deferred3_1 = len2;\n return getStringFromWasm0(ptr2, len2);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n wasm.__wbindgen_export4(deferred3_0, deferred3_1, 1);\n }\n }\n /**\n * @param {any} user_account\n * @param {any} risk_engine\n * @returns {string}\n */\n static calculate_total_notional_liabilities(user_account, risk_engine) {\n let deferred2_0;\n let deferred2_1;\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n wasm.bulletwasm_calculate_total_notional_liabilities(retptr, addHeapObject(user_account), addHeapObject(risk_engine));\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);\n var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);\n var ptr1 = r0;\n var len1 = r1;\n if (r3) {\n ptr1 = 0; len1 = 0;\n throw takeObject(r2);\n }\n deferred2_0 = ptr1;\n deferred2_1 = len1;\n return getStringFromWasm0(ptr1, len1);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n wasm.__wbindgen_export4(deferred2_0, deferred2_1, 1);\n }\n }\n /**\n * @param {any} user_account\n * @param {MarginType} margin_type\n * @param {any} risk_engine\n * @returns {string}\n */\n static calculate_used_borrow_lend_margin(user_account, margin_type, risk_engine) {\n let deferred2_0;\n let deferred2_1;\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n wasm.bulletwasm_calculate_used_borrow_lend_margin(retptr, addHeapObject(user_account), (__wbindgen_enum_MarginType.indexOf(margin_type) + 1 || 3) - 1, addHeapObject(risk_engine));\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);\n var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);\n var ptr1 = r0;\n var len1 = r1;\n if (r3) {\n ptr1 = 0; len1 = 0;\n throw takeObject(r2);\n }\n deferred2_0 = ptr1;\n deferred2_1 = len1;\n return getStringFromWasm0(ptr1, len1);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n wasm.__wbindgen_export4(deferred2_0, deferred2_1, 1);\n }\n }\n /**\n * @param {MarginMode} margin_mode\n * @param {any} user_account\n * @param {boolean} withdrawal\n * @param {MarginType} margin_type\n * @param {any} risk_engine\n * @returns {string}\n */\n static calculate_used_margin(margin_mode, user_account, withdrawal, margin_type, risk_engine) {\n let deferred3_0;\n let deferred3_1;\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n _assertClass(margin_mode, MarginMode);\n var ptr0 = margin_mode.__destroy_into_raw();\n wasm.bulletwasm_calculate_used_margin(retptr, ptr0, addHeapObject(user_account), withdrawal, (__wbindgen_enum_MarginType.indexOf(margin_type) + 1 || 3) - 1, addHeapObject(risk_engine));\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);\n var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);\n var ptr2 = r0;\n var len2 = r1;\n if (r3) {\n ptr2 = 0; len2 = 0;\n throw takeObject(r2);\n }\n deferred3_0 = ptr2;\n deferred3_1 = len2;\n return getStringFromWasm0(ptr2, len2);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n wasm.__wbindgen_export4(deferred3_0, deferred3_1, 1);\n }\n }\n /**\n * @param {MarginMode} margin_mode\n * @param {any} user_account\n * @param {MarginType} margin_type\n * @param {any} risk_engine\n * @returns {string}\n */\n static calculate_used_perp_margin(margin_mode, user_account, margin_type, risk_engine) {\n let deferred3_0;\n let deferred3_1;\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n _assertClass(margin_mode, MarginMode);\n var ptr0 = margin_mode.__destroy_into_raw();\n wasm.bulletwasm_calculate_used_perp_margin(retptr, ptr0, addHeapObject(user_account), (__wbindgen_enum_MarginType.indexOf(margin_type) + 1 || 3) - 1, addHeapObject(risk_engine));\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);\n var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);\n var ptr2 = r0;\n var len2 = r1;\n if (r3) {\n ptr2 = 0; len2 = 0;\n throw takeObject(r2);\n }\n deferred3_0 = ptr2;\n deferred3_1 = len2;\n return getStringFromWasm0(ptr2, len2);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n wasm.__wbindgen_export4(deferred3_0, deferred3_1, 1);\n }\n }\n /**\n * @param {number} asset_id\n * @param {boolean} for_transfer_spot_collateral_or_sub_account\n * @param {any} user_account\n * @param {any} risk_engine\n * @param {any} exchange_info\n * @returns {string}\n */\n static calculate_withdrawable_amount_of_cross_margin_asset(asset_id, for_transfer_spot_collateral_or_sub_account, user_account, risk_engine, exchange_info) {\n let deferred2_0;\n let deferred2_1;\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n wasm.bulletwasm_calculate_withdrawable_amount_of_cross_margin_asset(retptr, asset_id, for_transfer_spot_collateral_or_sub_account, addHeapObject(user_account), addHeapObject(risk_engine), addHeapObject(exchange_info));\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);\n var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);\n var ptr1 = r0;\n var len1 = r1;\n if (r3) {\n ptr1 = 0; len1 = 0;\n throw takeObject(r2);\n }\n deferred2_0 = ptr1;\n deferred2_1 = len1;\n return getStringFromWasm0(ptr1, len1);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n wasm.__wbindgen_export4(deferred2_0, deferred2_1, 1);\n }\n }\n /**\n * @param {string} decimal_str\n * @returns {any}\n */\n static convert_rust_decimal_to_json(decimal_str) {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n const ptr0 = passStringToWasm0(decimal_str, wasm.__wbindgen_export, wasm.__wbindgen_export2);\n const len0 = WASM_VECTOR_LEN;\n wasm.bulletwasm_convert_rust_decimal_to_json(retptr, ptr0, len0);\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);\n if (r2) {\n throw takeObject(r1);\n }\n return takeObject(r0);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * @param {string} token_id\n * @returns {Uint8Array}\n */\n static convert_token_id_to_bytes(token_id) {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n const ptr0 = passStringToWasm0(token_id, wasm.__wbindgen_export, wasm.__wbindgen_export2);\n const len0 = WASM_VECTOR_LEN;\n wasm.bulletwasm_convert_token_id_to_bytes(retptr, ptr0, len0);\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);\n var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);\n if (r3) {\n throw takeObject(r2);\n }\n var v2 = getArrayU8FromWasm0(r0, r1).slice();\n wasm.__wbindgen_export4(r0, r1 * 1, 1);\n return v2;\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * @param {number} a\n * @returns {number}\n */\n static dummy(a) {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n wasm.bulletwasm_dummy(retptr, a);\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);\n if (r2) {\n throw takeObject(r1);\n }\n return r0 >>> 0;\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * @param {number} market_id\n * @param {any} risk_engine\n * @returns {string}\n */\n static estimate_hourly_funding_rate(market_id, risk_engine) {\n let deferred2_0;\n let deferred2_1;\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n wasm.bulletwasm_estimate_hourly_funding_rate(retptr, market_id, addHeapObject(risk_engine));\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);\n var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);\n var ptr1 = r0;\n var len1 = r1;\n if (r3) {\n ptr1 = 0; len1 = 0;\n throw takeObject(r2);\n }\n deferred2_0 = ptr1;\n deferred2_1 = len1;\n return getStringFromWasm0(ptr1, len1);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n wasm.__wbindgen_export4(deferred2_0, deferred2_1, 1);\n }\n }\n constructor() {\n const ret = wasm.bulletwasm_new();\n this.__wbg_ptr = ret;\n BulletWasmFinalization.register(this, this.__wbg_ptr, this);\n return this;\n }\n /**\n * @param {number} market_id\n * @param {any} new_order_args\n * @param {number} base_asset_id\n * @param {any} user_account\n * @param {any} risk_engine\n * @param {any} orderbook\n * @returns {any}\n */\n static simulate_cross_margin_estimated_liquidation_price_on_order(market_id, new_order_args, base_asset_id, user_account, risk_engine, orderbook) {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n wasm.bulletwasm_simulate_cross_margin_estimated_liquidation_price_on_order(retptr, market_id, addHeapObject(new_order_args), base_asset_id, addHeapObject(user_account), addHeapObject(risk_engine), addHeapObject(orderbook));\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);\n if (r2) {\n throw takeObject(r1);\n }\n return takeObject(r0);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * @param {number} asset_id\n * @param {string} borrow_amount\n * @param {any} user_account\n * @param {MarginType} margin_type\n * @param {any} risk_engine\n * @returns {any}\n */\n static simulate_used_cross_margin_on_borrow(asset_id, borrow_amount, user_account, margin_type, risk_engine) {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n const ptr0 = passStringToWasm0(borrow_amount, wasm.__wbindgen_export, wasm.__wbindgen_export2);\n const len0 = WASM_VECTOR_LEN;\n wasm.bulletwasm_simulate_used_cross_margin_on_borrow(retptr, asset_id, ptr0, len0, addHeapObject(user_account), (__wbindgen_enum_MarginType.indexOf(margin_type) + 1 || 3) - 1, addHeapObject(risk_engine));\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);\n if (r2) {\n throw takeObject(r1);\n }\n return takeObject(r0);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * @param {number} market_id\n * @param {any} new_order_args\n * @param {any} user_account\n * @param {any} risk_engine\n * @param {any} orderbook\n * @returns {any}\n */\n static simulate_used_cross_margin_on_order(market_id, new_order_args, user_account, risk_engine, orderbook) {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n wasm.bulletwasm_simulate_used_cross_margin_on_order(retptr, market_id, addHeapObject(new_order_args), addHeapObject(user_account), addHeapObject(risk_engine), addHeapObject(orderbook));\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);\n if (r2) {\n throw takeObject(r1);\n }\n return takeObject(r0);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n}\nif (Symbol.dispose) BulletWasm.prototype[Symbol.dispose] = BulletWasm.prototype.free;\n\nexport class MarginMode {\n static __wrap(ptr) {\n const obj = Object.create(MarginMode.prototype);\n obj.__wbg_ptr = ptr;\n MarginModeFinalization.register(obj, obj.__wbg_ptr, obj);\n return obj;\n }\n __destroy_into_raw() {\n const ptr = this.__wbg_ptr;\n this.__wbg_ptr = 0;\n MarginModeFinalization.unregister(this);\n return ptr;\n }\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_marginmode_free(ptr, 0);\n }\n /**\n * @returns {MarginMode}\n */\n static cross() {\n const ret = wasm.marginmode_cross();\n return MarginMode.__wrap(ret);\n }\n /**\n * @param {number} market_id\n * @returns {MarginMode}\n */\n static iso(market_id) {\n const ret = wasm.marginmode_iso(market_id);\n return MarginMode.__wrap(ret);\n }\n}\nif (Symbol.dispose) MarginMode.prototype[Symbol.dispose] = MarginMode.prototype.free;\nfunction __wbg_get_imports() {\n const import0 = {\n __proto__: null,\n __wbg_Error_bce6d499ff0a4aff: function(arg0, arg1) {\n const ret = Error(getStringFromWasm0(arg0, arg1));\n return addHeapObject(ret);\n },\n __wbg_Number_b7972a139bfbfdf0: function(arg0) {\n const ret = Number(getObject(arg0));\n return ret;\n },\n __wbg_String_8564e559799eccda: function(arg0, arg1) {\n const ret = String(getObject(arg1));\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export, wasm.__wbindgen_export2);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n },\n __wbg___wbindgen_bigint_get_as_i64_410e28c7b761ad83: function(arg0, arg1) {\n const v = getObject(arg1);\n const ret = typeof(v) === 'bigint' ? v : undefined;\n getDataViewMemory0().setBigInt64(arg0 + 8 * 1, isLikeNone(ret) ? BigInt(0) : ret, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, !isLikeNone(ret), true);\n },\n __wbg___wbindgen_boolean_get_2304fb8c853028c8: function(arg0) {\n const v = getObject(arg0);\n const ret = typeof(v) === 'boolean' ? v : undefined;\n return isLikeNone(ret) ? 0xFFFFFF : ret ? 1 : 0;\n },\n __wbg___wbindgen_debug_string_edece8177ad01481: function(arg0, arg1) {\n const ret = debugString(getObject(arg1));\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export, wasm.__wbindgen_export2);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n },\n __wbg___wbindgen_in_07056af4f902c445: function(arg0, arg1) {\n const ret = getObject(arg0) in getObject(arg1);\n return ret;\n },\n __wbg___wbindgen_is_bigint_aeae3893f30ed54e: function(arg0) {\n const ret = typeof(getObject(arg0)) === 'bigint';\n return ret;\n },\n __wbg___wbindgen_is_function_5cd60d5cf78b4eef: function(arg0) {\n const ret = typeof(getObject(arg0)) === 'function';\n return ret;\n },\n __wbg___wbindgen_is_object_b4593df85baada48: function(arg0) {\n const val = getObject(arg0);\n const ret = typeof(val) === 'object' && val !== null;\n return ret;\n },\n __wbg___wbindgen_is_string_dde0fd9020db4434: function(arg0) {\n const ret = typeof(getObject(arg0)) === 'string';\n return ret;\n },\n __wbg___wbindgen_is_undefined_35bb9f4c7fd651d5: function(arg0) {\n const ret = getObject(arg0) === undefined;\n return ret;\n },\n __wbg___wbindgen_jsval_eq_c0ed08b3e0f393b9: function(arg0, arg1) {\n const ret = getObject(arg0) === getObject(arg1);\n return ret;\n },\n __wbg___wbindgen_jsval_loose_eq_0ad77b7717db155c: function(arg0, arg1) {\n const ret = getObject(arg0) == getObject(arg1);\n return ret;\n },\n __wbg___wbindgen_number_get_f73a1244370fcc2c: function(arg0, arg1) {\n const obj = getObject(arg1);\n const ret = typeof(obj) === 'number' ? obj : undefined;\n getDataViewMemory0().setFloat64(arg0 + 8 * 1, isLikeNone(ret) ? 0 : ret, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, !isLikeNone(ret), true);\n },\n __wbg___wbindgen_string_get_d109740c0d18f4d7: function(arg0, arg1) {\n const obj = getObject(arg1);\n const ret = typeof(obj) === 'string' ? obj : undefined;\n var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_export, wasm.__wbindgen_export2);\n var len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n },\n __wbg___wbindgen_throw_9c31b086c2b26051: function(arg0, arg1) {\n throw new Error(getStringFromWasm0(arg0, arg1));\n },\n __wbg_call_13665d9f14390edc: function() { return handleError(function (arg0, arg1) {\n const ret = getObject(arg0).call(getObject(arg1));\n return addHeapObject(ret);\n }, arguments); },\n __wbg_done_54b8da57023b7ed2: function(arg0) {\n const ret = getObject(arg0).done;\n return ret;\n },\n __wbg_entries_564a7e8b1e54ede5: function(arg0) {\n const ret = Object.entries(getObject(arg0));\n return addHeapObject(ret);\n },\n __wbg_error_a6fa202b58aa1cd3: function(arg0, arg1) {\n let deferred0_0;\n let deferred0_1;\n try {\n deferred0_0 = arg0;\n deferred0_1 = arg1;\n console.error(getStringFromWasm0(arg0, arg1));\n } finally {\n wasm.__wbindgen_export4(deferred0_0, deferred0_1, 1);\n }\n },\n __wbg_get_3e9a707ab7d352eb: function() { return handleError(function (arg0, arg1) {\n const ret = Reflect.get(getObject(arg0), getObject(arg1));\n return addHeapObject(ret);\n }, arguments); },\n __wbg_get_98fdf51d029a75eb: function(arg0, arg1) {\n const ret = getObject(arg0)[arg1 >>> 0];\n return addHeapObject(ret);\n },\n __wbg_get_unchecked_1dfe6d05ad91d9b7: function(arg0, arg1) {\n const ret = getObject(arg0)[arg1 >>> 0];\n return addHeapObject(ret);\n },\n __wbg_get_with_ref_key_6412cf3094599694: function(arg0, arg1) {\n const ret = getObject(arg0)[getObject(arg1)];\n return addHeapObject(ret);\n },\n __wbg_instanceof_ArrayBuffer_53db37b06f6b9afe: function(arg0) {\n let result;\n try {\n result = getObject(arg0) instanceof ArrayBuffer;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n },\n __wbg_instanceof_Map_16f217b9a2a08d8c: function(arg0) {\n let result;\n try {\n result = getObject(arg0) instanceof Map;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n },\n __wbg_instanceof_Uint8Array_abd07d4bd221d50b: function(arg0) {\n let result;\n try {\n result = getObject(arg0) instanceof Uint8Array;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n },\n __wbg_isArray_94898ed3aad6947b: function(arg0) {\n const ret = Array.isArray(getObject(arg0));\n return ret;\n },\n __wbg_isSafeInteger_01e964d144ad3a55: function(arg0) {\n const ret = Number.isSafeInteger(getObject(arg0));\n return ret;\n },\n __wbg_iterator_1441b47f341dc34f: function() {\n const ret = Symbol.iterator;\n return addHeapObject(ret);\n },\n __wbg_length_2591a0f4f659a55c: function(arg0) {\n const ret = getObject(arg0).length;\n return ret;\n },\n __wbg_length_56fcd3e2b7e0299d: function(arg0) {\n const ret = getObject(arg0).length;\n return ret;\n },\n __wbg_new_02d162bc6cf02f60: function() {\n const ret = new Object();\n return addHeapObject(ret);\n },\n __wbg_new_070df68d66325372: function() {\n const ret = new Map();\n return addHeapObject(ret);\n },\n __wbg_new_227d7c05414eb861: function() {\n const ret = new Error();\n return addHeapObject(ret);\n },\n __wbg_new_310879b66b6e95e1: function() {\n const ret = new Array();\n return addHeapObject(ret);\n },\n __wbg_new_7ddec6de44ff8f5d: function(arg0) {\n const ret = new Uint8Array(getObject(arg0));\n return addHeapObject(ret);\n },\n __wbg_next_2a4e19f4f5083b0f: function(arg0) {\n const ret = getObject(arg0).next;\n return addHeapObject(ret);\n },\n __wbg_next_6429a146bf756f93: function() { return handleError(function (arg0) {\n const ret = getObject(arg0).next();\n return addHeapObject(ret);\n }, arguments); },\n __wbg_prototypesetcall_5f9bdc8d75e07276: function(arg0, arg1, arg2) {\n Uint8Array.prototype.set.call(getArrayU8FromWasm0(arg0, arg1), getObject(arg2));\n },\n __wbg_set_6be42768c690e380: function(arg0, arg1, arg2) {\n getObject(arg0)[takeObject(arg1)] = takeObject(arg2);\n },\n __wbg_set_78ea6a19f4818587: function(arg0, arg1, arg2) {\n getObject(arg0)[arg1 >>> 0] = takeObject(arg2);\n },\n __wbg_set_facb7a5914e0fa39: function(arg0, arg1, arg2) {\n const ret = getObject(arg0).set(getObject(arg1), getObject(arg2));\n return addHeapObject(ret);\n },\n __wbg_stack_3b0d974bbf31e44f: function(arg0, arg1) {\n const ret = getObject(arg1).stack;\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export, wasm.__wbindgen_export2);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n },\n __wbg_value_9cc0518af87a489c: function(arg0) {\n const ret = getObject(arg0).value;\n return addHeapObject(ret);\n },\n __wbindgen_cast_0000000000000001: function(arg0) {\n // Cast intrinsic for `F64 -> Externref`.\n const ret = arg0;\n return addHeapObject(ret);\n },\n __wbindgen_cast_0000000000000002: function(arg0) {\n // Cast intrinsic for `I64 -> Externref`.\n const ret = arg0;\n return addHeapObject(ret);\n },\n __wbindgen_cast_0000000000000003: function(arg0, arg1) {\n // Cast intrinsic for `Ref(String) -> Externref`.\n const ret = getStringFromWasm0(arg0, arg1);\n return addHeapObject(ret);\n },\n __wbindgen_cast_0000000000000004: function(arg0) {\n // Cast intrinsic for `U64 -> Externref`.\n const ret = BigInt.asUintN(64, arg0);\n return addHeapObject(ret);\n },\n __wbindgen_object_clone_ref: function(arg0) {\n const ret = getObject(arg0);\n return addHeapObject(ret);\n },\n __wbindgen_object_drop_ref: function(arg0) {\n takeObject(arg0);\n },\n };\n return {\n __proto__: null,\n \"./bullet_wasm_bg.js\": import0,\n };\n}\n\nconst __wbindgen_enum_EquityType = [\"unweighted\", \"weighted_initial\", \"weighted_maintenance\"];\n\n\nconst __wbindgen_enum_MarginType = [\"initial\", \"maintenance\"];\n\n\nconst __wbindgen_enum_OrderType = [\"limit\", \"post_only\", \"fill_or_kill\", \"immediate_or_cancel\", \"post_only_slide\", \"post_only_front\"];\n\n\nconst __wbindgen_enum_Side = [\"bid\", \"ask\"];\nconst BulletWasmFinalization = (typeof FinalizationRegistry === 'undefined')\n ? { register: () => {}, unregister: () => {} }\n : new FinalizationRegistry(ptr => wasm.__wbg_bulletwasm_free(ptr, 1));\nconst MarginModeFinalization = (typeof FinalizationRegistry === 'undefined')\n ? { register: () => {}, unregister: () => {} }\n : new FinalizationRegistry(ptr => wasm.__wbg_marginmode_free(ptr, 1));\n\nfunction addHeapObject(obj) {\n if (heap_next === heap.length) heap.push(heap.length + 1);\n const idx = heap_next;\n heap_next = heap[idx];\n\n heap[idx] = obj;\n return idx;\n}\n\nfunction _assertClass(instance, klass) {\n if (!(instance instanceof klass)) {\n throw new Error(`expected instance of ${klass.name}`);\n }\n}\n\nfunction debugString(val) {\n // primitive types\n const type = typeof val;\n if (type == 'number' || type == 'boolean' || val == null) {\n return `${val}`;\n }\n if (type == 'string') {\n return `\"${val}\"`;\n }\n if (type == 'symbol') {\n const description = val.description;\n if (description == null) {\n return 'Symbol';\n } else {\n return `Symbol(${description})`;\n }\n }\n if (type == 'function') {\n const name = val.name;\n if (typeof name == 'string' && name.length > 0) {\n return `Function(${name})`;\n } else {\n return 'Function';\n }\n }\n // objects\n if (Array.isArray(val)) {\n const length = val.length;\n let debug = '[';\n if (length > 0) {\n debug += debugString(val[0]);\n }\n for(let i = 1; i < length; i++) {\n debug += ', ' + debugString(val[i]);\n }\n debug += ']';\n return debug;\n }\n // Test for built-in\n const builtInMatches = /\\[object ([^\\]]+)\\]/.exec(toString.call(val));\n let className;\n if (builtInMatches && builtInMatches.length > 1) {\n className = builtInMatches[1];\n } else {\n // Failed to match the standard '[object ClassName]'\n return toString.call(val);\n }\n if (className == 'Object') {\n // we're a user defined class or Object\n // JSON.stringify avoids problems with cycles, and is generally much\n // easier than looping through ownProperties of `val`.\n try {\n return 'Object(' + JSON.stringify(val) + ')';\n } catch (_) {\n return 'Object';\n }\n }\n // errors\n if (val instanceof Error) {\n return `${val.name}: ${val.message}\\n${val.stack}`;\n }\n // TODO we could test for more things here, like `Set`s and `Map`s.\n return className;\n}\n\nfunction dropObject(idx) {\n if (idx < 1028) return;\n heap[idx] = heap_next;\n heap_next = idx;\n}\n\nfunction getArrayU8FromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return getUint8ArrayMemory0().subarray(ptr / 1, ptr / 1 + len);\n}\n\nlet cachedDataViewMemory0 = null;\nfunction getDataViewMemory0() {\n if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || (cachedDataViewMemory0.buffer.detached === undefined && cachedDataViewMemory0.buffer !== wasm.memory.buffer)) {\n cachedDataViewMemory0 = new DataView(wasm.memory.buffer);\n }\n return cachedDataViewMemory0;\n}\n\nfunction getStringFromWasm0(ptr, len) {\n return decodeText(ptr >>> 0, len);\n}\n\nlet cachedUint8ArrayMemory0 = null;\nfunction getUint8ArrayMemory0() {\n if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {\n cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);\n }\n return cachedUint8ArrayMemory0;\n}\n\nfunction getObject(idx) { return heap[idx]; }\n\nfunction handleError(f, args) {\n try {\n return f.apply(this, args);\n } catch (e) {\n wasm.__wbindgen_export3(addHeapObject(e));\n }\n}\n\nlet heap = new Array(1024).fill(undefined);\nheap.push(undefined, null, true, false);\n\nlet heap_next = heap.length;\n\nfunction isLikeNone(x) {\n return x === undefined || x === null;\n}\n\nfunction passStringToWasm0(arg, malloc, realloc) {\n if (realloc === undefined) {\n const buf = cachedTextEncoder.encode(arg);\n const ptr = malloc(buf.length, 1) >>> 0;\n getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf);\n WASM_VECTOR_LEN = buf.length;\n return ptr;\n }\n\n let len = arg.length;\n let ptr = malloc(len, 1) >>> 0;\n\n const mem = getUint8ArrayMemory0();\n\n let offset = 0;\n\n for (; offset < len; offset++) {\n const code = arg.charCodeAt(offset);\n if (code > 0x7F) break;\n mem[ptr + offset] = code;\n }\n if (offset !== len) {\n if (offset !== 0) {\n arg = arg.slice(offset);\n }\n ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;\n const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len);\n const ret = cachedTextEncoder.encodeInto(arg, view);\n\n offset += ret.written;\n ptr = realloc(ptr, len, offset, 1) >>> 0;\n }\n\n WASM_VECTOR_LEN = offset;\n return ptr;\n}\n\nfunction takeObject(idx) {\n const ret = getObject(idx);\n dropObject(idx);\n return ret;\n}\n\nlet cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });\ncachedTextDecoder.decode();\nconst MAX_SAFARI_DECODE_BYTES = 2146435072;\nlet numBytesDecoded = 0;\nfunction decodeText(ptr, len) {\n numBytesDecoded += len;\n if (numBytesDecoded >= MAX_SAFARI_DECODE_BYTES) {\n cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });\n cachedTextDecoder.decode();\n numBytesDecoded = len;\n }\n return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));\n}\n\nconst cachedTextEncoder = new TextEncoder();\n\nif (!('encodeInto' in cachedTextEncoder)) {\n cachedTextEncoder.encodeInto = function (arg, view) {\n const buf = cachedTextEncoder.encode(arg);\n view.set(buf);\n return {\n read: arg.length,\n written: buf.length\n };\n };\n}\n\nlet WASM_VECTOR_LEN = 0;\n\nlet wasmModule, wasmInstance, wasm;\nfunction __wbg_finalize_init(instance, module) {\n wasmInstance = instance;\n wasm = instance.exports;\n wasmModule = module;\n cachedDataViewMemory0 = null;\n cachedUint8ArrayMemory0 = null;\n return wasm;\n}\n\nasync function __wbg_load(module, imports) {\n if (typeof Response === 'function' && module instanceof Response) {\n if (typeof WebAssembly.instantiateStreaming === 'function') {\n try {\n return await WebAssembly.instantiateStreaming(module, imports);\n } catch (e) {\n const validResponse = module.ok && expectedResponseType(module.type);\n\n if (validResponse && module.headers.get('Content-Type') !== 'application/wasm') {\n console.warn(\"`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\\n\", e);\n\n } else { throw e; }\n }\n }\n\n const bytes = await module.arrayBuffer();\n return await WebAssembly.instantiate(bytes, imports);\n } else {\n const instance = await WebAssembly.instantiate(module, imports);\n\n if (instance instanceof WebAssembly.Instance) {\n return { instance, module };\n } else {\n return instance;\n }\n }\n\n function expectedResponseType(type) {\n switch (type) {\n case 'basic': case 'cors': case 'default': return true;\n }\n return false;\n }\n}\n\nfunction initSync(module) {\n if (wasm !== undefined) return wasm;\n\n\n if (module !== undefined) {\n if (Object.getPrototypeOf(module) === Object.prototype) {\n ({module} = module)\n } else {\n console.warn('using deprecated parameters for `initSync()`; pass a single object instead')\n }\n }\n\n const imports = __wbg_get_imports();\n if (!(module instanceof WebAssembly.Module)) {\n module = new WebAssembly.Module(module);\n }\n const instance = new WebAssembly.Instance(module, imports);\n return __wbg_finalize_init(instance, module);\n}\n\nasync function __wbg_init(module_or_path) {\n if (wasm !== undefined) return wasm;\n\n\n if (module_or_path !== undefined) {\n if (Object.getPrototypeOf(module_or_path) === Object.prototype) {\n ({module_or_path} = module_or_path)\n } else {\n console.warn('using deprecated parameters for the initialization function; pass a single object instead')\n }\n }\n\n if (module_or_path === undefined) {\n module_or_path = new URL('bullet_wasm_bg.wasm', import.meta.url);\n }\n const imports = __wbg_get_imports();\n\n if (typeof module_or_path === 'string' || (typeof Request === 'function' && module_or_path instanceof Request) || (typeof URL === 'function' && module_or_path instanceof URL)) {\n module_or_path = fetch(module_or_path);\n }\n\n const { instance, module } = await __wbg_load(await module_or_path, imports);\n\n return __wbg_finalize_init(instance, module);\n}\n\nexport { initSync, __wbg_init as default };\n",
|
|
8
8
|
"import wasm_init, { BulletWasm, MarginMode } from \"./wasm-glue.js\";\nexport type { EquityType, MarginType } from \"./wasm-glue.js\";\n\nlet initialized = false;\nlet initPromise: Promise<void> | null = null;\n\nconst isNode =\n typeof globalThis.process !== \"undefined\" &&\n !!globalThis.process.versions?.node;\n\n// Bundler-opaque dynamic import — prevents webpack/esbuild from statically\n// resolving node: specifiers, avoiding \"Reading from node:module is not\n// handled by plugins\" errors in browser bundles that include this file.\n// biome-ignore lint/security/noGlobalEval: intentionally opaque to bundlers\nconst _import: (specifier: string) => Promise<any> = new Function(\n \"s\",\n \"return import(s)\",\n) as any;\n\n/**\n * Resolve the WASM binary for Node.js / SSR environments.\n *\n * When bundlers like Turbopack use the \"browser\" export condition during SSR\n * (standard Next.js behavior), `import.meta.url` gets rewritten to a relative\n * path (e.g. `/_next/static/media/bullet_wasm_bg.xxx.wasm`) that can't be\n * fetched in Node.js. We detect this and read the .wasm from disk instead.\n *\n * Resolution strategy (in order):\n * 1. file:// URL → fs.readFile(url.pathname)\n * 2. Absolute fs path (not bundler-rewritten) → fs.readFile(path)\n * 3. Locate .wasm via require.resolve() from CWD (most reliable for bundled SSR)\n * 4. Try .next/static/media/ path (Turbopack output location)\n * 5. Fall through → return as-is for wasm_init to attempt fetch()\n *\n * @see https://nickb.dev/blog/recommendations-when-publishing-a-wasm-library/\n * @see https://github.com/vercel/next.js/issues/25852\n */\nasync function resolveWasmForNode(\n source: URL | string,\n): Promise<Uint8Array | URL | string> {\n const { readFile } = await _import(\"node:fs/promises\");\n\n // Case 1: file:// URL — standard Node.js ESM resolution (unbundled)\n if (source instanceof URL && source.protocol === \"file:\") {\n // Decode the pathname directly instead of importing node:url (which Bun\n // polyfills into the browser bundle). file:// URLs use the pathname field.\n return readFile(decodeURIComponent(source.pathname));\n }\n\n // Case 2: Absolute filesystem path (not a bundler-rewritten /_next/... path)\n if (\n typeof source === \"string\" &&\n source.startsWith(\"/\") &&\n !source.startsWith(\"/_\")\n ) {\n try {\n return await readFile(source);\n } catch {\n // Fall through to case 3\n }\n }\n\n // Case 3: Resolve from node_modules using CWD as the base.\n // NOTE: We use process.cwd() instead of import.meta.url because Turbopack\n // rewrites import.meta.url to a relative path that breaks createRequire().\n if (typeof source === \"string\" && !source.startsWith(\"http\")) {\n try {\n const { createRequire } = await _import(\"node:module\");\n const cwd = process.cwd();\n const require = createRequire(`${cwd}/package.json`);\n const pkgPath = require.resolve(\n \"@bulletxyz/bullet-sdk/package.json\",\n );\n const sep = pkgPath.includes(\"\\\\\") ? \"\\\\\" : \"/\";\n const pkgDir = pkgPath.substring(0, pkgPath.lastIndexOf(sep));\n const wasmPath = `${pkgDir}/dist/browser/bullet_wasm_bg.wasm`;\n return await readFile(wasmPath);\n } catch {\n // Package not resolvable — try Turbopack output path as last resort\n }\n\n // Case 4: Try the Turbopack output location (.next/static/media/...)\n try {\n const cwdPath = `${process.cwd()}/.next/${(source as string).replace(/^\\/_next\\//, \"\")}`;\n return await readFile(cwdPath);\n } catch {\n // Fall through\n }\n }\n\n // Couldn't resolve on disk — return as-is and let wasm_init try fetch()\n return source;\n}\n\n/**\n * Initialize the WASM module. Must be called (and awaited) before using BulletWasm.\n *\n * Accepts multiple source types to work across all deployment contexts:\n * - **No args**: Auto-detects via `import.meta.url` (works in Node.js and browsers)\n * - **String URL**: Fetched in browser, resolved from disk in Node.js\n * - **ArrayBuffer / Uint8Array**: Used directly (pre-loaded WASM binary)\n * - **Response**: Streaming compilation via WebAssembly.compileStreaming\n *\n * In SSR contexts (Next.js `next build`), the browser bundle may be used on\n * the server. The function detects Node.js and reads the WASM from disk\n * instead of attempting fetch().\n *\n * @see https://nickb.dev/blog/recommendations-when-publishing-a-wasm-library/\n */\nexport async function initialize(\n wasmSource?: URL | string | ArrayBuffer | Uint8Array | Response,\n): Promise<void> {\n if (initialized) return;\n if (initPromise) return initPromise;\n\n initPromise = (async () => {\n let source: URL | string | ArrayBuffer | Uint8Array | Response;\n if (wasmSource != null) {\n source = wasmSource;\n } else {\n try {\n source = new URL(\"./bullet_wasm_bg.wasm\", import.meta.url);\n } catch {\n // Bundler (Turbopack, Vite, etc.) rewrote import.meta.url to a relative\n // path like /_next/static/media/... which isn't a valid URL base.\n // Fall back to a filename that resolveWasmForNode can locate in node_modules.\n source = \"bullet_wasm_bg.wasm\";\n }\n }\n\n // In Node.js (including Next.js SSR where bundlers use the \"browser\" export\n // condition on the server), URLs and relative paths aren't fetchable.\n // Read the WASM binary from the filesystem instead.\n if (isNode && (source instanceof URL || typeof source === \"string\")) {\n // Turbopack rewrites `new URL(\"./file\", import.meta.url)` into a URL\n // whose href is a relative path like `/_next/static/media/...`.\n // Convert non-file:// URLs to strings so the resolver can handle them.\n if (source instanceof URL && source.protocol !== \"file:\") {\n source = source.href;\n }\n source = await resolveWasmForNode(source);\n }\n\n await wasm_init({ module_or_path: source });\n initialized = true;\n })().catch((err) => {\n initPromise = null;\n throw err;\n });\n\n return initPromise;\n}\n\nexport { BulletWasm, MarginMode };\n",
|
|
9
9
|
"/**\n * Utilities for hex, bytes, CSPRNG.\n * @module\n */\n/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// node.js versions earlier than v19 don't declare it in global scope.\n// For node.js, package.json#exports field mapping rewrites import\n// from `crypto` to `cryptoNode`, which imports native module.\n// Makes the utils un-importable in browsers without a bundler.\n// Once node.js 18 is deprecated (2025-04-30), we can just drop the import.\nimport { crypto } from '@noble/hashes/crypto';\n/** Checks if something is Uint8Array. Be careful: nodejs Buffer will return true. */\nexport function isBytes(a) {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n/** Asserts something is positive integer. */\nexport function anumber(n) {\n if (!Number.isSafeInteger(n) || n < 0)\n throw new Error('positive integer expected, got ' + n);\n}\n/** Asserts something is Uint8Array. */\nexport function abytes(b, ...lengths) {\n if (!isBytes(b))\n throw new Error('Uint8Array expected');\n if (lengths.length > 0 && !lengths.includes(b.length))\n throw new Error('Uint8Array expected of length ' + lengths + ', got length=' + b.length);\n}\n/** Asserts something is hash */\nexport function ahash(h) {\n if (typeof h !== 'function' || typeof h.create !== 'function')\n throw new Error('Hash should be wrapped by utils.createHasher');\n anumber(h.outputLen);\n anumber(h.blockLen);\n}\n/** Asserts a hash instance has not been destroyed / finished */\nexport function aexists(instance, checkFinished = true) {\n if (instance.destroyed)\n throw new Error('Hash instance has been destroyed');\n if (checkFinished && instance.finished)\n throw new Error('Hash#digest() has already been called');\n}\n/** Asserts output is properly-sized byte array */\nexport function aoutput(out, instance) {\n abytes(out);\n const min = instance.outputLen;\n if (out.length < min) {\n throw new Error('digestInto() expects output buffer of length at least ' + min);\n }\n}\n/** Cast u8 / u16 / u32 to u8. */\nexport function u8(arr) {\n return new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n/** Cast u8 / u16 / u32 to u32. */\nexport function u32(arr) {\n return new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n}\n/** Zeroize a byte array. Warning: JS provides no guarantees. */\nexport function clean(...arrays) {\n for (let i = 0; i < arrays.length; i++) {\n arrays[i].fill(0);\n }\n}\n/** Create DataView of an array for easy byte-level manipulation. */\nexport function createView(arr) {\n return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n/** The rotate right (circular right shift) operation for uint32 */\nexport function rotr(word, shift) {\n return (word << (32 - shift)) | (word >>> shift);\n}\n/** The rotate left (circular left shift) operation for uint32 */\nexport function rotl(word, shift) {\n return (word << shift) | ((word >>> (32 - shift)) >>> 0);\n}\n/** Is current platform little-endian? Most are. Big-Endian platform: IBM */\nexport const isLE = /* @__PURE__ */ (() => new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44)();\n/** The byte swap operation for uint32 */\nexport function byteSwap(word) {\n return (((word << 24) & 0xff000000) |\n ((word << 8) & 0xff0000) |\n ((word >>> 8) & 0xff00) |\n ((word >>> 24) & 0xff));\n}\n/** Conditionally byte swap if on a big-endian platform */\nexport const swap8IfBE = isLE\n ? (n) => n\n : (n) => byteSwap(n);\n/** @deprecated */\nexport const byteSwapIfBE = swap8IfBE;\n/** In place byte swap for Uint32Array */\nexport function byteSwap32(arr) {\n for (let i = 0; i < arr.length; i++) {\n arr[i] = byteSwap(arr[i]);\n }\n return arr;\n}\nexport const swap32IfBE = isLE\n ? (u) => u\n : byteSwap32;\n// Built-in hex conversion https://caniuse.com/mdn-javascript_builtins_uint8array_fromhex\nconst hasHexBuiltin = /* @__PURE__ */ (() => \n// @ts-ignore\ntypeof Uint8Array.from([]).toHex === 'function' && typeof Uint8Array.fromHex === 'function')();\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, '0'));\n/**\n * Convert byte array to hex string. Uses built-in function, when available.\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes) {\n abytes(bytes);\n // @ts-ignore\n if (hasHexBuiltin)\n return bytes.toHex();\n // pre-caching improves the speed 6x\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += hexes[bytes[i]];\n }\n return hex;\n}\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 };\nfunction asciiToBase16(ch) {\n if (ch >= asciis._0 && ch <= asciis._9)\n return ch - asciis._0; // '2' => 50-48\n if (ch >= asciis.A && ch <= asciis.F)\n return ch - (asciis.A - 10); // 'B' => 66-(65-10)\n if (ch >= asciis.a && ch <= asciis.f)\n return ch - (asciis.a - 10); // 'b' => 98-(97-10)\n return;\n}\n/**\n * Convert hex string to byte array. Uses built-in function, when available.\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex) {\n if (typeof hex !== 'string')\n throw new Error('hex string expected, got ' + typeof hex);\n // @ts-ignore\n if (hasHexBuiltin)\n return Uint8Array.fromHex(hex);\n const hl = hex.length;\n const al = hl / 2;\n if (hl % 2)\n throw new Error('hex string expected, got unpadded hex of length ' + hl);\n const array = new Uint8Array(al);\n for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n const n1 = asciiToBase16(hex.charCodeAt(hi));\n const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n if (n1 === undefined || n2 === undefined) {\n const char = hex[hi] + hex[hi + 1];\n throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n }\n array[ai] = n1 * 16 + n2; // multiply first octet, e.g. 'a3' => 10*16+3 => 160 + 3 => 163\n }\n return array;\n}\n/**\n * There is no setImmediate in browser and setTimeout is slow.\n * Call of async fn will return Promise, which will be fullfiled only on\n * next scheduler queue processing step and this is exactly what we need.\n */\nexport const nextTick = async () => { };\n/** Returns control to thread each 'tick' ms to avoid blocking. */\nexport async function asyncLoop(iters, tick, cb) {\n let ts = Date.now();\n for (let i = 0; i < iters; i++) {\n cb(i);\n // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n const diff = Date.now() - ts;\n if (diff >= 0 && diff < tick)\n continue;\n await nextTick();\n ts += diff;\n }\n}\n/**\n * Converts string to bytes using UTF8 encoding.\n * @example utf8ToBytes('abc') // Uint8Array.from([97, 98, 99])\n */\nexport function utf8ToBytes(str) {\n if (typeof str !== 'string')\n throw new Error('string expected');\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n/**\n * Converts bytes to string using UTF8 encoding.\n * @example bytesToUtf8(Uint8Array.from([97, 98, 99])) // 'abc'\n */\nexport function bytesToUtf8(bytes) {\n return new TextDecoder().decode(bytes);\n}\n/**\n * Normalizes (non-hex) string or Uint8Array to Uint8Array.\n * Warning: when Uint8Array is passed, it would NOT get copied.\n * Keep in mind for future mutable operations.\n */\nexport function toBytes(data) {\n if (typeof data === 'string')\n data = utf8ToBytes(data);\n abytes(data);\n return data;\n}\n/**\n * Helper for KDFs: consumes uint8array or string.\n * When string is passed, does utf8 decoding, using TextDecoder.\n */\nexport function kdfInputToBytes(data) {\n if (typeof data === 'string')\n data = utf8ToBytes(data);\n abytes(data);\n return data;\n}\n/** Copies several Uint8Arrays into one. */\nexport function concatBytes(...arrays) {\n let sum = 0;\n for (let i = 0; i < arrays.length; i++) {\n const a = arrays[i];\n abytes(a);\n sum += a.length;\n }\n const res = new Uint8Array(sum);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const a = arrays[i];\n res.set(a, pad);\n pad += a.length;\n }\n return res;\n}\nexport function checkOpts(defaults, opts) {\n if (opts !== undefined && {}.toString.call(opts) !== '[object Object]')\n throw new Error('options should be object or undefined');\n const merged = Object.assign(defaults, opts);\n return merged;\n}\n/** For runtime check if class implements interface */\nexport class Hash {\n}\n/** Wraps hash function, creating an interface on top of it */\nexport function createHasher(hashCons) {\n const hashC = (msg) => hashCons().update(toBytes(msg)).digest();\n const tmp = hashCons();\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = () => hashCons();\n return hashC;\n}\nexport function createOptHasher(hashCons) {\n const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({});\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts) => hashCons(opts);\n return hashC;\n}\nexport function createXOFer(hashCons) {\n const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({});\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts) => hashCons(opts);\n return hashC;\n}\nexport const wrapConstructor = createHasher;\nexport const wrapConstructorWithOpts = createOptHasher;\nexport const wrapXOFConstructorWithOpts = createXOFer;\n/** Cryptographically secure PRNG. Uses internal OS-level `crypto.getRandomValues`. */\nexport function randomBytes(bytesLength = 32) {\n if (crypto && typeof crypto.getRandomValues === 'function') {\n return crypto.getRandomValues(new Uint8Array(bytesLength));\n }\n // Legacy Node.js compatibility\n if (crypto && typeof crypto.randomBytes === 'function') {\n return Uint8Array.from(crypto.randomBytes(bytesLength));\n }\n throw new Error('crypto.getRandomValues must be defined');\n}\n//# sourceMappingURL=utils.js.map",
|
|
10
10
|
"/**\n * Internal Merkle-Damgard hash utils.\n * @module\n */\nimport { Hash, abytes, aexists, aoutput, clean, createView, toBytes } from \"./utils.js\";\n/** Polyfill for Safari 14. https://caniuse.com/mdn-javascript_builtins_dataview_setbiguint64 */\nexport function setBigUint64(view, byteOffset, value, isLE) {\n if (typeof view.setBigUint64 === 'function')\n return view.setBigUint64(byteOffset, value, isLE);\n const _32n = BigInt(32);\n const _u32_max = BigInt(0xffffffff);\n const wh = Number((value >> _32n) & _u32_max);\n const wl = Number(value & _u32_max);\n const h = isLE ? 4 : 0;\n const l = isLE ? 0 : 4;\n view.setUint32(byteOffset + h, wh, isLE);\n view.setUint32(byteOffset + l, wl, isLE);\n}\n/** Choice: a ? b : c */\nexport function Chi(a, b, c) {\n return (a & b) ^ (~a & c);\n}\n/** Majority function, true if any two inputs is true. */\nexport function Maj(a, b, c) {\n return (a & b) ^ (a & c) ^ (b & c);\n}\n/**\n * Merkle-Damgard hash construction base class.\n * Could be used to create MD5, RIPEMD, SHA1, SHA2.\n */\nexport class HashMD extends Hash {\n constructor(blockLen, outputLen, padOffset, isLE) {\n super();\n this.finished = false;\n this.length = 0;\n this.pos = 0;\n this.destroyed = false;\n this.blockLen = blockLen;\n this.outputLen = outputLen;\n this.padOffset = padOffset;\n this.isLE = isLE;\n this.buffer = new Uint8Array(blockLen);\n this.view = createView(this.buffer);\n }\n update(data) {\n aexists(this);\n data = toBytes(data);\n abytes(data);\n const { view, buffer, blockLen } = this;\n const len = data.length;\n for (let pos = 0; pos < len;) {\n const take = Math.min(blockLen - this.pos, len - pos);\n // Fast path: we have at least one block in input, cast it to view and process\n if (take === blockLen) {\n const dataView = createView(data);\n for (; blockLen <= len - pos; pos += blockLen)\n this.process(dataView, pos);\n continue;\n }\n buffer.set(data.subarray(pos, pos + take), this.pos);\n this.pos += take;\n pos += take;\n if (this.pos === blockLen) {\n this.process(view, 0);\n this.pos = 0;\n }\n }\n this.length += data.length;\n this.roundClean();\n return this;\n }\n digestInto(out) {\n aexists(this);\n aoutput(out, this);\n this.finished = true;\n // Padding\n // We can avoid allocation of buffer for padding completely if it\n // was previously not allocated here. But it won't change performance.\n const { buffer, view, blockLen, isLE } = this;\n let { pos } = this;\n // append the bit '1' to the message\n buffer[pos++] = 0b10000000;\n clean(this.buffer.subarray(pos));\n // we have less than padOffset left in buffer, so we cannot put length in\n // current block, need process it and pad again\n if (this.padOffset > blockLen - pos) {\n this.process(view, 0);\n pos = 0;\n }\n // Pad until full block byte with zeros\n for (let i = pos; i < blockLen; i++)\n buffer[i] = 0;\n // Note: sha512 requires length to be 128bit integer, but length in JS will overflow before that\n // You need to write around 2 exabytes (u64_max / 8 / (1024**6)) for this to happen.\n // So we just write lowest 64 bits of that value.\n setBigUint64(view, blockLen - 8, BigInt(this.length * 8), isLE);\n this.process(view, 0);\n const oview = createView(out);\n const len = this.outputLen;\n // NOTE: we do division by 4 later, which should be fused in single op with modulo by JIT\n if (len % 4)\n throw new Error('_sha2: outputLen should be aligned to 32bit');\n const outLen = len / 4;\n const state = this.get();\n if (outLen > state.length)\n throw new Error('_sha2: outputLen bigger than state');\n for (let i = 0; i < outLen; i++)\n oview.setUint32(4 * i, state[i], isLE);\n }\n digest() {\n const { buffer, outputLen } = this;\n this.digestInto(buffer);\n const res = buffer.slice(0, outputLen);\n this.destroy();\n return res;\n }\n _cloneInto(to) {\n to || (to = new this.constructor());\n to.set(...this.get());\n const { blockLen, buffer, length, finished, destroyed, pos } = this;\n to.destroyed = destroyed;\n to.finished = finished;\n to.length = length;\n to.pos = pos;\n if (length % blockLen)\n to.buffer.set(buffer);\n return to;\n }\n clone() {\n return this._cloneInto();\n }\n}\n/**\n * Initial SHA-2 state: fractional parts of square roots of first 16 primes 2..53.\n * Check out `test/misc/sha2-gen-iv.js` for recomputation guide.\n */\n/** Initial SHA256 state. Bits 0..32 of frac part of sqrt of primes 2..19 */\nexport const SHA256_IV = /* @__PURE__ */ Uint32Array.from([\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19,\n]);\n/** Initial SHA224 state. Bits 32..64 of frac part of sqrt of primes 23..53 */\nexport const SHA224_IV = /* @__PURE__ */ Uint32Array.from([\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4,\n]);\n/** Initial SHA384 state. Bits 0..64 of frac part of sqrt of primes 23..53 */\nexport const SHA384_IV = /* @__PURE__ */ Uint32Array.from([\n 0xcbbb9d5d, 0xc1059ed8, 0x629a292a, 0x367cd507, 0x9159015a, 0x3070dd17, 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31, 0x8eb44a87, 0x68581511, 0xdb0c2e0d, 0x64f98fa7, 0x47b5481d, 0xbefa4fa4,\n]);\n/** Initial SHA512 state. Bits 0..64 of frac part of sqrt of primes 2..19 */\nexport const SHA512_IV = /* @__PURE__ */ Uint32Array.from([\n 0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179,\n]);\n//# sourceMappingURL=_md.js.map",
|
|
11
11
|
"/**\n * SHA2 hash function. A.k.a. sha256, sha384, sha512, sha512_224, sha512_256.\n * SHA256 is the fastest hash implementable in JS, even faster than Blake3.\n * Check out [RFC 4634](https://datatracker.ietf.org/doc/html/rfc4634) and\n * [FIPS 180-4](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf).\n * @module\n */\nimport { Chi, HashMD, Maj, SHA224_IV, SHA256_IV, SHA384_IV, SHA512_IV } from \"./_md.js\";\nimport * as u64 from \"./_u64.js\";\nimport { clean, createHasher, rotr } from \"./utils.js\";\n/**\n * Round constants:\n * First 32 bits of fractional parts of the cube roots of the first 64 primes 2..311)\n */\n// prettier-ignore\nconst SHA256_K = /* @__PURE__ */ Uint32Array.from([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n]);\n/** Reusable temporary buffer. \"W\" comes straight from spec. */\nconst SHA256_W = /* @__PURE__ */ new Uint32Array(64);\nexport class SHA256 extends HashMD {\n constructor(outputLen = 32) {\n super(64, outputLen, 8, false);\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n this.A = SHA256_IV[0] | 0;\n this.B = SHA256_IV[1] | 0;\n this.C = SHA256_IV[2] | 0;\n this.D = SHA256_IV[3] | 0;\n this.E = SHA256_IV[4] | 0;\n this.F = SHA256_IV[5] | 0;\n this.G = SHA256_IV[6] | 0;\n this.H = SHA256_IV[7] | 0;\n }\n get() {\n const { A, B, C, D, E, F, G, H } = this;\n return [A, B, C, D, E, F, G, H];\n }\n // prettier-ignore\n set(A, B, C, D, E, F, G, H) {\n this.A = A | 0;\n this.B = B | 0;\n this.C = C | 0;\n this.D = D | 0;\n this.E = E | 0;\n this.F = F | 0;\n this.G = G | 0;\n this.H = H | 0;\n }\n process(view, offset) {\n // Extend the first 16 words into the remaining 48 words w[16..63] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4)\n SHA256_W[i] = view.getUint32(offset, false);\n for (let i = 16; i < 64; i++) {\n const W15 = SHA256_W[i - 15];\n const W2 = SHA256_W[i - 2];\n const s0 = rotr(W15, 7) ^ rotr(W15, 18) ^ (W15 >>> 3);\n const s1 = rotr(W2, 17) ^ rotr(W2, 19) ^ (W2 >>> 10);\n SHA256_W[i] = (s1 + SHA256_W[i - 7] + s0 + SHA256_W[i - 16]) | 0;\n }\n // Compression function main loop, 64 rounds\n let { A, B, C, D, E, F, G, H } = this;\n for (let i = 0; i < 64; i++) {\n const sigma1 = rotr(E, 6) ^ rotr(E, 11) ^ rotr(E, 25);\n const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const sigma0 = rotr(A, 2) ^ rotr(A, 13) ^ rotr(A, 22);\n const T2 = (sigma0 + Maj(A, B, C)) | 0;\n H = G;\n G = F;\n F = E;\n E = (D + T1) | 0;\n D = C;\n C = B;\n B = A;\n A = (T1 + T2) | 0;\n }\n // Add the compressed chunk to the current hash value\n A = (A + this.A) | 0;\n B = (B + this.B) | 0;\n C = (C + this.C) | 0;\n D = (D + this.D) | 0;\n E = (E + this.E) | 0;\n F = (F + this.F) | 0;\n G = (G + this.G) | 0;\n H = (H + this.H) | 0;\n this.set(A, B, C, D, E, F, G, H);\n }\n roundClean() {\n clean(SHA256_W);\n }\n destroy() {\n this.set(0, 0, 0, 0, 0, 0, 0, 0);\n clean(this.buffer);\n }\n}\nexport class SHA224 extends SHA256 {\n constructor() {\n super(28);\n this.A = SHA224_IV[0] | 0;\n this.B = SHA224_IV[1] | 0;\n this.C = SHA224_IV[2] | 0;\n this.D = SHA224_IV[3] | 0;\n this.E = SHA224_IV[4] | 0;\n this.F = SHA224_IV[5] | 0;\n this.G = SHA224_IV[6] | 0;\n this.H = SHA224_IV[7] | 0;\n }\n}\n// SHA2-512 is slower than sha256 in js because u64 operations are slow.\n// Round contants\n// First 32 bits of the fractional parts of the cube roots of the first 80 primes 2..409\n// prettier-ignore\nconst K512 = /* @__PURE__ */ (() => u64.split([\n '0x428a2f98d728ae22', '0x7137449123ef65cd', '0xb5c0fbcfec4d3b2f', '0xe9b5dba58189dbbc',\n '0x3956c25bf348b538', '0x59f111f1b605d019', '0x923f82a4af194f9b', '0xab1c5ed5da6d8118',\n '0xd807aa98a3030242', '0x12835b0145706fbe', '0x243185be4ee4b28c', '0x550c7dc3d5ffb4e2',\n '0x72be5d74f27b896f', '0x80deb1fe3b1696b1', '0x9bdc06a725c71235', '0xc19bf174cf692694',\n '0xe49b69c19ef14ad2', '0xefbe4786384f25e3', '0x0fc19dc68b8cd5b5', '0x240ca1cc77ac9c65',\n '0x2de92c6f592b0275', '0x4a7484aa6ea6e483', '0x5cb0a9dcbd41fbd4', '0x76f988da831153b5',\n '0x983e5152ee66dfab', '0xa831c66d2db43210', '0xb00327c898fb213f', '0xbf597fc7beef0ee4',\n '0xc6e00bf33da88fc2', '0xd5a79147930aa725', '0x06ca6351e003826f', '0x142929670a0e6e70',\n '0x27b70a8546d22ffc', '0x2e1b21385c26c926', '0x4d2c6dfc5ac42aed', '0x53380d139d95b3df',\n '0x650a73548baf63de', '0x766a0abb3c77b2a8', '0x81c2c92e47edaee6', '0x92722c851482353b',\n '0xa2bfe8a14cf10364', '0xa81a664bbc423001', '0xc24b8b70d0f89791', '0xc76c51a30654be30',\n '0xd192e819d6ef5218', '0xd69906245565a910', '0xf40e35855771202a', '0x106aa07032bbd1b8',\n '0x19a4c116b8d2d0c8', '0x1e376c085141ab53', '0x2748774cdf8eeb99', '0x34b0bcb5e19b48a8',\n '0x391c0cb3c5c95a63', '0x4ed8aa4ae3418acb', '0x5b9cca4f7763e373', '0x682e6ff3d6b2b8a3',\n '0x748f82ee5defb2fc', '0x78a5636f43172f60', '0x84c87814a1f0ab72', '0x8cc702081a6439ec',\n '0x90befffa23631e28', '0xa4506cebde82bde9', '0xbef9a3f7b2c67915', '0xc67178f2e372532b',\n '0xca273eceea26619c', '0xd186b8c721c0c207', '0xeada7dd6cde0eb1e', '0xf57d4f7fee6ed178',\n '0x06f067aa72176fba', '0x0a637dc5a2c898a6', '0x113f9804bef90dae', '0x1b710b35131c471b',\n '0x28db77f523047d84', '0x32caab7b40c72493', '0x3c9ebe0a15c9bebc', '0x431d67c49c100d4c',\n '0x4cc5d4becb3e42b6', '0x597f299cfc657e2a', '0x5fcb6fab3ad6faec', '0x6c44198c4a475817'\n].map(n => BigInt(n))))();\nconst SHA512_Kh = /* @__PURE__ */ (() => K512[0])();\nconst SHA512_Kl = /* @__PURE__ */ (() => K512[1])();\n// Reusable temporary buffers\nconst SHA512_W_H = /* @__PURE__ */ new Uint32Array(80);\nconst SHA512_W_L = /* @__PURE__ */ new Uint32Array(80);\nexport class SHA512 extends HashMD {\n constructor(outputLen = 64) {\n super(128, outputLen, 16, false);\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n // h -- high 32 bits, l -- low 32 bits\n this.Ah = SHA512_IV[0] | 0;\n this.Al = SHA512_IV[1] | 0;\n this.Bh = SHA512_IV[2] | 0;\n this.Bl = SHA512_IV[3] | 0;\n this.Ch = SHA512_IV[4] | 0;\n this.Cl = SHA512_IV[5] | 0;\n this.Dh = SHA512_IV[6] | 0;\n this.Dl = SHA512_IV[7] | 0;\n this.Eh = SHA512_IV[8] | 0;\n this.El = SHA512_IV[9] | 0;\n this.Fh = SHA512_IV[10] | 0;\n this.Fl = SHA512_IV[11] | 0;\n this.Gh = SHA512_IV[12] | 0;\n this.Gl = SHA512_IV[13] | 0;\n this.Hh = SHA512_IV[14] | 0;\n this.Hl = SHA512_IV[15] | 0;\n }\n // prettier-ignore\n get() {\n const { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n return [Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl];\n }\n // prettier-ignore\n set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl) {\n this.Ah = Ah | 0;\n this.Al = Al | 0;\n this.Bh = Bh | 0;\n this.Bl = Bl | 0;\n this.Ch = Ch | 0;\n this.Cl = Cl | 0;\n this.Dh = Dh | 0;\n this.Dl = Dl | 0;\n this.Eh = Eh | 0;\n this.El = El | 0;\n this.Fh = Fh | 0;\n this.Fl = Fl | 0;\n this.Gh = Gh | 0;\n this.Gl = Gl | 0;\n this.Hh = Hh | 0;\n this.Hl = Hl | 0;\n }\n process(view, offset) {\n // Extend the first 16 words into the remaining 64 words w[16..79] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4) {\n SHA512_W_H[i] = view.getUint32(offset);\n SHA512_W_L[i] = view.getUint32((offset += 4));\n }\n for (let i = 16; i < 80; i++) {\n // s0 := (w[i-15] rightrotate 1) xor (w[i-15] rightrotate 8) xor (w[i-15] rightshift 7)\n const W15h = SHA512_W_H[i - 15] | 0;\n const W15l = SHA512_W_L[i - 15] | 0;\n const s0h = u64.rotrSH(W15h, W15l, 1) ^ u64.rotrSH(W15h, W15l, 8) ^ u64.shrSH(W15h, W15l, 7);\n const s0l = u64.rotrSL(W15h, W15l, 1) ^ u64.rotrSL(W15h, W15l, 8) ^ u64.shrSL(W15h, W15l, 7);\n // s1 := (w[i-2] rightrotate 19) xor (w[i-2] rightrotate 61) xor (w[i-2] rightshift 6)\n const W2h = SHA512_W_H[i - 2] | 0;\n const W2l = SHA512_W_L[i - 2] | 0;\n const s1h = u64.rotrSH(W2h, W2l, 19) ^ u64.rotrBH(W2h, W2l, 61) ^ u64.shrSH(W2h, W2l, 6);\n const s1l = u64.rotrSL(W2h, W2l, 19) ^ u64.rotrBL(W2h, W2l, 61) ^ u64.shrSL(W2h, W2l, 6);\n // SHA256_W[i] = s0 + s1 + SHA256_W[i - 7] + SHA256_W[i - 16];\n const SUMl = u64.add4L(s0l, s1l, SHA512_W_L[i - 7], SHA512_W_L[i - 16]);\n const SUMh = u64.add4H(SUMl, s0h, s1h, SHA512_W_H[i - 7], SHA512_W_H[i - 16]);\n SHA512_W_H[i] = SUMh | 0;\n SHA512_W_L[i] = SUMl | 0;\n }\n let { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n // Compression function main loop, 80 rounds\n for (let i = 0; i < 80; i++) {\n // S1 := (e rightrotate 14) xor (e rightrotate 18) xor (e rightrotate 41)\n const sigma1h = u64.rotrSH(Eh, El, 14) ^ u64.rotrSH(Eh, El, 18) ^ u64.rotrBH(Eh, El, 41);\n const sigma1l = u64.rotrSL(Eh, El, 14) ^ u64.rotrSL(Eh, El, 18) ^ u64.rotrBL(Eh, El, 41);\n //const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const CHIh = (Eh & Fh) ^ (~Eh & Gh);\n const CHIl = (El & Fl) ^ (~El & Gl);\n // T1 = H + sigma1 + Chi(E, F, G) + SHA512_K[i] + SHA512_W[i]\n // prettier-ignore\n const T1ll = u64.add5L(Hl, sigma1l, CHIl, SHA512_Kl[i], SHA512_W_L[i]);\n const T1h = u64.add5H(T1ll, Hh, sigma1h, CHIh, SHA512_Kh[i], SHA512_W_H[i]);\n const T1l = T1ll | 0;\n // S0 := (a rightrotate 28) xor (a rightrotate 34) xor (a rightrotate 39)\n const sigma0h = u64.rotrSH(Ah, Al, 28) ^ u64.rotrBH(Ah, Al, 34) ^ u64.rotrBH(Ah, Al, 39);\n const sigma0l = u64.rotrSL(Ah, Al, 28) ^ u64.rotrBL(Ah, Al, 34) ^ u64.rotrBL(Ah, Al, 39);\n const MAJh = (Ah & Bh) ^ (Ah & Ch) ^ (Bh & Ch);\n const MAJl = (Al & Bl) ^ (Al & Cl) ^ (Bl & Cl);\n Hh = Gh | 0;\n Hl = Gl | 0;\n Gh = Fh | 0;\n Gl = Fl | 0;\n Fh = Eh | 0;\n Fl = El | 0;\n ({ h: Eh, l: El } = u64.add(Dh | 0, Dl | 0, T1h | 0, T1l | 0));\n Dh = Ch | 0;\n Dl = Cl | 0;\n Ch = Bh | 0;\n Cl = Bl | 0;\n Bh = Ah | 0;\n Bl = Al | 0;\n const All = u64.add3L(T1l, sigma0l, MAJl);\n Ah = u64.add3H(All, T1h, sigma0h, MAJh);\n Al = All | 0;\n }\n // Add the compressed chunk to the current hash value\n ({ h: Ah, l: Al } = u64.add(this.Ah | 0, this.Al | 0, Ah | 0, Al | 0));\n ({ h: Bh, l: Bl } = u64.add(this.Bh | 0, this.Bl | 0, Bh | 0, Bl | 0));\n ({ h: Ch, l: Cl } = u64.add(this.Ch | 0, this.Cl | 0, Ch | 0, Cl | 0));\n ({ h: Dh, l: Dl } = u64.add(this.Dh | 0, this.Dl | 0, Dh | 0, Dl | 0));\n ({ h: Eh, l: El } = u64.add(this.Eh | 0, this.El | 0, Eh | 0, El | 0));\n ({ h: Fh, l: Fl } = u64.add(this.Fh | 0, this.Fl | 0, Fh | 0, Fl | 0));\n ({ h: Gh, l: Gl } = u64.add(this.Gh | 0, this.Gl | 0, Gh | 0, Gl | 0));\n ({ h: Hh, l: Hl } = u64.add(this.Hh | 0, this.Hl | 0, Hh | 0, Hl | 0));\n this.set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl);\n }\n roundClean() {\n clean(SHA512_W_H, SHA512_W_L);\n }\n destroy() {\n clean(this.buffer);\n this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\n }\n}\nexport class SHA384 extends SHA512 {\n constructor() {\n super(48);\n this.Ah = SHA384_IV[0] | 0;\n this.Al = SHA384_IV[1] | 0;\n this.Bh = SHA384_IV[2] | 0;\n this.Bl = SHA384_IV[3] | 0;\n this.Ch = SHA384_IV[4] | 0;\n this.Cl = SHA384_IV[5] | 0;\n this.Dh = SHA384_IV[6] | 0;\n this.Dl = SHA384_IV[7] | 0;\n this.Eh = SHA384_IV[8] | 0;\n this.El = SHA384_IV[9] | 0;\n this.Fh = SHA384_IV[10] | 0;\n this.Fl = SHA384_IV[11] | 0;\n this.Gh = SHA384_IV[12] | 0;\n this.Gl = SHA384_IV[13] | 0;\n this.Hh = SHA384_IV[14] | 0;\n this.Hl = SHA384_IV[15] | 0;\n }\n}\n/**\n * Truncated SHA512/256 and SHA512/224.\n * SHA512_IV is XORed with 0xa5a5a5a5a5a5a5a5, then used as \"intermediary\" IV of SHA512/t.\n * Then t hashes string to produce result IV.\n * See `test/misc/sha2-gen-iv.js`.\n */\n/** SHA512/224 IV */\nconst T224_IV = /* @__PURE__ */ Uint32Array.from([\n 0x8c3d37c8, 0x19544da2, 0x73e19966, 0x89dcd4d6, 0x1dfab7ae, 0x32ff9c82, 0x679dd514, 0x582f9fcf,\n 0x0f6d2b69, 0x7bd44da8, 0x77e36f73, 0x04c48942, 0x3f9d85a8, 0x6a1d36c8, 0x1112e6ad, 0x91d692a1,\n]);\n/** SHA512/256 IV */\nconst T256_IV = /* @__PURE__ */ Uint32Array.from([\n 0x22312194, 0xfc2bf72c, 0x9f555fa3, 0xc84c64c2, 0x2393b86b, 0x6f53b151, 0x96387719, 0x5940eabd,\n 0x96283ee2, 0xa88effe3, 0xbe5e1e25, 0x53863992, 0x2b0199fc, 0x2c85b8aa, 0x0eb72ddc, 0x81c52ca2,\n]);\nexport class SHA512_224 extends SHA512 {\n constructor() {\n super(28);\n this.Ah = T224_IV[0] | 0;\n this.Al = T224_IV[1] | 0;\n this.Bh = T224_IV[2] | 0;\n this.Bl = T224_IV[3] | 0;\n this.Ch = T224_IV[4] | 0;\n this.Cl = T224_IV[5] | 0;\n this.Dh = T224_IV[6] | 0;\n this.Dl = T224_IV[7] | 0;\n this.Eh = T224_IV[8] | 0;\n this.El = T224_IV[9] | 0;\n this.Fh = T224_IV[10] | 0;\n this.Fl = T224_IV[11] | 0;\n this.Gh = T224_IV[12] | 0;\n this.Gl = T224_IV[13] | 0;\n this.Hh = T224_IV[14] | 0;\n this.Hl = T224_IV[15] | 0;\n }\n}\nexport class SHA512_256 extends SHA512 {\n constructor() {\n super(32);\n this.Ah = T256_IV[0] | 0;\n this.Al = T256_IV[1] | 0;\n this.Bh = T256_IV[2] | 0;\n this.Bl = T256_IV[3] | 0;\n this.Ch = T256_IV[4] | 0;\n this.Cl = T256_IV[5] | 0;\n this.Dh = T256_IV[6] | 0;\n this.Dl = T256_IV[7] | 0;\n this.Eh = T256_IV[8] | 0;\n this.El = T256_IV[9] | 0;\n this.Fh = T256_IV[10] | 0;\n this.Fl = T256_IV[11] | 0;\n this.Gh = T256_IV[12] | 0;\n this.Gl = T256_IV[13] | 0;\n this.Hh = T256_IV[14] | 0;\n this.Hl = T256_IV[15] | 0;\n }\n}\n/**\n * SHA2-256 hash function from RFC 4634.\n *\n * It is the fastest JS hash, even faster than Blake3.\n * To break sha256 using birthday attack, attackers need to try 2^128 hashes.\n * BTC network is doing 2^70 hashes/sec (2^95 hashes/year) as per 2025.\n */\nexport const sha256 = /* @__PURE__ */ createHasher(() => new SHA256());\n/** SHA2-224 hash function from RFC 4634 */\nexport const sha224 = /* @__PURE__ */ createHasher(() => new SHA224());\n/** SHA2-512 hash function from RFC 4634. */\nexport const sha512 = /* @__PURE__ */ createHasher(() => new SHA512());\n/** SHA2-384 hash function from RFC 4634. */\nexport const sha384 = /* @__PURE__ */ createHasher(() => new SHA384());\n/**\n * SHA2-512/256 \"truncated\" hash function, with improved resistance to length extension attacks.\n * See the paper on [truncated SHA512](https://eprint.iacr.org/2010/548.pdf).\n */\nexport const sha512_256 = /* @__PURE__ */ createHasher(() => new SHA512_256());\n/**\n * SHA2-512/224 \"truncated\" hash function, with improved resistance to length extension attacks.\n * See the paper on [truncated SHA512](https://eprint.iacr.org/2010/548.pdf).\n */\nexport const sha512_224 = /* @__PURE__ */ createHasher(() => new SHA512_224());\n//# sourceMappingURL=sha2.js.map",
|
|
12
12
|
"// src/bank.ts\nimport { sha256 } from \"@noble/hashes/sha2\";\nimport { bech32m } from \"bech32\";\nfunction getHolderAddress(holder) {\n if (\"user\" in holder) return holder.user;\n if (\"module\" in holder) return holder.module;\n return holder.derived;\n}\nfunction getTokenId(originator, tokenName, decimals) {\n const nameBytes = new TextEncoder().encode(tokenName);\n const buffer = new Uint8Array(originator.length + nameBytes.length + 1);\n buffer.set(originator, 0);\n buffer.set(nameBytes, originator.length);\n buffer[originator.length + nameBytes.length] = decimals;\n const hash = sha256(buffer);\n hash[31] = decimals;\n return hash;\n}\nvar Bank = class {\n /**\n * Creates a new Bank instance.\n *\n * @param rollup - The rollup instance to use for HTTP requests\n */\n // biome-ignore lint/suspicious/noExplicitAny: types arent used\n constructor(rollup) {\n this.rollup = rollup;\n }\n /**\n * Gets the balance of a specific token for a given address.\n *\n * If no token ID is provided, the gas token balance will be returned.\n *\n * @param address - The address to query the balance for\n * @param tokenId - Optional token ID. If not provided, uses the gas token\n * @returns Promise resolving to the token balance as a bigint\n * @throws {SovereignClient.APIError} When the request fails for reasons other than missing account\n * @example\n * ```typescript\n * const bank = new Bank(rollup);\n * const balance = await bank.balance(\"0x123...\");\n * console.log(`Balance: ${balance}`);\n *\n * // Query specific token balance\n * const tokenBalance = await bank.balance(\"0x123...\", \"token_123\");\n * ```\n */\n async balance(address, tokenId) {\n const token = await this.tokenIdOrElseGasTokenId(tokenId);\n try {\n const response = await this.rollup.http.get(\n `/modules/bank/tokens/${token}/balances/${address}`\n );\n return BigInt(response.amount);\n } catch (err) {\n if (this.isMissingAccountError(err)) return BigInt(0);\n throw err;\n }\n }\n /**\n * Gets the metadata of a specific token.\n *\n * If no token ID is provided, returns the metadata of the gas token.\n *\n * @param tokenId - Optional token ID. If not provided, uses the gas token\n * @returns Promise resolving to the token metadata\n * @throws {SovereignClient.APIError} When the request fails\n * @example\n * ```typescript\n * const bank = new Bank(rollup);\n * const metadata = await bank.tokenMetadata();\n * console.log(`Token name: ${metadata.name}, decimals: ${metadata.decimals}`);\n *\n * // Query specific token metadata\n * const tokenMeta = await bank.tokenMetadata(\"token_123\");\n * ```\n */\n async tokenMetadata(tokenId) {\n const token = await this.tokenIdOrElseGasTokenId(tokenId);\n const response = await this.rollup.http.get(\n `/modules/bank/state/tokens/items/${token}`\n );\n const decoded = bech32m.decode(token);\n const bytes = bech32m.fromWords(decoded.words);\n const decimals = bytes[31];\n return {\n name: response.value.name,\n decimals,\n totalSupply: BigInt(response.value.total_supply),\n supplyCap: BigInt(response.value.supply_cap),\n admins: response.value.admins.map(getHolderAddress)\n };\n }\n /**\n * Gets the gas token identifier.\n *\n * The gas token ID is cached after the first request to avoid repeated API calls.\n *\n * @returns Promise resolving to the gas token ID as a string\n * @throws {Error} When the gas token ID cannot be retrieved\n * @example\n * ```typescript\n * const bank = new Bank(rollup);\n * const gasTokenId = await bank.gasTokenId();\n * console.log(`Gas token ID: ${gasTokenId}`);\n * ```\n */\n async gasTokenId() {\n if (this._gasTokenId) return this._gasTokenId;\n const response = await this.rollup.http.get(\n \"/modules/bank/tokens/gas_token\"\n );\n this._gasTokenId = response.token_id;\n return this._gasTokenId;\n }\n async tokenIdOrElseGasTokenId(tokenId) {\n return tokenId ?? this.gasTokenId();\n }\n // biome-ignore lint/suspicious/noExplicitAny: todo\n isMissingAccountError(anyError) {\n if (anyError?.status !== 404) return false;\n const body = anyError?.error;\n return body?.message?.startsWith(\"Balance\") && body?.message?.endsWith(\"not found\");\n }\n};\nexport {\n Bank,\n getTokenId\n};\n//# sourceMappingURL=index.mjs.map",
|
|
13
|
-
"import { getTokenId } from \"@sovereign-sdk/modules\";\nimport type { RollupSchema } from \"@sovereign-sdk/serializers\";\nimport { WasmSerializer } from \"@sovereign-sdk/serializers/wasm\";\nimport type { Transaction } from \"@sovereign-sdk/types\";\nimport {\n type Authenticator,\n createSolanaSignableRollup,\n type SolanaSignableRollup,\n type StandardRollupContext,\n type TransactionResult,\n VersionMismatchError,\n} from \"@sovereign-sdk/web3\";\n\nexport type { Authenticator };\n\nimport Decimal from \"decimal.js\";\nimport type { EquityType, MarginType } from \"./bullet-wasm/loader\";\nimport { BulletWasm, initialize, type MarginMode } from \"./bullet-wasm/loader\";\nimport { type Endpoints, NETWORKS } from \"./constants\";\nimport { BulletError } from \"./error\";\nimport type { Orderbook } from \"./orderbook\";\nimport type { RuntimeCall } from \"./rollupTypes\";\nimport type {\n Address,\n AdminType,\n AssetId,\n AssetName,\n FeeTier,\n MarketId,\n MarketMetadata,\n MarketName,\n MarkPriceUpdateArgs,\n Network,\n NewOrderArgs,\n NewTwapOrderArgs,\n OraclePriceUpdateArgs,\n OrderType,\n Side,\n SpotCollateralTransferDirection,\n TokenId,\n TpslPair,\n} from \"./types\";\nimport {\n base58ToBytes,\n isNetwork,\n isValidHttpUrl,\n serialize,\n serializeVersioned,\n validateEndpoints,\n} from \"./utils\";\nimport type { Wallet } from \"./wallet\";\nimport { WebSocketManager } from \"./websocket\";\nimport {\n type AccountAddresses,\n BaseResponseSchemas,\n type BorrowLendPool,\n type Delegate,\n type Delegates,\n type OrderbookL2,\n type PerpMarketConfig,\n ResponseSchemas,\n type SpotMarketConfig,\n type UserAccount,\n type VersionedExchangeAssets,\n type VersionedExchangeInfo,\n type VersionedExecutionIds,\n type VersionedPerpMarket,\n type VersionedRiskEngine,\n type VersionedSpotMarket,\n type VersionedUserAccountConfig,\n} from \"./zod-types/rest\";\nimport { WasmResponseSchemas } from \"./zod-types/wasm\";\n\n// Define transaction options struct\nexport interface TransactionOpts {\n /**\n * Maximum priority fee in basis points.\n * @default 0\n */\n maxPriorityFeeBps?: number;\n /**\n * Maximum fee for the transaction.\n * @default \"10000000000\"\n */\n maxFee?: string;\n /**\n * Gas limit for the transaction.\n * @default null\n */\n gasLimit?: number[] | null;\n /**\n * The authenticator scheme for this client. Set once at construction time\n * and used for all subsequent transactions — cannot be overridden per-call.\n *\n * This also determines how Decimal values are serialized:\n * - Solana authenticators use serde (string format, e.g. \"10000\")\n * - Standard authenticator uses Borsh (SurrogateDecimal { flags, hi, lo, mid })\n *\n * Options:\n *\n * - \"solanaAuto\": Auto-detect based on signer type (recommended for Solana wallets)\n * - Uses \"solana\" for LedgerSolanaSigner (with preamble)\n * - Uses \"solanaSimple\" for other Solana signers (no preamble)\n *\n * - \"solanaSimple\": For browser wallets (Phantom, Solflare, etc.) - no preamble\n * - Signs raw JSON bytes directly\n * - Smaller message size\n *\n * - \"solana\": For Ledger hardware wallets - with preamble\n * - Adds 85-byte preamble required by Ledger's signOffchainMessage API\n * - Provides metadata for Ledger's display\n *\n * - \"standard\": Standard Sovereign SDK authentication (not Solana off-chain)\n * - Uses the rollup's native authentication scheme\n * - For non-Solana wallets or when you need standard SDK auth\n * - Uses \"/sequencer/txs\" endpoint instead of \"/sequencer/accept-solana-offchain-tx\"\n *\n * @default \"standard\"\n */\n authenticator?: Authenticator;\n}\n\nfunction serializeExchangeInfoForWasm(exchangeInfo: VersionedExchangeInfo) {\n return serializeVersioned({\n version: exchangeInfo.version,\n data: {\n ...exchangeInfo.data,\n global_config: {\n ...exchangeInfo.data.global_config,\n pyth_lazer_trusted_signers: Array.from(\n exchangeInfo.data.global_config.pyth_lazer_trusted_signers,\n (signer) => Array.from(base58ToBytes(signer)),\n ),\n },\n },\n });\n}\n\nfunction wrapVersion<const V extends string, T>(\n version: V,\n data: T,\n): { [K in V]: T } {\n return { [version]: data } as { [K in V]: T };\n}\n\nfunction mapValues<K, V, R>(\n map: Map<K, V>,\n transform: (value: V) => R,\n): Map<K, R> {\n return new Map(\n Array.from(map.entries(), ([key, value]) => [key, transform(value)]),\n );\n}\n\nfunction serializeOrdersLedgerForWasm(\n ordersLedger: UserAccount[\"orders_ledger\"],\n) {\n return wrapVersion(\"V1\", {\n ...ordersLedger,\n perp_orders: mapValues(ordersLedger.perp_orders, (order) =>\n wrapVersion(\"V1\", order),\n ),\n spot_orders: mapValues(ordersLedger.spot_orders, (order) =>\n wrapVersion(\"V1\", order),\n ),\n });\n}\n\nfunction serializeUserAccountForWasm(userAccount: UserAccount) {\n return serializeVersioned({\n version: \"V1\",\n data: {\n ...userAccount,\n perp_ledgers: mapValues(userAccount.perp_ledgers, (ledger) =>\n wrapVersion(\"V1\", ledger),\n ),\n orders_ledger: serializeOrdersLedgerForWasm(userAccount.orders_ledger),\n },\n });\n}\n\n// Default transaction options\nconst DEFAULT_TRANSACTION_OPTS: Required<TransactionOpts> = {\n maxPriorityFeeBps: 0,\n maxFee: \"10000000000\",\n gasLimit: null,\n authenticator: \"standard\",\n};\n\ntype AmendOrderOptions =\n | {\n existingOrderId: bigint;\n existingClientOrderId?: never;\n newOrderArgs: NewOrderArgs;\n }\n | {\n existingOrderId?: never;\n existingClientOrderId: bigint;\n newOrderArgs: NewOrderArgs;\n };\n\ntype CancelOrderOptions =\n | {\n orderId: bigint;\n clientOrderId?: never;\n }\n | {\n orderId?: never;\n clientOrderId: bigint;\n };\n\ntype AssetInfo = {\n id: AssetId;\n name: AssetName;\n tokenId: TokenId | null;\n decimals: number;\n withdrawFee: string;\n};\n\n// Base class for read-only operations (no wallet required)\nexport class ReadOnlyClient {\n public rollup: SolanaSignableRollup<RuntimeCall>;\n public readonly endpoint: string;\n protected readonly wsManager?: WebSocketManager;\n protected assetInfoRegistry?: Map<AssetName, AssetInfo>;\n protected assetInfoRegistryReverse?: Map<AssetId, AssetInfo>;\n protected marketRegistry?: Map<MarketName, MarketMetadata>; // ID and type\n protected marketRegistryReverse?: Map<MarketId, MarketName>;\n protected generationOverride?: () => number;\n\n /**\n * @internal\n * Do not construct directly. Use Client.fromNetwork() or Client.fromEndpoints()\n */\n constructor(endpoints: Endpoints, rollup: SolanaSignableRollup<RuntimeCall>) {\n if (!isValidHttpUrl(endpoints.rest)) {\n throw new Error(`Invalid HTTP URL provided: ${endpoints.rest}`);\n }\n this.endpoint = endpoints.rest;\n this.rollup = rollup;\n if (endpoints.ws) {\n this.wsManager = new WebSocketManager(endpoints.ws);\n }\n // Initialize exchange info and registries asynchronously\n // Factory methods must await this separately\n }\n\n // Static convenience constructors (read-only, no wallet)\n public static async fromEndpoints(\n endpoints: Endpoints,\n ): Promise<ReadOnlyClient> {\n await initialize();\n validateEndpoints(endpoints);\n console.debug(`Connecting to ${endpoints.rest}`);\n\n const rollupConfig = {\n url: endpoints.rest,\n getSerializer: (schema: RollupSchema) => new WasmSerializer(schema),\n };\n\n // This endpoint is ONLY used for Solana offchain authenticators (\"solana\", \"solanaSimple\").\n // Standard authenticator (\"standard\") uses \"/sequencer/txs\" internally via the inner StandardRollup.\n //\n // Endpoint routing by authenticator:\n // - \"standard\" → /sequencer/txs (Borsh-serialized, handled by inner StandardRollup)\n // - \"solana\" → /sequencer/solana_offchain_txs (JSON, signed with Solana spec preamble)\n // - \"solanaSimple\" → /sequencer/solana_offchain_txs (JSON, simple signature)\n const solanaEndpoint = \"/sequencer/solana_offchain_txs\";\n const rollup = await createSolanaSignableRollup<RuntimeCall>(\n rollupConfig,\n solanaEndpoint,\n );\n const client = new ReadOnlyClient(endpoints, rollup);\n await client.initializeExchangeInfo();\n return client;\n }\n\n public static async fromNetwork(network: Network): Promise<ReadOnlyClient> {\n if (!isNetwork(network)) {\n throw new Error(`Invalid network: ${network}`);\n }\n return await ReadOnlyClient.fromEndpoints(NETWORKS[network]);\n }\n\n public setGenerationOverride(generation: (() => number) | undefined) {\n this.generationOverride = generation;\n }\n\n // HTTP methods for data fetching (errors bubble up naturally from Sovereign SDK)\n private async fetchApiResource<T>(\n path: string,\n params?: Record<string, string | undefined>,\n ): Promise<T> {\n return await this.rollup.http.get<T>(path, { query: params });\n }\n\n private async fetchBulkApiResource<T>(\n path: string,\n body: Record<string, unknown>,\n params?: Record<string, string>,\n ): Promise<T> {\n return await this.rollup.http.post<T>(path, { query: params, body });\n }\n\n /**\n * @internal\n * Initializes exchange info and registries. Called automatically by factory methods.\n */\n async initializeExchangeInfo(): Promise<void> {\n const exchangeInfo = await this.getExchangeInfo();\n if (!exchangeInfo) {\n throw new Error(\"Exchange info not found\");\n }\n\n this.assetInfoRegistry = new Map();\n this.assetInfoRegistryReverse = new Map();\n\n this.marketRegistry = new Map();\n this.marketRegistryReverse = new Map();\n\n for (const info of exchangeInfo.data.assets.values()) {\n if (info && typeof info.name === \"string\") {\n const transformedInfo = {\n id: info.id,\n name: info.name,\n tokenId: info.token_id,\n decimals: info.decimals,\n withdrawFee: info.withdraw_fee.toString(),\n };\n this.assetInfoRegistry.set(info.name, transformedInfo);\n this.assetInfoRegistryReverse.set(info.id, transformedInfo);\n }\n }\n\n for (const info of exchangeInfo.data.markets.values()) {\n if (info && typeof info.name === \"string\") {\n this.marketRegistry.set(info.name, {\n id: info.id,\n kind: info.kind,\n baseAssetId: info.base_asset_id,\n name: info.name,\n });\n this.marketRegistryReverse.set(info.id, info.name);\n }\n }\n }\n\n // ========================================================================\n // Public Read Methods (work without wallet)\n // ========================================================================\n\n public async getExchangeInfo(): Promise<VersionedExchangeInfo | null> {\n const path = \"/modules/exchange/state/exchange-info\";\n const response = await this.fetchApiResource(path);\n const parsed = ResponseSchemas.ExchangeInfo.parse(response);\n return parsed.value;\n }\n\n private getMarketMapping(): Map<MarketName, MarketMetadata> {\n if (!this.marketRegistry) {\n throw new Error(\"Market registry not initialized\");\n }\n return this.marketRegistry;\n }\n\n public getAssetInfo(asset: AssetName): AssetInfo {\n if (!this.assetInfoRegistry) {\n throw new Error(\"Asset registry not initialized\");\n }\n const assetInfo = this.assetInfoRegistry.get(asset);\n if (!assetInfo) {\n throw new Error(`Asset ${asset} not found`);\n }\n\n return assetInfo;\n }\n\n public getAssetId(asset: AssetName): AssetId {\n if (!this.assetInfoRegistry) {\n throw new Error(\"Asset registry not initialized\");\n }\n const assetInfo = this.assetInfoRegistry.get(asset);\n if (!assetInfo) {\n throw new Error(`Asset ${asset} not found`);\n }\n return assetInfo.id;\n }\n\n public getAssetName(assetId: AssetId): AssetName {\n if (!this.assetInfoRegistryReverse) {\n throw new Error(\"Asset registry not initialized\");\n }\n const assetInfo = this.assetInfoRegistryReverse.get(assetId);\n if (!assetInfo) {\n throw new Error(`Asset ${assetId} not found`);\n }\n return assetInfo.name;\n }\n\n public getTokenAddress(assetName: AssetName): TokenId {\n if (!this.assetInfoRegistry) {\n throw new Error(\n \"Asset registry not initialized. Call initializeRegistries() first.\",\n );\n }\n\n const assetInfo = this.assetInfoRegistry.get(assetName);\n if (!assetInfo?.tokenId) {\n throw new Error(`Token address not found for asset ${assetName}`);\n }\n\n return assetInfo.tokenId;\n }\n\n public getTokenAddresses(): Record<AssetName, TokenId> {\n if (!this.assetInfoRegistry) {\n throw new Error(\n \"Asset registry not initialized. Call initializeRegistries() first.\",\n );\n }\n\n const tokenAddresses: Record<AssetName, TokenId> = {};\n for (const [assetName, assetInfo] of this.assetInfoRegistry.entries()) {\n if (assetInfo.tokenId) {\n tokenAddresses[assetName] = assetInfo.tokenId;\n }\n }\n\n return tokenAddresses;\n }\n\n public getMarketId(market: MarketName): MarketId {\n return this.getMarketMeta(market).id;\n }\n\n public getMarketMeta(market: MarketName): MarketMetadata {\n const marketRegistry = this.getMarketMapping();\n const marketId = marketRegistry.get(market);\n if (marketId === undefined) {\n throw new Error(`Market ${market} not found`);\n }\n return marketId;\n }\n\n public getMarketName(marketId: MarketId): MarketName {\n if (!this.marketRegistryReverse) {\n throw new Error(\"Market registry not initialized\");\n }\n const marketName = this.marketRegistryReverse.get(marketId);\n if (marketName === undefined) {\n throw new Error(`Market ${marketId} not found`);\n }\n return marketName;\n }\n\n public async getOrderbookL2(\n market: MarketName,\n levels = 100,\n ): Promise<OrderbookL2> {\n const marketId = this.getMarketId(market);\n const path = `/modules/exchange/api/v1/orderbook-level2/${marketId}?levels=${levels}`;\n const response = await this.fetchApiResource(path);\n const parsed = ResponseSchemas.OrderbookL2.parse(response);\n return parsed.orderbook;\n }\n\n public async getOrderbookL2s(\n markets: MarketName[],\n levels = 100,\n ): Promise<Map<MarketId, OrderbookL2>> {\n const marketIds = markets.map((market) => {\n return this.getMarketId(market);\n });\n const path = \"/modules/exchange/api/v1/orderbook-level2/bulk\";\n const response = await this.fetchBulkApiResource(path, {\n requests: marketIds.map((marketId) => ({\n market_id: marketId,\n depth: levels,\n })),\n });\n const parsed = ResponseSchemas.OrderbookL2Bulk.parse(response);\n return parsed.found;\n }\n\n public async getChainId(): Promise<number> {\n const constants = await this.rollup.rollup.constants();\n return constants.chain_id;\n }\n\n public async getUserAccountAddresses(\n offset?: number,\n limit?: number,\n ): Promise<AccountAddresses> {\n const path = \"/modules/exchange/api/v1/account/addresses\";\n const response = await this.fetchApiResource(path, {\n offset: offset?.toString(),\n limit: limit?.toString(),\n });\n const parsed = ResponseSchemas.AccountAddresses.parse(response);\n return parsed;\n }\n\n public async getUserAccount(address: Address): Promise<UserAccount> {\n const path = `/modules/exchange/api/v1/account/${address}`;\n const response = await this.fetchApiResource(path);\n const parsed = ResponseSchemas.UserAccount.parse(response);\n return parsed.account;\n }\n\n public async getUserAccounts(\n addresses: Address[],\n ): Promise<Map<Address, UserAccount>> {\n const path = \"/modules/exchange/api/v1/account/bulk\";\n const response = await this.fetchBulkApiResource(path, {\n addresses,\n });\n const parsed = ResponseSchemas.UserAccountBulk.parse(response);\n return parsed.found;\n }\n\n public async getUserAccountConfig(\n address: Address,\n ): Promise<VersionedUserAccountConfig | null> {\n const path = `/modules/exchange/state/user-account-configs/items/${address}`;\n const response = await this.fetchApiResource(path);\n const parsed = ResponseSchemas.UserAccountConfig.parse(response);\n return parsed.value;\n }\n\n public async getDelegate(delegate: Address): Promise<Delegate> {\n const path = `/modules/exchange/api/v1/delegate/${delegate}`;\n const response = await this.fetchApiResource(path);\n const parsed = ResponseSchemas.Delegate.parse(response);\n return parsed;\n }\n\n /**\n * Get all delegates for a given delegator\n * @param delegator - The address of the delegator\n * @returns The delegates for the given delegator\n */\n public async getAllDelegates(delegator: Address): Promise<Delegates> {\n const path = `/modules/exchange/api/v1/delegates/${delegator}`;\n const response = await this.fetchApiResource(path);\n const parsed = ResponseSchemas.Delegates.parse(response);\n return parsed;\n }\n\n public async getExchangeAssets(): Promise<VersionedExchangeAssets | null> {\n const path = \"/modules/exchange/state/exchange-assets\";\n const response = await this.fetchApiResource(path);\n const parsed = ResponseSchemas.ExchangeAssets.parse(response);\n return parsed.value;\n }\n\n public async getRiskEngine(): Promise<VersionedRiskEngine | null> {\n const path = \"/modules/exchange/state/risk-engine\";\n const response = await this.fetchApiResource(path);\n const parsed = ResponseSchemas.RiskEngine.parse(response);\n return parsed.value;\n }\n\n public async getPerpMarket(market: MarketName): Promise<VersionedPerpMarket> {\n const marketId = this.getMarketId(market);\n const path = `/modules/exchange/api/v1/perp-market/${marketId}`;\n const response = await this.fetchApiResource(path);\n const parsed = ResponseSchemas.PerpMarket.parse(response);\n return parsed.market;\n }\n\n public async getPerpMarketsConfig(): Promise<\n Map<MarketId, PerpMarketConfig>\n > {\n const path = \"/modules/exchange/api/v1/perp-market/configs\";\n const response = await this.fetchApiResource(path);\n const parsed = ResponseSchemas.PerpMarketConfigs.parse(response);\n return parsed;\n }\n\n public async getSpotMarket(market: MarketName): Promise<VersionedSpotMarket> {\n const marketId = this.getMarketId(market);\n const path = `/modules/exchange/api/v1/spot-market/${marketId}`;\n const response = await this.fetchApiResource(path);\n const parsed = ResponseSchemas.SpotMarket.parse(response);\n return parsed.market;\n }\n\n public async getSpotMarketsConfig(): Promise<\n Map<MarketId, SpotMarketConfig>\n > {\n const path = \"/modules/exchange/api/v1/spot-market/configs\";\n const response = await this.fetchApiResource(path);\n const parsed = ResponseSchemas.SpotMarketConfigs.parse(response);\n return parsed;\n }\n\n public async getExecutionIds(): Promise<VersionedExecutionIds | null> {\n const path = \"/modules/exchange/state/execution-ids\";\n const response = await this.fetchApiResource(path);\n const parsed = ResponseSchemas.ExecutionIds.parse(response);\n return parsed.value;\n }\n\n public async getTokenBalance(\n tokenId: TokenId,\n address: Address,\n ): Promise<bigint> {\n const response = await this.fetchApiResource(\n `/modules/bank/tokens/${tokenId}/balances/${address}`,\n );\n const parsed = BaseResponseSchemas.CoinsResponse.parse(response);\n return parsed.amount;\n }\n\n public async getTotalSupply(tokenId: TokenId): Promise<bigint> {\n const response = await this.fetchApiResource(\n `/modules/bank/tokens/${tokenId}/total-supply`,\n );\n const parsed = BaseResponseSchemas.CoinsResponse.parse(response);\n return parsed.amount;\n }\n\n public async getGasTokenAddress(): Promise<TokenId> {\n const response = await this.fetchApiResource<{ token_id: TokenId }>(\n \"/modules/bank/tokens/gas_token\",\n );\n return response.token_id;\n }\n\n // ========================================================================\n // Calculation Methods\n // ========================================================================\n\n public calculateOrderbookMidpoint(\n orderbook: OrderbookL2,\n ): Decimal | undefined {\n if (orderbook.bids.length === 0 || orderbook.asks.length === 0) {\n return undefined;\n }\n const bestBid = orderbook.bids.reduce((max, bid) => {\n const keyDecimal = new Decimal(bid[0]);\n return max.greaterThan(keyDecimal) ? max : keyDecimal;\n }, new Decimal(Number.NEGATIVE_INFINITY));\n const bestAsk = orderbook.asks.reduce((min, ask) => {\n const keyDecimal = new Decimal(ask[0]);\n return min.lessThan(keyDecimal) ? min : keyDecimal;\n }, new Decimal(Number.POSITIVE_INFINITY));\n return bestBid.plus(bestAsk).div(2);\n }\n\n public calculateEntryPrice(\n market: MarketName,\n userAccount: UserAccount,\n ): Decimal {\n const marketId = this.getMarketId(market);\n const position = userAccount.perp_ledgers.get(marketId)?.position;\n if (!position) {\n throw new Error(\"No position found for asset\");\n }\n return position.cost_of_trades.div(position.size.abs());\n }\n\n public calculatePerpUnrealizedPnl(\n marginMode: MarginMode,\n userAccount: UserAccount,\n riskEngine: VersionedRiskEngine,\n ) {\n const userAccountObject = serializeUserAccountForWasm(userAccount);\n const riskEngineObject = serializeVersioned(riskEngine);\n const result = BulletWasm.calculate_perp_unrealized_pnl(\n marginMode,\n userAccountObject,\n riskEngineObject,\n );\n return new Decimal(result);\n }\n\n public calculateAccountEquity(\n marginMode: MarginMode,\n equityType: EquityType,\n conservative: boolean,\n userAccount: UserAccount,\n riskEngine: VersionedRiskEngine,\n ) {\n const userAccountObject = serializeUserAccountForWasm(userAccount);\n const riskEngineObject = serializeVersioned(riskEngine);\n const result = BulletWasm.calculate_account_equity(\n marginMode,\n userAccountObject,\n conservative,\n equityType,\n riskEngineObject,\n );\n return new Decimal(result);\n }\n\n public calculateAccountLeverage(\n marginMode: MarginMode,\n userAccount: UserAccount,\n riskEngine: VersionedRiskEngine,\n ) {\n const userAccountObject = serializeUserAccountForWasm(userAccount);\n const riskEngineObject = serializeVersioned(riskEngine);\n const result = BulletWasm.calculate_account_leverage(\n marginMode,\n userAccountObject,\n riskEngineObject,\n );\n return new Decimal(result);\n }\n\n public calculateAvailableMargin(\n marginMode: MarginMode,\n marginType: MarginType,\n conservative: boolean,\n userAccount: UserAccount,\n riskEngine: VersionedRiskEngine,\n ) {\n const userAccountObject = serializeUserAccountForWasm(userAccount);\n const riskEngineObject = serializeVersioned(riskEngine);\n const result = BulletWasm.calculate_available_margin(\n marginMode,\n userAccountObject,\n conservative,\n marginType,\n riskEngineObject,\n );\n return new Decimal(result);\n }\n\n public calculateUsedMargin(\n marginMode: MarginMode,\n withdrawal: boolean,\n marginType: MarginType,\n userAccount: UserAccount,\n riskEngine: VersionedRiskEngine,\n ) {\n const userAccountObject = serializeUserAccountForWasm(userAccount);\n const riskEngineObject = serializeVersioned(riskEngine);\n const result = BulletWasm.calculate_used_margin(\n marginMode,\n userAccountObject,\n withdrawal,\n marginType,\n riskEngineObject,\n );\n return new Decimal(result);\n }\n\n public calculateUsedPerpMargin(\n marginMode: MarginMode,\n userAccount: UserAccount,\n marginType: MarginType,\n riskEngine: VersionedRiskEngine,\n ) {\n const userAccountObject = serializeUserAccountForWasm(userAccount);\n const riskEngineObject = serializeVersioned(riskEngine);\n const result = BulletWasm.calculate_used_perp_margin(\n marginMode,\n userAccountObject,\n marginType,\n riskEngineObject,\n );\n return new Decimal(result);\n }\n\n public calculateUsedBorrowLendMargin(\n userAccount: UserAccount,\n marginType: MarginType,\n riskEngine: VersionedRiskEngine,\n ) {\n const userAccountObject = serializeUserAccountForWasm(userAccount);\n const riskEngineObject = serializeVersioned(riskEngine);\n const result = BulletWasm.calculate_used_borrow_lend_margin(\n userAccountObject,\n marginType,\n riskEngineObject,\n );\n return new Decimal(result);\n }\n\n public calculateEstimatedLiquidationPrice(\n marginMode: MarginMode,\n market: MarketName,\n userAccount: UserAccount,\n riskEngine: VersionedRiskEngine,\n ) {\n const marketId = this.getMarketId(market);\n const baseAssetId = this.getMarketMeta(market).baseAssetId;\n const userAccountObject = serializeUserAccountForWasm(userAccount);\n const riskEngineObject = serializeVersioned(riskEngine);\n const result = BulletWasm.calculate_estimated_liquidation_price(\n marginMode,\n userAccountObject,\n marketId,\n baseAssetId,\n riskEngineObject,\n );\n return new Decimal(result);\n }\n\n public calculateLiquidationRiskPercentage(\n marginMode: MarginMode,\n userAccount: UserAccount,\n riskEngine: VersionedRiskEngine,\n ) {\n const userAccountObject = serializeUserAccountForWasm(userAccount);\n const riskEngineObject = serializeVersioned(riskEngine);\n const result = BulletWasm.calculate_liquidation_risk_percentage(\n marginMode,\n userAccountObject,\n riskEngineObject,\n );\n return new Decimal(result);\n }\n\n public calculateMarginBalance(\n marginMode: MarginMode,\n userAccount: UserAccount,\n riskEngine: VersionedRiskEngine,\n ) {\n const userAccountObject = serializeUserAccountForWasm(userAccount);\n const riskEngineObject = serializeVersioned(riskEngine);\n const result = BulletWasm.calculate_margin_balance(\n marginMode,\n userAccountObject,\n riskEngineObject,\n );\n return WasmResponseSchemas.MarginBalanceSummarySchema.parse(result);\n }\n\n public calculatePerpMarginRequirement(\n marginMode: MarginMode,\n userAccount: UserAccount,\n marginType: MarginType,\n withdrawal: boolean,\n riskEngine: VersionedRiskEngine,\n ) {\n const userAccountObject = serializeUserAccountForWasm(userAccount);\n const riskEngineObject = serializeVersioned(riskEngine);\n const result = BulletWasm.calculate_perp_margin_requirement(\n marginMode,\n userAccountObject,\n marginType,\n withdrawal,\n riskEngineObject,\n );\n return new Decimal(result);\n }\n\n public calculateForceCancelRiskPercentage(\n marginMode: MarginMode,\n userAccount: UserAccount,\n riskEngine: VersionedRiskEngine,\n ) {\n const userAccountObject = serializeUserAccountForWasm(userAccount);\n const riskEngineObject = serializeVersioned(riskEngine);\n const result = BulletWasm.calculate_force_cancel_risk_percentage(\n marginMode,\n userAccountObject,\n riskEngineObject,\n );\n return new Decimal(result);\n }\n\n public calculateMaxBorrowAmount(\n asset: AssetName,\n userAccount: UserAccount,\n riskEngine: VersionedRiskEngine,\n ) {\n const assetId = this.getAssetId(asset);\n const userAccountObject = serializeUserAccountForWasm(userAccount);\n const riskEngineObject = serializeVersioned(riskEngine);\n const result = BulletWasm.calculate_max_borrow_amount(\n assetId,\n userAccountObject,\n riskEngineObject,\n );\n return new Decimal(result);\n }\n\n public calculateMaxOrderSize(\n marginMode: MarginMode,\n market: MarketName,\n price: Decimal,\n side: Side,\n orderType: OrderType,\n reduceOnly: boolean,\n userAccount: UserAccount,\n riskEngine: VersionedRiskEngine,\n orderbook: OrderbookL2,\n nIterations = 100,\n errorTolerance: Decimal = new Decimal(0.0001),\n ) {\n const marketId = this.getMarketId(market);\n const userAccountObject = serializeUserAccountForWasm(userAccount);\n const riskEngineObject = serializeVersioned(riskEngine);\n const orderbookObject = serialize(orderbook);\n const result = BulletWasm.calculate_max_order_size(\n marginMode,\n marketId,\n price.toFixed(),\n side,\n orderType,\n reduceOnly,\n userAccountObject,\n riskEngineObject,\n orderbookObject,\n nIterations,\n errorTolerance.toFixed(),\n );\n return new Decimal(result);\n }\n\n public calculateWithdrawableAmountOfCrossMarginAsset(\n asset: AssetName,\n forTransferSpotCollateral: boolean,\n userAccount: UserAccount,\n riskEngine: VersionedRiskEngine,\n exchangeInfo: VersionedExchangeInfo,\n ) {\n const assetId = this.getAssetId(asset);\n const userAccountObject = serializeUserAccountForWasm(userAccount);\n const riskEngineObject = serializeVersioned(riskEngine);\n const exchangeInfoObject = serializeExchangeInfoForWasm(exchangeInfo);\n const result =\n BulletWasm.calculate_withdrawable_amount_of_cross_margin_asset(\n assetId,\n forTransferSpotCollateral,\n userAccountObject,\n riskEngineObject,\n exchangeInfoObject,\n );\n return new Decimal(result);\n }\n\n public simulateUsedCrossMarginOnBorrow(\n asset: AssetName,\n borrowAmount: Decimal,\n userAccount: UserAccount,\n marginType: MarginType,\n riskEngine: VersionedRiskEngine,\n ) {\n const assetId = this.getAssetId(asset);\n const userAccountObject = serializeUserAccountForWasm(userAccount);\n const riskEngineObject = serializeVersioned(riskEngine);\n const result = BulletWasm.simulate_used_cross_margin_on_borrow(\n assetId,\n borrowAmount.toFixed(),\n userAccountObject,\n marginType,\n riskEngineObject,\n );\n return WasmResponseSchemas.SimulationResultSchema.parse(result);\n }\n\n public simulateUsedCrossMarginOnOrder(\n market: MarketName,\n newOrderArgs: NewOrderArgs,\n userAccount: UserAccount,\n riskEngine: VersionedRiskEngine,\n orderbook: OrderbookL2,\n ) {\n const marketId = this.getMarketId(market);\n const userAccountObject = serializeUserAccountForWasm(userAccount);\n const riskEngineObject = serializeVersioned(riskEngine);\n const orderbookObject = serialize(orderbook);\n const result = BulletWasm.simulate_used_cross_margin_on_order(\n marketId,\n {\n price: newOrderArgs.price.toFixed(),\n size: newOrderArgs.size.toFixed(),\n side: newOrderArgs.side,\n order_type: newOrderArgs.orderType,\n reduce_only: newOrderArgs.reduceOnly,\n },\n userAccountObject,\n riskEngineObject,\n orderbookObject,\n );\n return WasmResponseSchemas.SimulationResultSchema.parse(result);\n }\n\n public simulateCrossMarginEstimatedLiquidationPriceOnOrder(\n market: MarketName,\n newOrderArgs: NewOrderArgs,\n userAccount: UserAccount,\n riskEngine: VersionedRiskEngine,\n orderbook: OrderbookL2,\n ) {\n const marketId = this.getMarketId(market);\n const baseAssetId = this.getMarketMeta(market).baseAssetId;\n const userAccountObject = serializeUserAccountForWasm(userAccount);\n const riskEngineObject = serializeVersioned(riskEngine);\n const orderbookObject = serialize(orderbook);\n const result =\n BulletWasm.simulate_cross_margin_estimated_liquidation_price_on_order(\n marketId,\n {\n price: newOrderArgs.price.toFixed(),\n size: newOrderArgs.size.toFixed(),\n side: newOrderArgs.side,\n order_type: newOrderArgs.orderType,\n reduce_only: newOrderArgs.reduceOnly,\n },\n baseAssetId,\n userAccountObject,\n riskEngineObject,\n orderbookObject,\n );\n return WasmResponseSchemas.SimulationResultSchema.parse(result);\n }\n\n public calculatePositionsAdditionalMetadata(\n userAccount: UserAccount,\n riskEngine: VersionedRiskEngine,\n exchangeInfo: VersionedExchangeInfo,\n ) {\n const userAccountObject = serializeUserAccountForWasm(userAccount);\n const riskEngineObject = serializeVersioned(riskEngine);\n const exchangeInfoObject = serializeExchangeInfoForWasm(exchangeInfo);\n\n const result = BulletWasm.calculate_positions_additional_metadata(\n userAccountObject,\n riskEngineObject,\n exchangeInfoObject,\n );\n\n return WasmResponseSchemas.PositionAdditionalMetadataSchema.parse(result);\n }\n\n public calculateBorrowLendPoolAdditionalMetadata(\n borrowLendPools: Map<AssetId, BorrowLendPool>,\n asset: AssetName,\n ) {\n const assetId = this.getAssetId(asset);\n const borrowLendPoolsObject = serialize(borrowLendPools);\n const result = BulletWasm.calculate_borrow_lend_additional_metadata(\n borrowLendPoolsObject?.get(assetId),\n );\n return WasmResponseSchemas.BorrowLendMarketAdditionalMetadataSchema.parse(\n result,\n );\n }\n\n public calculateCrossMarginAccountSummaryBatch(\n userAccounts: UserAccount[],\n riskEngine: VersionedRiskEngine,\n useWeightedEquity = true,\n ) {\n const userAccountsObject = userAccounts.map(serializeUserAccountForWasm);\n const riskEngineObject = serializeVersioned(riskEngine);\n const result = BulletWasm.calculate_cross_margin_account_summary_batch(\n userAccountsObject,\n riskEngineObject,\n useWeightedEquity,\n );\n return WasmResponseSchemas.AccountSummaryBatchSchema.parse(result);\n }\n\n public estimateHourlyFundingRate(\n market: MarketName,\n riskEngine: VersionedRiskEngine,\n ) {\n const marketId = this.getMarketId(market);\n const riskEngineObject = serializeVersioned(riskEngine);\n const result = BulletWasm.estimate_hourly_funding_rate(\n marketId,\n riskEngineObject,\n );\n return new Decimal(result);\n }\n\n // ========================================================================\n // WebSocket Methods\n // ========================================================================\n\n private getWebSocketManager(): WebSocketManager {\n if (!this.wsManager) {\n throw new Error(\"WebSocket connection not configured\");\n }\n return this.wsManager;\n }\n\n public async *subscribeOrderbook(\n market: MarketName,\n signal?: AbortSignal,\n ): AsyncIterable<Orderbook> {\n const marketId = this.getMarketId(market);\n yield* this.getWebSocketManager().subscribeOrderbook(marketId, signal);\n }\n\n public async unsubscribeOrderbook(market: MarketName) {\n const marketId = this.getMarketId(market);\n await this.getWebSocketManager().unsubscribeOrderbook(marketId);\n }\n\n // ========================================================================\n // Resource Management\n // ========================================================================\n\n /**\n * Dispose of all resources: WebSocket connections, Maps, and references\n * Call this when the client is no longer needed to prevent memory leaks\n */\n public dispose(): void {\n // Dispose WebSocket manager if it exists\n if (this.wsManager) {\n this.wsManager.dispose();\n }\n\n // Clear Maps\n this.assetInfoRegistry?.clear();\n this.assetInfoRegistryReverse?.clear();\n this.marketRegistry?.clear();\n this.marketRegistryReverse?.clear();\n\n // Clear references\n this.assetInfoRegistry = undefined;\n this.assetInfoRegistryReverse = undefined;\n this.marketRegistry = undefined;\n this.marketRegistryReverse = undefined;\n this.generationOverride = undefined;\n }\n}\n\n// Authenticated client - extends ReadOnlyClient and adds authenticated operations\nexport class AuthenticatedClient extends ReadOnlyClient {\n public readonly address: Address;\n private readonly wallet: Wallet;\n private readonly authenticator: Authenticator;\n private readonly useSerdePath: boolean;\n\n /**\n * @internal\n * Do not construct directly. Use Client.fromNetwork() or Client.fromEndpoints()\n */\n constructor(\n endpoints: Endpoints,\n rollup: SolanaSignableRollup<RuntimeCall>,\n wallet: Wallet,\n delegatorAddress?: Address,\n authenticator: Authenticator = \"standard\",\n ) {\n super(endpoints, rollup);\n this.wallet = wallet;\n this.address = delegatorAddress ?? wallet.address;\n this.authenticator = authenticator;\n // \"solanaAuto\" resolves to \"solana\" (Ledger) or \"solanaSimple\" (all other\n // signers) at call time — it never falls back to the standard/Borsh path.\n // See: SolanaSignableRollup.getAutoAuthenticator() in @sovereign-sdk/web3.\n this.useSerdePath =\n authenticator === \"solana\" ||\n authenticator === \"solanaSimple\" ||\n authenticator === \"solanaAuto\";\n }\n\n /**\n * Encodes a Decimal.js value for the configured authenticator:\n * - Solana auth (serde): returns string (e.g. \"10000\")\n * - Standard auth (borsh): returns SurrogateDecimal { flags, hi, lo, mid }\n */\n private encodeDecimal(d?: Decimal | null) {\n if (!d) return null;\n const fixed = d.toFixed();\n return this.useSerdePath\n ? fixed\n : BulletWasm.convert_rust_decimal_to_json(fixed);\n }\n\n // Override getUserAccount to use this.address when no address provided\n public override async getUserAccount(\n address?: Address,\n ): Promise<UserAccount> {\n const addr = address ?? this.address;\n return await super.getUserAccount(addr);\n }\n\n // Override getDelegates to use this.address when no address provided\n public override async getAllDelegates(address?: Address): Promise<Delegates> {\n const addr = address ?? this.address;\n return await super.getAllDelegates(addr);\n }\n\n public override async getUserAccountConfig(\n address?: Address,\n ): Promise<VersionedUserAccountConfig | null> {\n const addr = address ?? this.address;\n return await super.getUserAccountConfig(addr);\n }\n\n // Override getTokenBalance to use this.address when no address provided\n public override async getTokenBalance(\n tokenId: TokenId,\n address?: Address,\n ): Promise<bigint> {\n const addr = address ?? this.address;\n return await super.getTokenBalance(tokenId, addr);\n }\n\n // Authenticated-only methods\n public async getNonce(): Promise<number> {\n const pubKey = base58ToBytes(this.wallet.address);\n const dedup = await this.rollup.dedup(pubKey);\n return dedup.nonce;\n }\n\n // ========================================================================\n // Transaction Methods (requires wallet)\n // ========================================================================\n\n public async submitTransaction(\n runtimeCall: RuntimeCall,\n ): Promise<TransactionResult<Transaction<RuntimeCall>>> {\n try {\n // Decimals are already encoded in the correct format by encodeDecimal():\n // - Solana auth (serde): string format (\"10000\")\n // - Standard auth (borsh): SurrogateDecimal { flags, hi, lo, mid }\n return await this.rollup.call(runtimeCall, {\n signer: this.wallet.getSigner(),\n authenticator: this.authenticator,\n overrides: {\n uniqueness: this.generationOverride\n ? { generation: this.generationOverride() }\n : undefined,\n },\n });\n } catch (e) {\n // Handle version mismatch with retry\n if (e instanceof VersionMismatchError && e.retryable) {\n console.warn(\"Version mismatch, retrying...\");\n return await this.submitTransaction(runtimeCall);\n }\n // Convert to BulletError for consistent error handling\n throw BulletError.from(e);\n }\n }\n\n public async createToken(\n tokenName: string,\n tokenDecimals: number | null,\n initialBalance: bigint,\n mintToAddress: Address,\n admins: Address[],\n supplyCap: bigint | null,\n ) {\n const response = await this.submitTransaction({\n bank: {\n create_token: {\n token_name: tokenName,\n token_decimals: tokenDecimals,\n initial_balance: initialBalance.toString(),\n mint_to_address: mintToAddress,\n admins: admins,\n supply_cap: supplyCap?.toString() ?? null,\n },\n },\n });\n const rawBytestokenId = getTokenId(\n base58ToBytes(this.address),\n tokenName,\n tokenDecimals ?? 8,\n );\n return {\n rawBytestokenId,\n response,\n };\n }\n\n public async transfer(to: Address, amount: bigint, tokenId: TokenId) {\n return await this.submitTransaction({\n bank: {\n transfer: {\n to: to,\n coins: {\n amount: amount.toString(),\n token_id: tokenId,\n },\n },\n },\n });\n }\n\n public async mint(to: Address, amount: bigint, tokenId: TokenId) {\n return await this.submitTransaction({\n bank: {\n mint: {\n mint_to_address: to,\n coins: {\n amount: amount.toString(),\n token_id: tokenId,\n },\n },\n },\n });\n }\n\n public async deposit(asset: AssetName, amount: Decimal) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n user: {\n deposit: {\n asset_id: assetId,\n amount: this.encodeDecimal(amount),\n },\n },\n },\n });\n }\n\n public async depositToVault(\n vaultAddress: Address,\n asset: AssetName,\n amount: Decimal,\n ) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n user: {\n deposit_to_vault: {\n vault_address: vaultAddress,\n asset_id: assetId,\n amount: this.encodeDecimal(amount),\n },\n },\n },\n });\n }\n\n public async withdraw(asset: AssetName, amount: Decimal) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n user: {\n withdraw: {\n asset_id: assetId,\n amount: this.encodeDecimal(amount),\n },\n },\n },\n });\n }\n\n public async borrowSpot(\n asset: AssetName,\n amount: Decimal,\n subAccountIndex?: number,\n ) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n user: {\n borrow_spot: {\n asset_id: assetId,\n amount: this.encodeDecimal(amount),\n sub_account_index: subAccountIndex ?? null,\n },\n },\n },\n });\n }\n\n public async depositSpotCollateral(asset: AssetName, amount: Decimal) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n user: {\n deposit_spot_collateral: {\n asset_id: assetId,\n amount: this.encodeDecimal(amount),\n },\n },\n },\n });\n }\n\n public async withdrawSpotCollateral(asset: AssetName, amount: Decimal) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n user: {\n withdraw_spot_collateral: {\n asset_id: assetId,\n amount: this.encodeDecimal(amount),\n },\n },\n },\n });\n }\n\n public async transferSpotCollateral(\n direction: SpotCollateralTransferDirection,\n asset: AssetName,\n amount: Decimal,\n subAccountIndex?: number,\n ) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n user: {\n transfer_spot_collateral: {\n asset_id: assetId,\n amount: this.encodeDecimal(amount),\n direction,\n sub_account_index: subAccountIndex ?? null,\n },\n },\n },\n });\n }\n\n public async placeOrders(\n market: MarketName,\n newOrders: NewOrderArgs[],\n replace = false,\n subAccountIndex?: number,\n ) {\n const marketMeta = this.getMarketMeta(market);\n\n const args = newOrders.map((newOrder) => {\n return {\n price: this.encodeDecimal(newOrder.price),\n size: this.encodeDecimal(newOrder.size),\n side: newOrder.side,\n order_type: newOrder.orderType,\n reduce_only: newOrder.reduceOnly,\n client_order_id: newOrder.clientOrderId\n ? newOrder.clientOrderId.toString()\n : null,\n pending_tpsl_pair: newOrder.pendingTpslPair\n ? {\n tpsl_pair: {\n tp: newOrder.pendingTpslPair.tpslPair.tp\n ? {\n order_price: this.encodeDecimal(\n newOrder.pendingTpslPair.tpslPair.tp.orderPrice,\n ),\n trigger_price: this.encodeDecimal(\n newOrder.pendingTpslPair.tpslPair.tp.triggerPrice,\n ),\n price_condition:\n newOrder.pendingTpslPair.tpslPair.tp.priceCondition,\n order_type:\n newOrder.pendingTpslPair.tpslPair.tp.orderType,\n }\n : null,\n sl: newOrder.pendingTpslPair.tpslPair.sl\n ? {\n order_price: this.encodeDecimal(\n newOrder.pendingTpslPair.tpslPair.sl.orderPrice,\n ),\n trigger_price: this.encodeDecimal(\n newOrder.pendingTpslPair.tpslPair.sl.triggerPrice,\n ),\n price_condition:\n newOrder.pendingTpslPair.tpslPair.sl.priceCondition,\n order_type:\n newOrder.pendingTpslPair.tpslPair.sl.orderType,\n }\n : null,\n },\n dynamic_size: newOrder.pendingTpslPair.dynamicSize,\n }\n : null,\n };\n });\n\n const msgInner = {\n market_id: marketMeta.id,\n orders: args,\n replace,\n sub_account_index: subAccountIndex ?? null,\n };\n\n const msg: RuntimeCall = {\n exchange: {\n user: {\n place_orders: msgInner,\n },\n },\n };\n\n return await this.submitTransaction(msg);\n }\n\n public async createPerpPositionTpsl(\n market: MarketName,\n tpslPair: TpslPair,\n size?: Decimal,\n subAccountIndex?: number,\n ) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n user: {\n create_position_tpsl: {\n market_id: marketId,\n tpsl_pair: {\n tp: tpslPair.tp\n ? {\n order_price: this.encodeDecimal(tpslPair.tp.orderPrice),\n trigger_price: this.encodeDecimal(tpslPair.tp.triggerPrice),\n price_condition: tpslPair.tp.priceCondition,\n order_type: tpslPair.tp.orderType,\n }\n : null,\n sl: tpslPair.sl\n ? {\n order_price: this.encodeDecimal(tpslPair.sl.orderPrice),\n trigger_price: this.encodeDecimal(tpslPair.sl.triggerPrice),\n price_condition: tpslPair.sl.priceCondition,\n order_type: tpslPair.sl.orderType,\n }\n : null,\n },\n size: this.encodeDecimal(size),\n sub_account_index: subAccountIndex ?? null,\n },\n },\n },\n });\n }\n\n public async amendOrders(\n market: MarketName,\n options: AmendOrderOptions[],\n subAccountIndex?: number,\n ) {\n const marketMeta = this.getMarketMeta(market);\n const args = options.map((option) => {\n return {\n cancel: {\n order_id: option.existingOrderId?.toString() ?? null,\n client_order_id: option.existingClientOrderId?.toString() ?? null,\n },\n place: {\n price: this.encodeDecimal(option.newOrderArgs.price),\n size: this.encodeDecimal(option.newOrderArgs.size),\n side: option.newOrderArgs.side,\n order_type: option.newOrderArgs.orderType,\n reduce_only: option.newOrderArgs.reduceOnly,\n client_order_id:\n option.newOrderArgs.clientOrderId?.toString() ?? null,\n pending_tpsl_pair: option.newOrderArgs.pendingTpslPair\n ? {\n tpsl_pair: {\n tp: option.newOrderArgs.pendingTpslPair.tpslPair.tp\n ? {\n order_price: this.encodeDecimal(\n option.newOrderArgs.pendingTpslPair.tpslPair.tp\n .orderPrice,\n ),\n trigger_price: this.encodeDecimal(\n option.newOrderArgs.pendingTpslPair.tpslPair.tp\n .triggerPrice,\n ),\n price_condition:\n option.newOrderArgs.pendingTpslPair.tpslPair.tp\n .priceCondition,\n order_type:\n option.newOrderArgs.pendingTpslPair.tpslPair.tp\n .orderType,\n }\n : null,\n sl: option.newOrderArgs.pendingTpslPair.tpslPair.sl\n ? {\n order_price: this.encodeDecimal(\n option.newOrderArgs.pendingTpslPair.tpslPair.sl\n .orderPrice,\n ),\n trigger_price: this.encodeDecimal(\n option.newOrderArgs.pendingTpslPair.tpslPair.sl\n .triggerPrice,\n ),\n price_condition:\n option.newOrderArgs.pendingTpslPair.tpslPair.sl\n .priceCondition,\n order_type:\n option.newOrderArgs.pendingTpslPair.tpslPair.sl\n .orderType,\n }\n : null,\n },\n dynamic_size: option.newOrderArgs.pendingTpslPair.dynamicSize,\n }\n : null,\n },\n };\n });\n\n const msgInner = {\n market_id: marketMeta.id,\n orders: args,\n sub_account_index: subAccountIndex ?? null,\n };\n\n const msg: RuntimeCall = {\n exchange: {\n user: {\n amend_orders: msgInner,\n },\n },\n };\n\n return await this.submitTransaction(msg);\n }\n\n public async cancelTriggerOrders(\n market: MarketName,\n triggerOrderIds: bigint[],\n subAccountIndex?: number,\n ) {\n const marketMeta = this.getMarketMeta(market);\n\n const msgInner = {\n market_id: marketMeta.id,\n trigger_order_ids: triggerOrderIds.map((id) => id.toString()),\n sub_account_index: subAccountIndex ?? null,\n };\n\n return await this.submitTransaction({\n exchange: {\n user: {\n cancel_trigger_orders: msgInner,\n },\n },\n });\n }\n\n public async cancelOrders(\n market: MarketName,\n options: CancelOrderOptions[],\n subAccountIndex?: number,\n ) {\n const marketMeta = this.getMarketMeta(market);\n\n const msgInner = {\n market_id: marketMeta.id,\n orders: options.map((option) => {\n return {\n order_id: option.orderId?.toString() ?? null,\n client_order_id: option.clientOrderId?.toString() ?? null,\n };\n }),\n sub_account_index: subAccountIndex ?? null,\n };\n\n const msg: RuntimeCall = {\n exchange: {\n user: {\n cancel_orders: msgInner,\n },\n },\n };\n\n return await this.submitTransaction(msg);\n }\n\n public async adminCancelOrders(\n address: Address,\n market: MarketName,\n orderId: string,\n ) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n admin: {\n cancel_orders: { cancels: [[marketId, orderId, address]] },\n },\n },\n });\n }\n\n public async adminCancelTriggerOrder(\n address: Address,\n market: MarketName,\n triggerOrderId: string,\n ) {\n const marketId = this.getMarketId(market);\n\n return await this.submitTransaction({\n exchange: {\n admin: {\n cancel_trigger_orders: {\n cancels: [[marketId, triggerOrderId, address]],\n },\n },\n },\n });\n }\n\n public async updateAdmin(adminType: AdminType, newAdmin: Address) {\n return await this.submitTransaction({\n exchange: {\n admin: {\n update_admin: {\n admin_type: adminType,\n new_admin: newAdmin,\n },\n },\n },\n });\n }\n\n public async adminAddTradingCredits(address: Address, amount: Decimal) {\n return await this.submitTransaction({\n exchange: {\n keeper: {\n add_trading_credits: {\n user_address: address,\n amount: this.encodeDecimal(amount),\n },\n },\n },\n });\n }\n\n public async adminRemoveTradingCredits(address: Address, amount: Decimal) {\n return await this.submitTransaction({\n exchange: {\n keeper: {\n remove_trading_credits: {\n user_address: address,\n amount: this.encodeDecimal(amount),\n },\n },\n },\n });\n }\n\n public async adminSetCumulativeReferralRewards(\n address: Address,\n asset: AssetName,\n amount: Decimal,\n ) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n keeper: {\n set_cumulative_referral_rewards: {\n address,\n asset_id: assetId,\n amount: this.encodeDecimal(amount),\n },\n },\n },\n });\n }\n\n public async adminUpdateUserFeeDiscountBps(\n address: Address,\n feeDiscountBps: number,\n ) {\n return await this.submitTransaction({\n exchange: {\n keeper: {\n update_user_fee_discount_bps: {\n address,\n fee_discount_bps: feeDiscountBps,\n },\n },\n },\n });\n }\n\n public async adminUpdateUserFeeTier(address: Address, feeTier: FeeTier) {\n return await this.submitTransaction({\n exchange: {\n keeper: {\n update_user_fee_tier: {\n address,\n fee_tier: feeTier,\n },\n },\n },\n });\n }\n\n public async cancelMarketOrders(\n market: MarketName,\n subAccountIndex?: number,\n ) {\n const meta = this.getMarketMeta(market);\n return await this.submitTransaction({\n exchange: {\n user: {\n cancel_market_orders: {\n market_id: meta.id,\n sub_account_index: subAccountIndex ?? null,\n },\n },\n },\n });\n }\n\n public async cancelAllOrders(subAccountIndex?: number) {\n const msgInner = {\n sub_account_index: subAccountIndex ?? null,\n };\n\n return await this.submitTransaction({\n exchange: {\n user: {\n cancel_all_orders: msgInner,\n },\n },\n });\n }\n\n public async updateOraclePrices(\n pricesToUpdate: OraclePriceUpdateArgs[],\n publishTimestamp?: number,\n ) {\n // set publish_timestamp to current timestamp if not provided\n const timestamp = publishTimestamp || Math.floor(Date.now() * 1000);\n return await this.submitTransaction({\n exchange: {\n keeper: {\n update_oracle_prices: {\n prices: await Promise.all(\n pricesToUpdate.map(async ({ asset, oraclePrice }) => ({\n asset_id: this.getAssetId(asset),\n oracle_price: this.encodeDecimal(oraclePrice),\n })),\n ),\n publish_timestamp: timestamp,\n },\n },\n },\n });\n }\n\n public async updateMarkPrices(\n pricesToUpdate: MarkPriceUpdateArgs[],\n publishTimestamp?: number,\n ) {\n // set publish_timestamp to current timestamp if not provided\n const timestamp = publishTimestamp || Math.floor(Date.now() * 1000);\n return await this.submitTransaction({\n exchange: {\n keeper: {\n update_mark_prices: {\n prices: await Promise.all(\n pricesToUpdate.map(\n async ({ market, medianCexPrice, diffEma }) => ({\n market_id: this.getMarketId(market),\n median_cex_price: this.encodeDecimal(medianCexPrice),\n diff_ema: this.encodeDecimal(diffEma),\n }),\n ),\n ),\n publish_timestamp: timestamp,\n },\n },\n },\n });\n }\n\n public async updateMaxLeverageForMarket(\n market: MarketName,\n maxLeverage: number,\n subAccountIndex?: number,\n ) {\n if (!Number.isInteger(maxLeverage)) {\n throw Error(\"Max leverage must be set to an integer\");\n }\n\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n user: {\n update_max_leverage: {\n market_id: marketId,\n max_leverage: maxLeverage,\n sub_account_index: subAccountIndex ?? null,\n },\n },\n },\n });\n }\n\n public async claimReferralRewards(asset: AssetName) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n user: {\n claim_referral_rewards: {\n asset_id: assetId,\n },\n },\n },\n });\n }\n\n public async updatePremiumIndexes(markets: MarketName[]) {\n const marketIds = await Promise.all(\n markets.map(async (market) => {\n return this.getMarketId(market);\n }),\n );\n return await this.submitTransaction({\n exchange: {\n keeper: {\n update_premium_indexes: { market_ids: marketIds },\n },\n },\n });\n }\n\n public async executeTriggerOrders(market: MarketName) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n public: {\n execute_trigger_orders: { market_id: marketId },\n },\n },\n });\n }\n\n public async createTwapOrder(\n market: MarketName,\n twapOrderArgs: NewTwapOrderArgs,\n subAccountIndex?: number,\n ) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n user: {\n create_twap_order: {\n market_id: marketId,\n twap_order_args: {\n side: twapOrderArgs.side,\n total_size: this.encodeDecimal(twapOrderArgs.totalSize),\n reduce_only: twapOrderArgs.reduceOnly,\n total_duration_seconds: twapOrderArgs.totalDurationSeconds,\n },\n sub_account_index: subAccountIndex ?? null,\n },\n },\n },\n });\n }\n\n public async executeTwapOrders(market: MarketName) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n public: {\n execute_twap_orders: { market_id: marketId },\n },\n },\n });\n }\n\n public async cancelTwapOrder(\n market: MarketName,\n twapId: bigint,\n subAccountIndex?: number,\n ) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n user: {\n cancel_twap_order: {\n market_id: marketId,\n twap_id: twapId.toString(),\n sub_account_index: subAccountIndex ?? null,\n },\n },\n },\n });\n }\n\n public async activateTwapOrders(markets: MarketName[]) {\n const marketIds = markets.map((market) => this.getMarketId(market));\n return await this.submitTransaction({\n exchange: {\n public: {\n activate_twap_orders: { market_ids: marketIds },\n },\n },\n });\n }\n\n public async updateFunding(markets: MarketName[]) {\n const marketIds = await Promise.all(\n markets.map(async (market) => {\n return this.getMarketId(market);\n }),\n );\n return await this.submitTransaction({\n exchange: { keeper: { update_funding: { market_ids: marketIds } } },\n });\n }\n\n public async applyFunding(addresses: Address[]) {\n return await this.submitTransaction({\n exchange: {\n public: {\n apply_funding: {\n addresses: addresses,\n },\n },\n },\n });\n }\n\n public async accrueBorrowLendInterest() {\n return await this.submitTransaction({\n exchange: {\n public: {\n accrue_borrow_lend_interest: {},\n },\n },\n });\n }\n\n public async forceCancelOrders(address: Address) {\n return await this.submitTransaction({\n exchange: {\n public: {\n force_cancel_orders: {\n user_address: address,\n },\n },\n },\n });\n }\n\n public async liquidatePerpPositions(address: Address) {\n return await this.submitTransaction({\n exchange: {\n public: {\n liquidate_perp_positions: {\n address: address,\n },\n },\n },\n });\n }\n\n public async backstopLiquidatePerpPositions(\n address: Address,\n positions?: { market: MarketName; size: Decimal }[],\n subAccountIndex?: number,\n ) {\n const positionsWithIds = positions\n ? await Promise.all(\n positions.map(async ({ market, size }) => ({\n market_id: this.getMarketId(market),\n size: this.encodeDecimal(size),\n })),\n )\n : null;\n\n return await this.submitTransaction({\n exchange: {\n user: {\n backstop_liquidate_perp_positions: {\n address: address,\n positions: positionsWithIds,\n sub_account_index: subAccountIndex ?? null,\n },\n },\n },\n });\n }\n\n public async liquidateBorrowLendLiability(\n address: Address,\n liabilityAsset: AssetName,\n collateralAsset: AssetName,\n liabilityAmount: Decimal,\n subAccountIndex?: number,\n ) {\n const liabilityAssetId = this.getAssetId(liabilityAsset);\n const collateralAssetId = this.getAssetId(collateralAsset);\n return await this.submitTransaction({\n exchange: {\n user: {\n liquidate_borrow_lend_liability: {\n liquidatee_address: address,\n liability_asset_id: liabilityAssetId,\n collateral_asset_id: collateralAssetId,\n liability_amount: this.encodeDecimal(liabilityAmount),\n sub_account_index: subAccountIndex ?? null,\n },\n },\n },\n });\n }\n\n public async depositToUsdcPnlPool(amount: Decimal) {\n return await this.submitTransaction({\n exchange: {\n user: {\n deposit_to_pnl_pool: {\n usdc_amount: this.encodeDecimal(amount),\n },\n },\n },\n });\n }\n\n public async depositToInsuranceFund(amount: Decimal) {\n return await this.submitTransaction({\n exchange: {\n user: {\n deposit_to_insurance_fund: {\n usdc_amount: this.encodeDecimal(amount),\n },\n },\n },\n });\n }\n\n public async initAssetInfo(\n assetId: AssetId,\n assetName: AssetName,\n tokenId: TokenId | null,\n decimals: number,\n withdrawFee: Decimal,\n pythLazerFeedId: number | null,\n pythLazerQuoteFeedId: number | null,\n ) {\n return await this.submitTransaction({\n exchange: {\n admin: {\n init_asset_info_v_1: {\n args: {\n asset_id: assetId,\n asset_name: assetName,\n token_id: tokenId,\n decimals: decimals,\n withdraw_fee: this.encodeDecimal(withdrawFee),\n pyth_lazer_feed_id: pythLazerFeedId ?? null,\n pyth_lazer_quote_feed_id: pythLazerQuoteFeedId ?? null,\n },\n },\n },\n },\n });\n }\n\n public async updateAssetInfo(\n asset: AssetName,\n withdrawFee: Decimal,\n pythLazerFeedId?: number | null,\n pythLazerQuoteFeedId?: number | null,\n ) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n admin: {\n update_asset_info_v_1: {\n args: {\n asset_id: assetId,\n withdraw_fee: this.encodeDecimal(withdrawFee),\n pyth_lazer_feed_id: pythLazerFeedId ? pythLazerFeedId : null,\n pyth_lazer_quote_feed_id: pythLazerQuoteFeedId\n ? pythLazerQuoteFeedId\n : null,\n },\n },\n },\n },\n });\n }\n\n public async updateGlobalConfig(options: {\n maxOrdersPerUser?: number;\n maxTriggerOrdersPerUser?: number;\n maxOrdersPerBatchMsg?: number;\n maxTriggerOrdersToExecutePerMsg?: number;\n minNotionalTwapValue?: Decimal;\n minNotionalTwapValuePerOrder?: Decimal;\n twapExecutionIntervalSeconds?: number;\n depositLimitsPerUser?: [AssetId, Decimal][];\n whitelistedUsersForDeposit?: Address[];\n pyth_lazer_trusted_signers?: Address[];\n }) {\n return await this.submitTransaction({\n exchange: {\n admin: {\n update_global_config_v_1: {\n args: {\n max_orders_per_user: options.maxOrdersPerUser ?? null,\n max_trigger_orders_per_user:\n options.maxTriggerOrdersPerUser ?? null,\n max_orders_per_batch_msg: options.maxOrdersPerBatchMsg ?? null,\n max_trigger_orders_to_execute_per_msg:\n options.maxTriggerOrdersToExecutePerMsg ?? null,\n min_notional_twap_value: this.encodeDecimal(\n options.minNotionalTwapValue,\n ),\n min_notional_twap_value_per_order: this.encodeDecimal(\n options.minNotionalTwapValuePerOrder,\n ),\n twap_execution_interval_seconds:\n options.twapExecutionIntervalSeconds ?? null,\n deposit_limits_per_user:\n options.depositLimitsPerUser?.map(([assetId, amount]) => [\n assetId,\n this.encodeDecimal(amount),\n ]) ?? null,\n whitelisted_users_for_deposit:\n options.whitelistedUsersForDeposit ?? null,\n pyth_lazer_trusted_signers:\n options.pyth_lazer_trusted_signers ?? null,\n },\n },\n },\n },\n });\n }\n\n public async createVault(\n name: string,\n description: string,\n leader: Address,\n depositAssets: AssetName[],\n withdrawAsset: AssetName,\n withdrawLockupPeriodHours: number,\n whitelistDeposits: boolean,\n profitSharePercentage: number,\n withdrawalFeeBps: number,\n depositLimit: Decimal,\n ) {\n const depositAssetIds = depositAssets.map((asset) =>\n this.getAssetId(asset),\n );\n const withdrawAssetId = this.getAssetId(withdrawAsset);\n return await this.submitTransaction({\n exchange: {\n user: {\n create_vault: {\n args: {\n name,\n description,\n leader,\n deposit_asset_ids: depositAssetIds,\n withdraw_asset_id: withdrawAssetId,\n withdraw_lockup_period_hours: withdrawLockupPeriodHours,\n whitelist_deposits: whitelistDeposits,\n profit_share_percentage: profitSharePercentage,\n withdrawal_fee_bps: withdrawalFeeBps,\n deposit_limit: this.encodeDecimal(depositLimit),\n },\n },\n },\n },\n });\n }\n\n public async initSpotMarket(\n marketId: MarketId,\n baseAssetId: AssetId,\n quoteAssetId: AssetId,\n baseMinLotSize: Decimal,\n quoteMinLotSize: Decimal,\n maxOrdersPerSide: number,\n maxOrdersPerUser: number,\n maxTriggerOrdersPerUser: number,\n takerFeesTenthBps: number[],\n makerFeesTenthBps: number[],\n maxOrderToTriggerPriceDeviationRatio: Decimal,\n name: string,\n ) {\n return await this.submitTransaction({\n exchange: {\n admin: {\n init_spot_market: {\n args: {\n market_id: marketId,\n base_asset_id: baseAssetId,\n quote_asset_id: quoteAssetId,\n base_min_lot_size: this.encodeDecimal(baseMinLotSize),\n quote_min_lot_size: this.encodeDecimal(quoteMinLotSize),\n max_orders_per_side: maxOrdersPerSide,\n max_orders_per_user: maxOrdersPerUser,\n max_trigger_orders_per_user: maxTriggerOrdersPerUser,\n taker_fees_tenth_bps: takerFeesTenthBps,\n maker_fees_tenth_bps: makerFeesTenthBps,\n name: name,\n max_order_to_trigger_price_deviation_ratio: this.encodeDecimal(\n maxOrderToTriggerPriceDeviationRatio,\n ),\n },\n },\n },\n },\n });\n }\n\n public async updateSpotMarket(\n market: MarketName,\n options: {\n baseMinLotSize?: Decimal;\n quoteMinLotSize?: Decimal;\n maxOrdersPerSide?: number;\n maxOrdersPerUser?: number;\n maxTriggerOrdersPerUser?: number;\n takerFeesTenthBps?: number[];\n makerFeesTenthBps?: number[];\n maxOrderToTriggerPriceDeviationRatio?: Decimal;\n },\n ) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n admin: {\n update_spot_market: {\n args: {\n market_id: marketId,\n base_min_lot_size: this.encodeDecimal(options.baseMinLotSize),\n quote_min_lot_size: this.encodeDecimal(options.quoteMinLotSize),\n max_orders_per_side: options.maxOrdersPerSide ?? null,\n max_orders_per_user: options.maxOrdersPerUser ?? null,\n max_trigger_orders_per_user:\n options.maxTriggerOrdersPerUser ?? null,\n taker_fees_tenth_bps: options.takerFeesTenthBps ?? null,\n maker_fees_tenth_bps: options.makerFeesTenthBps ?? null,\n max_order_to_trigger_price_deviation_ratio: this.encodeDecimal(\n options.maxOrderToTriggerPriceDeviationRatio,\n ),\n },\n },\n },\n },\n });\n }\n\n public async initPerpMarket(\n marketId: MarketId,\n baseAssetId: AssetId,\n name: string,\n tradingMode: string,\n minTickSize: Decimal,\n minLotSize: Decimal,\n maxOrdersPerSide: number,\n maxOrdersPerUser: number,\n maxTriggerOrdersPerUser: number,\n minInterestRateClamp: Decimal,\n maxInterestRateClamp: Decimal,\n minFundingRateClamp: Decimal,\n maxFundingRateClamp: Decimal,\n maxOiNotional: Decimal,\n maxOrderToMarkPriceDeviationRatio: Decimal,\n maxTriggerToComparisonPriceDeviationRatio: Decimal,\n maxOrderToTriggerPriceDeviationRatio: Decimal,\n impactMargin: Decimal,\n interestRate: Decimal,\n leverageTable: Record<string, number>,\n takerFeesTenthBps: number[],\n makerFeesTenthBps: number[],\n ) {\n return await this.submitTransaction({\n exchange: {\n admin: {\n init_perp_market: {\n args: {\n market_id: marketId,\n base_asset_id: baseAssetId,\n name: name,\n trading_mode: tradingMode,\n min_tick_size: this.encodeDecimal(minTickSize),\n min_lot_size: this.encodeDecimal(minLotSize),\n max_orders_per_side: maxOrdersPerSide,\n max_orders_per_user: maxOrdersPerUser,\n max_trigger_orders_per_user: maxTriggerOrdersPerUser,\n min_interest_rate_clamp: this.encodeDecimal(minInterestRateClamp),\n max_interest_rate_clamp: this.encodeDecimal(maxInterestRateClamp),\n min_funding_rate_clamp: this.encodeDecimal(minFundingRateClamp),\n max_funding_rate_clamp: this.encodeDecimal(maxFundingRateClamp),\n max_oi_notional: this.encodeDecimal(maxOiNotional),\n max_order_to_mark_price_deviation_ratio: this.encodeDecimal(\n maxOrderToMarkPriceDeviationRatio,\n ),\n max_trigger_to_comparison_price_deviation_ratio:\n this.encodeDecimal(maxTriggerToComparisonPriceDeviationRatio),\n max_order_to_trigger_price_deviation_ratio: this.encodeDecimal(\n maxOrderToTriggerPriceDeviationRatio,\n ),\n impact_margin: this.encodeDecimal(impactMargin),\n interest_rate: this.encodeDecimal(interestRate),\n leverage_table_args: { table: leverageTable },\n taker_fees_tenth_bps: takerFeesTenthBps,\n maker_fees_tenth_bps: makerFeesTenthBps,\n },\n },\n },\n },\n });\n }\n\n public async updatePerpMarket(\n market: MarketName,\n options: {\n minTickSize?: Decimal;\n minLotSize?: Decimal;\n maxOrdersPerSide?: number;\n maxOrdersPerUser?: number;\n maxTriggerOrdersPerUser?: number;\n minInterestRateClamp?: Decimal;\n maxInterestRateClamp?: Decimal;\n minFundingRateClamp?: Decimal;\n maxFundingRateClamp?: Decimal;\n maxOiNotional?: Decimal;\n impactMargin?: Decimal;\n interestRate?: Decimal;\n takerFeesTenthBps?: number[];\n makerFeesTenthBps?: number[];\n maxOrderToMarkPriceDeviationRatio?: Decimal;\n maxTriggerToComparisonPriceDeviationRatio?: Decimal;\n maxOrderToTriggerPriceDeviationRatio?: Decimal;\n },\n ) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n admin: {\n update_perp_market: {\n args: {\n market_id: marketId,\n min_tick_size: this.encodeDecimal(options.minTickSize),\n min_lot_size: this.encodeDecimal(options.minLotSize),\n max_orders_per_side: options.maxOrdersPerSide ?? null,\n max_orders_per_user: options.maxOrdersPerUser ?? null,\n max_trigger_orders_per_user:\n options.maxTriggerOrdersPerUser ?? null,\n min_interest_rate_clamp: this.encodeDecimal(\n options.minInterestRateClamp,\n ),\n max_interest_rate_clamp: this.encodeDecimal(\n options.maxInterestRateClamp,\n ),\n min_funding_rate_clamp: this.encodeDecimal(\n options.minFundingRateClamp,\n ),\n max_funding_rate_clamp: this.encodeDecimal(\n options.maxFundingRateClamp,\n ),\n max_oi_notional: this.encodeDecimal(options.maxOiNotional),\n impact_margin: this.encodeDecimal(options.impactMargin),\n interest_rate: this.encodeDecimal(options.interestRate),\n taker_fees_tenth_bps: options.takerFeesTenthBps ?? null,\n maker_fees_tenth_bps: options.makerFeesTenthBps ?? null,\n max_order_to_mark_price_deviation_ratio: this.encodeDecimal(\n options.maxOrderToMarkPriceDeviationRatio,\n ),\n max_trigger_to_comparison_price_deviation_ratio:\n this.encodeDecimal(\n options.maxTriggerToComparisonPriceDeviationRatio,\n ),\n max_order_to_trigger_price_deviation_ratio: this.encodeDecimal(\n options.maxOrderToTriggerPriceDeviationRatio,\n ),\n leverage_table_args: null,\n },\n },\n },\n },\n });\n }\n\n public async initBorrowLendPool(\n assetId: AssetId,\n optimalUtilisationRate: Decimal,\n minBorrowRate: Decimal,\n maxBorrowRate: Decimal,\n optimalBorrowRate: Decimal,\n assetWeight: Decimal,\n initialLiabilityWeight: Decimal,\n maintenanceLiabilityWeight: Decimal,\n depositLimit: Decimal,\n borrowLimit: Decimal,\n maxUtilizationRate: Decimal,\n liquidationTotalRewardRatio: Decimal,\n protocolRewardRatio: Decimal,\n liabilityLiquidationLimitRatio: Decimal,\n interestFeeTenthBps: number,\n ) {\n return await this.submitTransaction({\n exchange: {\n admin: {\n init_borrow_lend_pool: {\n args: {\n asset_id: assetId,\n optimal_utilization_rate: this.encodeDecimal(\n optimalUtilisationRate,\n ),\n min_borrow_rate: this.encodeDecimal(minBorrowRate),\n max_borrow_rate: this.encodeDecimal(maxBorrowRate),\n optimal_borrow_rate: this.encodeDecimal(optimalBorrowRate),\n asset_weight: this.encodeDecimal(assetWeight),\n initial_liability_weight: this.encodeDecimal(\n initialLiabilityWeight,\n ),\n maintenance_liability_weight: this.encodeDecimal(\n maintenanceLiabilityWeight,\n ),\n deposit_limit: this.encodeDecimal(depositLimit),\n borrow_limit: this.encodeDecimal(borrowLimit),\n max_utilization_rate: this.encodeDecimal(maxUtilizationRate),\n liquidation_total_reward_ratio: this.encodeDecimal(\n liquidationTotalRewardRatio,\n ),\n protocol_reward_ratio: this.encodeDecimal(protocolRewardRatio),\n liability_liquidation_limit_ratio: this.encodeDecimal(\n liabilityLiquidationLimitRatio,\n ),\n interest_fee_tenth_bps: interestFeeTenthBps,\n },\n },\n },\n },\n });\n }\n\n public async updateBorrowLendPool(\n asset: AssetName,\n options: {\n optimalUtilizationRate?: Decimal;\n minBorrowRate?: Decimal;\n maxBorrowRate?: Decimal;\n optimalBorrowRate?: Decimal;\n assetWeight?: Decimal;\n initialLiabilityWeight?: Decimal;\n maintenanceLiabilityWeight?: Decimal;\n depositLimit?: Decimal;\n borrowLimit?: Decimal;\n maxUtilizationRate?: Decimal;\n liquidationTotalRewardRatio?: Decimal;\n protocolRewardRatio?: Decimal;\n liabilityLiquidationLimitRatio?: Decimal;\n interestFeeTenthBps?: number;\n },\n ) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n admin: {\n update_borrow_lend_pool: {\n args: {\n asset_id: assetId,\n optimal_utilization_rate: this.encodeDecimal(\n options.optimalUtilizationRate,\n ),\n min_borrow_rate: this.encodeDecimal(options.minBorrowRate),\n max_borrow_rate: this.encodeDecimal(options.maxBorrowRate),\n optimal_borrow_rate: this.encodeDecimal(\n options.optimalBorrowRate,\n ),\n asset_weight: this.encodeDecimal(options.assetWeight),\n initial_liability_weight: this.encodeDecimal(\n options.initialLiabilityWeight,\n ),\n maintenance_liability_weight: this.encodeDecimal(\n options.maintenanceLiabilityWeight,\n ),\n deposit_limit: this.encodeDecimal(options.depositLimit),\n borrow_limit: this.encodeDecimal(options.borrowLimit),\n max_utilization_rate: this.encodeDecimal(\n options.maxUtilizationRate,\n ),\n liquidation_total_reward_ratio: this.encodeDecimal(\n options.liquidationTotalRewardRatio,\n ),\n protocol_reward_ratio: this.encodeDecimal(\n options.protocolRewardRatio,\n ),\n liability_liquidation_limit_ratio: this.encodeDecimal(\n options.liabilityLiquidationLimitRatio,\n ),\n interest_fee_tenth_bps: options.interestFeeTenthBps ?? null,\n },\n },\n },\n },\n });\n }\n\n public async updateLeverageTable(\n market: MarketName,\n leverageTable: Record<string, number>,\n ) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n admin: {\n update_perp_leverage_table: {\n market_id: marketId,\n args: { table: leverageTable },\n },\n },\n },\n });\n }\n\n public async createSubAccount(index: number) {\n return await this.submitTransaction({\n exchange: {\n user: {\n create_sub_account: {\n index,\n },\n },\n },\n });\n }\n\n public async transferSubAccount(\n subAccountIndex: number,\n toSubAccount: boolean,\n asset: AssetName,\n amount: Decimal,\n ) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n user: {\n transfer_to_sub_account: {\n asset_id: assetId,\n amount: this.encodeDecimal(amount),\n sub_account_index: subAccountIndex,\n to_sub_account: toSubAccount,\n },\n },\n },\n });\n }\n\n public async delegateUser(\n delegate: Address,\n name: string,\n flags: number,\n subAccountIndex: number | null = null,\n expiresAt: number | null = null,\n ) {\n return await this.submitTransaction({\n exchange: {\n user: {\n delegate_user_v_2: {\n delegate,\n name,\n sub_account_index: subAccountIndex,\n expires_at: expiresAt,\n flags,\n },\n },\n },\n });\n }\n\n public async revokeDelegation(delegate: Address, subAccountIndex?: number) {\n return await this.submitTransaction({\n exchange: {\n user: {\n revoke_delegation_v_1: {\n delegate,\n sub_account_index: subAccountIndex ?? null,\n },\n },\n },\n });\n }\n\n public async vaultDelegateUser(\n vaultAddress: Address,\n delegate: Address,\n name: string,\n flags: number,\n expiresAt: number | null = null,\n ) {\n return await this.submitTransaction({\n exchange: {\n vault: {\n delegate_vault_user_v_1: {\n vault_address: vaultAddress,\n delegate,\n name,\n expires_at: expiresAt,\n flags,\n },\n },\n },\n });\n }\n\n public async vaultRevokeDelegation(vaultAddress: Address, delegate: Address) {\n return await this.submitTransaction({\n exchange: {\n vault: {\n revoke_vault_delegation: {\n vault_address: vaultAddress,\n delegate,\n },\n },\n },\n });\n }\n\n public async adminPruneMarket(market: MarketName) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n admin: {\n prune_market: {\n market_id: marketId,\n },\n },\n },\n });\n }\n\n public async adminForceSettlePerpPosition(\n market: MarketName,\n usersToForceSettle: Address[],\n ) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n admin: {\n force_settle_perp_position: {\n market_id: marketId,\n users: usersToForceSettle,\n },\n },\n },\n });\n }\n\n public async adminHaltPerpMarket(\n market: MarketName,\n settlementPrice: Decimal,\n ) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n admin: {\n halt_perp_market: {\n market_id: marketId,\n settlement_price: this.encodeDecimal(settlementPrice),\n },\n },\n },\n });\n }\n\n public async adminHaltSpotMarket(market: MarketName) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n admin: {\n halt_spot_market: {\n market_id: marketId,\n },\n },\n },\n });\n }\n\n public async adminUnhaltPerpMarket(market: MarketName) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n admin: {\n unhalt_perp_market: {\n market_id: marketId,\n },\n },\n },\n });\n }\n\n public async adminUnhaltSpotMarket(market: MarketName) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n admin: {\n unhalt_spot_market: {\n market_id: marketId,\n },\n },\n },\n });\n }\n\n public async adminHaltBorrowLendPool(asset: AssetName) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n admin: {\n halt_borrow_lend_pool: {\n asset_id: assetId,\n },\n },\n },\n });\n }\n\n public async adminUnhaltBorrowLendPool(asset: AssetName) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n admin: {\n unhalt_borrow_lend_pool: {\n asset_id: assetId,\n },\n },\n },\n });\n }\n\n public async adminForceRemoveDelegate(delegator: Address, delegate: Address) {\n return await this.submitTransaction({\n exchange: {\n admin: {\n force_remove_delegate: {\n delegator,\n delegate,\n },\n },\n },\n });\n }\n\n // ============================================\n // Additional User Actions\n // ============================================\n\n public async settleFromPnlPool(subAccountIndex?: number) {\n return await this.submitTransaction({\n exchange: {\n user: {\n settle_from_pnl_pool: {\n sub_account_index: subAccountIndex ?? null,\n },\n },\n },\n });\n }\n\n public async depositToTreasury(asset: AssetName, amount: Decimal) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n user: {\n deposit_to_treasury: {\n asset_id: assetId,\n amount: this.encodeDecimal(amount),\n },\n },\n },\n });\n }\n\n public async claimBorrowLendFees() {\n return await this.submitTransaction({\n exchange: {\n user: {\n claim_borrow_lend_fees: {},\n },\n },\n });\n }\n\n public async queueWithdrawal(vaultAddress: Address, shares: Decimal) {\n return await this.submitTransaction({\n exchange: {\n user: {\n queue_withdrawal: {\n vault_address: vaultAddress,\n shares: this.encodeDecimal(shares),\n },\n },\n },\n });\n }\n\n public async cancelQueuedWithdrawal(vaultAddress: Address) {\n return await this.submitTransaction({\n exchange: {\n user: {\n cancel_queued_withdrawal: {\n vault_address: vaultAddress,\n },\n },\n },\n });\n }\n\n public async forceWithdrawVault(vaultAddress: Address, shares: Decimal) {\n return await this.submitTransaction({\n exchange: {\n user: {\n force_withdraw_vault: {\n vault_address: vaultAddress,\n shares: this.encodeDecimal(shares),\n },\n },\n },\n });\n }\n\n // ============================================\n // Vault Actions\n // ============================================\n\n public async updateVaultConfig(\n vaultAddress: Address,\n options: {\n depositLimit?: Decimal;\n withdrawLockupPeriodHours?: number;\n profitSharePercentage?: number;\n },\n ) {\n return await this.submitTransaction({\n exchange: {\n vault: {\n update_vault_config: {\n vault_address: vaultAddress,\n args: {\n deposit_limit: options.depositLimit\n ? this.encodeDecimal(options.depositLimit)\n : null,\n withdraw_lockup_period_hours:\n options.withdrawLockupPeriodHours ?? null,\n profit_share_percentage: options.profitSharePercentage ?? null,\n },\n },\n },\n },\n });\n }\n\n public async processWithdrawalQueue(vaultAddress: Address) {\n return await this.submitTransaction({\n exchange: {\n vault: {\n process_withdrawal_queue: {\n vault_address: vaultAddress,\n },\n },\n },\n });\n }\n\n public async whitelistDepositor(vaultAddress: Address, userAddress: Address) {\n return await this.submitTransaction({\n exchange: {\n vault: {\n whitelist_depositor: {\n vault_address: vaultAddress,\n user_address: userAddress,\n },\n },\n },\n });\n }\n\n public async unwhitelistDepositor(\n vaultAddress: Address,\n userAddress: Address,\n ) {\n return await this.submitTransaction({\n exchange: {\n vault: {\n unwhitelist_depositor: {\n vault_address: vaultAddress,\n user_address: userAddress,\n },\n },\n },\n });\n }\n\n // ============================================\n // Additional Admin Actions\n // ============================================\n\n public async adminDeleteAsset(asset: AssetName) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n admin: { delete_asset: { asset_id: assetId } },\n },\n });\n }\n\n public async adminDeleteMarket(market: MarketName) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n admin: {\n delete_market: {\n market_id: marketId,\n },\n },\n },\n });\n }\n\n public async adminCleanupUserMarketState(\n market: MarketName,\n users: Address[],\n ) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n admin: {\n cleanup_user_market_state: {\n market_id: marketId,\n users,\n },\n },\n },\n });\n }\n\n public async adminUpdatePerpLiquidationConfig(options: {\n liquidationFee?: Decimal;\n liquidationIocBuffer?: Decimal;\n backstopLiquidationThreshold?: Decimal;\n liquidationProtocolRewardRatio?: Decimal;\n }) {\n const liquidationFee = options.liquidationFee\n ? this.encodeDecimal(options.liquidationFee)\n : null;\n const liquidationIocBuffer = options.liquidationIocBuffer\n ? this.encodeDecimal(options.liquidationIocBuffer)\n : null;\n const backstopLiquidationThreshold = options.backstopLiquidationThreshold\n ? this.encodeDecimal(options.backstopLiquidationThreshold)\n : null;\n const liquidationProtocolRewardRatio =\n options.liquidationProtocolRewardRatio\n ? this.encodeDecimal(options.liquidationProtocolRewardRatio)\n : null;\n return await this.submitTransaction({\n exchange: {\n admin: {\n update_perp_liquidation_config: {\n args: {\n liquidation_fee: liquidationFee,\n liquidation_ioc_buffer: liquidationIocBuffer,\n backstop_liquidation_threshold: backstopLiquidationThreshold,\n liquidation_protocol_reward_ratio: liquidationProtocolRewardRatio,\n },\n },\n },\n },\n });\n }\n\n public async adminUpdateGlobalVaultConfig(options: {\n leaderMinimumHoldingPercentage?: number;\n creationFeeUsdc?: Decimal;\n minDepositValue?: Decimal;\n }) {\n const creationFeeUsdc = options.creationFeeUsdc\n ? this.encodeDecimal(options.creationFeeUsdc)\n : null;\n const minDepositValue = options.minDepositValue\n ? this.encodeDecimal(options.minDepositValue)\n : null;\n return await this.submitTransaction({\n exchange: {\n admin: {\n update_global_vault_config: {\n args: {\n leader_minimum_holding_percentage:\n options.leaderMinimumHoldingPercentage ?? null,\n creation_fee_usdc: creationFeeUsdc,\n min_deposit_value: minDepositValue,\n },\n },\n },\n },\n });\n }\n\n public async adminWithdrawFromTreasury(\n asset: AssetName,\n amount: Decimal,\n to: Address,\n ) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n admin: {\n withdraw_from_treasury: {\n asset_id: assetId,\n amount: this.encodeDecimal(amount),\n to,\n },\n },\n },\n });\n }\n\n public async adminAutoDeleverage(options: {\n counterpartyA: Address;\n counterpartyASubAccountIndex?: number;\n counterpartyB: Address;\n counterpartyBSubAccountIndex?: number;\n market: MarketName;\n size?: Decimal;\n settlementPrice: Decimal;\n }) {\n const marketId = this.getMarketId(options.market);\n const size = this.encodeDecimal(options.size);\n return await this.submitTransaction({\n exchange: {\n admin: {\n auto_deleverage: {\n counterparty_a: options.counterpartyA,\n counterparty_a_sub_account_index:\n options.counterpartyASubAccountIndex ?? null,\n counterparty_b: options.counterpartyB,\n counterparty_b_sub_account_index:\n options.counterpartyBSubAccountIndex ?? null,\n market_id: marketId,\n size,\n settlement_price: this.encodeDecimal(options.settlementPrice),\n },\n },\n },\n });\n }\n\n public async adminDeposit(\n userAddress: Address,\n asset: AssetName,\n amount: Decimal,\n ) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n admin: {\n deposit: {\n user_address: userAddress,\n asset_id: assetId,\n amount: this.encodeDecimal(amount),\n },\n },\n },\n });\n }\n\n // ============================================\n // Warp (Hyperlane) Actions\n // ============================================\n\n public async warpRegister(options: {\n admin: Address;\n remoteTokenId: string;\n localDecimals: number;\n remoteDecimals: number;\n ismThreshold: number;\n ismValidators: string[];\n remoteRouters: [number, string][];\n inboundTransferrableTokensLimit: string;\n inboundLimitReplenishmentPerSlot: string;\n outboundTransferrableTokensLimit: string;\n outboundLimitReplenishmentPerSlot: string;\n }) {\n return await this.submitTransaction({\n warp: {\n register: {\n admin: {\n InsecureOwner: options.admin,\n },\n token_source: {\n Synthetic: {\n remote_token_id: options.remoteTokenId,\n local_decimals: options.localDecimals,\n remote_decimals: options.remoteDecimals,\n },\n },\n ism: {\n MessageIdMultisig: {\n threshold: options.ismThreshold,\n validators: options.ismValidators,\n },\n },\n remote_routers: options.remoteRouters,\n inbound_transferrable_tokens_limit:\n options.inboundTransferrableTokensLimit,\n inbound_limit_replenishment_per_slot:\n options.inboundLimitReplenishmentPerSlot,\n outbound_transferrable_tokens_limit:\n options.outboundTransferrableTokensLimit,\n outbound_limit_replenishment_per_slot:\n options.outboundLimitReplenishmentPerSlot,\n },\n },\n });\n }\n\n public async warpUpdate(options: {\n warpRoute: string;\n admin?: Address;\n ismThreshold?: number;\n ismValidators?: string[];\n inboundTransferrableTokensLimit?: string;\n inboundLimitReplenishmentPerSlot?: string;\n outboundTransferrableTokensLimit?: string;\n outboundLimitReplenishmentPerSlot?: string;\n }) {\n return await this.submitTransaction({\n warp: {\n update: {\n warp_route: options.warpRoute,\n admin: options.admin ? { InsecureOwner: options.admin } : null,\n ism:\n options.ismThreshold != null && options.ismValidators != null\n ? {\n MessageIdMultisig: {\n threshold: options.ismThreshold,\n validators: options.ismValidators,\n },\n }\n : null,\n inbound_transferrable_tokens_limit:\n options.inboundTransferrableTokensLimit ?? null,\n inbound_limit_replenishment_per_slot:\n options.inboundLimitReplenishmentPerSlot ?? null,\n outbound_transferrable_tokens_limit:\n options.outboundTransferrableTokensLimit ?? null,\n outbound_limit_replenishment_per_slot:\n options.outboundLimitReplenishmentPerSlot ?? null,\n },\n },\n });\n }\n\n public async warpEnrollRemoteRouter(\n warpRoute: string,\n remoteDomain: number,\n remoteRouterAddress: string,\n ) {\n return await this.submitTransaction({\n warp: {\n enroll_remote_router: {\n warp_route: warpRoute,\n remote_domain: remoteDomain,\n remote_router_address: remoteRouterAddress,\n },\n },\n });\n }\n\n public async warpUnenrollRemoteRouter(\n warpRoute: string,\n remoteDomain: number,\n ) {\n return await this.submitTransaction({\n warp: {\n un_enroll_remote_router: {\n warp_route: warpRoute,\n remote_domain: remoteDomain,\n },\n },\n });\n }\n\n public async warpTransferRemote(options: {\n warpRoute: string;\n amount: number;\n destinationDomain: number;\n gasPaymentLimit: number;\n recipient: string;\n relayer?: { Standard?: string; Vm?: string };\n }) {\n return await this.submitTransaction({\n warp: {\n transfer_remote: {\n warp_route: options.warpRoute,\n amount: options.amount,\n destination_domain: options.destinationDomain,\n gas_payment_limit: options.gasPaymentLimit,\n recipient: options.recipient,\n relayer: options.relayer ?? null,\n },\n },\n });\n }\n\n // ============================================\n // Interchain Gas Paymaster Actions\n // ============================================\n\n public async setRelayerConfig(options: {\n domainOracleData: {\n domain: number;\n dataValue: { gasPrice: number; tokenExchangeRate: number };\n }[];\n domainDefaultGas: { domain: number; defaultGas: number }[];\n defaultGas: number;\n beneficiary?: string;\n }) {\n return await this.submitTransaction({\n interchain_gas_paymaster: {\n set_relayer_config: {\n domain_oracle_data: options.domainOracleData.map((d) => ({\n domain: d.domain,\n data_value: {\n gas_price: d.dataValue.gasPrice,\n token_exchange_rate: d.dataValue.tokenExchangeRate,\n },\n })),\n domain_default_gas: options.domainDefaultGas.map((d) => ({\n domain: d.domain,\n default_gas: d.defaultGas,\n })),\n default_gas: options.defaultGas,\n beneficiary: options.beneficiary ?? null,\n },\n },\n });\n }\n}\n\n// Factory function to create authenticated client (wallet required)\nasync function createAuthenticatedClient(\n endpoints: Endpoints,\n wallet: Wallet,\n delegatorAddress?: Address,\n txOpts?: TransactionOpts,\n): Promise<AuthenticatedClient> {\n await initialize();\n validateEndpoints(endpoints);\n console.debug(`Connecting to ${endpoints.rest}`);\n\n // This endpoint is ONLY used for Solana offchain authenticators (\"solana\", \"solanaSimple\").\n // Standard authenticator (\"standard\") uses \"/sequencer/txs\" internally via the inner StandardRollup.\n //\n // Endpoint routing by authenticator:\n // - \"standard\" → /sequencer/txs (Borsh-serialized, handled by inner StandardRollup)\n // - \"solana\" → /sequencer/solana_offchain_txs (JSON, signed with Solana spec preamble)\n // - \"solanaSimple\" → /sequencer/solana_offchain_txs (JSON, simple signature)\n const solanaEndpoint = \"/sequencer/solana_offchain_txs\";\n const rollupConfig: {\n url: string;\n getSerializer: (schema: RollupSchema) => WasmSerializer;\n context?: StandardRollupContext;\n } = {\n url: endpoints.rest,\n getSerializer: (schema: RollupSchema) => new WasmSerializer(schema),\n };\n\n const authenticator =\n txOpts?.authenticator ?? DEFAULT_TRANSACTION_OPTS.authenticator;\n const rollup = await createSolanaSignableRollup<RuntimeCall>(\n rollupConfig,\n solanaEndpoint,\n );\n const client = new AuthenticatedClient(\n endpoints,\n rollup,\n wallet,\n delegatorAddress,\n authenticator,\n );\n await client.initializeExchangeInfo();\n\n // Configure rollup with transaction defaults\n const chainId = await client.getChainId();\n\n rollupConfig.context = {\n defaultTxDetails: {\n max_priority_fee_bips:\n txOpts?.maxPriorityFeeBps ?? DEFAULT_TRANSACTION_OPTS.maxPriorityFeeBps,\n max_fee: txOpts?.maxFee ?? DEFAULT_TRANSACTION_OPTS.maxFee,\n gas_limit: txOpts?.gasLimit ?? DEFAULT_TRANSACTION_OPTS.gasLimit,\n chain_id: chainId,\n },\n };\n const rollupWithContext = await createSolanaSignableRollup<RuntimeCall>(\n rollupConfig,\n solanaEndpoint,\n );\n // Replace rollup with configured version after initialization\n // This is safe because we're in the factory function that creates the client\n client.rollup = rollupWithContext;\n\n return client;\n}\n\n// Client namespace - factory methods that return the correct type based on parameters\n// This provides a clean API: Client.fromNetwork() works for both authenticated and read-only\nexport namespace Client {\n // Overload: with wallet → returns AuthenticatedClient\n export function fromEndpoints(\n endpoints: Endpoints,\n wallet: Wallet,\n delegatorAddress?: Address,\n txOpts?: TransactionOpts,\n ): Promise<AuthenticatedClient>;\n // Overload: without wallet → returns ReadOnlyClient\n export function fromEndpoints(endpoints: Endpoints): Promise<ReadOnlyClient>;\n // Implementation\n export async function fromEndpoints(\n endpoints: Endpoints,\n wallet?: Wallet,\n delegatorAddress?: Address,\n txOpts?: TransactionOpts,\n ): Promise<ReadOnlyClient | AuthenticatedClient> {\n if (wallet) {\n return await createAuthenticatedClient(\n endpoints,\n wallet,\n delegatorAddress,\n txOpts,\n );\n }\n return await ReadOnlyClient.fromEndpoints(endpoints);\n }\n\n // Overload: with wallet → returns AuthenticatedClient\n export function fromNetwork(\n network: Network,\n wallet: Wallet,\n delegatorAddress?: Address,\n txOpts?: TransactionOpts,\n ): Promise<AuthenticatedClient>;\n // Overload: without wallet → returns ReadOnlyClient\n export function fromNetwork(network: Network): Promise<ReadOnlyClient>;\n // Implementation\n export async function fromNetwork(\n network: Network,\n wallet?: Wallet,\n delegatorAddress?: Address,\n txOpts?: TransactionOpts,\n ): Promise<ReadOnlyClient | AuthenticatedClient> {\n if (!isNetwork(network)) {\n throw new Error(`Invalid network: ${network}`);\n }\n if (wallet) {\n return await createAuthenticatedClient(\n NETWORKS[network],\n wallet,\n delegatorAddress,\n txOpts,\n );\n }\n return await ReadOnlyClient.fromNetwork(network);\n }\n}\n",
|
|
13
|
+
"import { getTokenId } from \"@sovereign-sdk/modules\";\nimport type { RollupSchema } from \"@sovereign-sdk/serializers\";\nimport { WasmSerializer } from \"@sovereign-sdk/serializers/wasm\";\nimport type { Transaction } from \"@sovereign-sdk/types\";\nimport {\n type Authenticator,\n createSolanaSignableRollup,\n type SolanaSignableRollup,\n type StandardRollupContext,\n type TransactionResult,\n VersionMismatchError,\n} from \"@sovereign-sdk/web3\";\n\nexport type { Authenticator };\n\nimport Decimal from \"decimal.js\";\nimport type { EquityType, MarginType } from \"./bullet-wasm/loader\";\nimport { BulletWasm, initialize, type MarginMode } from \"./bullet-wasm/loader\";\nimport { type Endpoints, NETWORKS } from \"./constants\";\nimport { BulletError } from \"./error\";\nimport type { Orderbook } from \"./orderbook\";\nimport type { RuntimeCall } from \"./rollupTypes\";\nimport {\n type Address,\n type AdminType,\n type AssetId,\n type AssetName,\n type FeeTier,\n type MarketId,\n type MarketMetadata,\n type MarketName,\n type MarkPriceUpdateArgs,\n marketKindFromMarketId,\n type Network,\n type NewOrderArgs,\n type NewTwapOrderArgs,\n type OraclePriceUpdateArgs,\n type OrderType,\n type Side,\n type SpotCollateralTransferDirection,\n type TokenId,\n type TpslPair,\n} from \"./types\";\nimport {\n base58ToBytes,\n isNetwork,\n isValidHttpUrl,\n serialize,\n serializeVersioned,\n validateEndpoints,\n} from \"./utils\";\nimport type { Wallet } from \"./wallet\";\nimport { WebSocketManager } from \"./websocket\";\nimport {\n type AccountAddresses,\n BaseResponseSchemas,\n type BorrowLendPool,\n type Delegate,\n type Delegates,\n type OrderbookL2,\n type PerpMarketConfig,\n ResponseSchemas,\n type SpotMarketConfig,\n type UserAccount,\n type VersionedExchangeAssets,\n type VersionedExchangeInfo,\n type VersionedExecutionIds,\n type VersionedPerpMarket,\n type VersionedRiskEngine,\n type VersionedSpotMarket,\n type VersionedUserAccountConfig,\n} from \"./zod-types/rest\";\nimport { WasmResponseSchemas } from \"./zod-types/wasm\";\n\n// Define transaction options struct\nexport interface TransactionOpts {\n /**\n * Maximum priority fee in basis points.\n * @default 0\n */\n maxPriorityFeeBps?: number;\n /**\n * Maximum fee for the transaction.\n * @default \"10000000000\"\n */\n maxFee?: string;\n /**\n * Gas limit for the transaction.\n * @default null\n */\n gasLimit?: number[] | null;\n /**\n * The authenticator scheme for this client. Set once at construction time\n * and used for all subsequent transactions — cannot be overridden per-call.\n *\n * This also determines how Decimal values are serialized:\n * - Solana authenticators use serde (string format, e.g. \"10000\")\n * - Standard authenticator uses Borsh (SurrogateDecimal { flags, hi, lo, mid })\n *\n * Options:\n *\n * - \"solanaAuto\": Auto-detect based on signer type (recommended for Solana wallets)\n * - Uses \"solana\" for LedgerSolanaSigner (with preamble)\n * - Uses \"solanaSimple\" for other Solana signers (no preamble)\n *\n * - \"solanaSimple\": For browser wallets (Phantom, Solflare, etc.) - no preamble\n * - Signs raw JSON bytes directly\n * - Smaller message size\n *\n * - \"solana\": For Ledger hardware wallets - with preamble\n * - Adds 85-byte preamble required by Ledger's signOffchainMessage API\n * - Provides metadata for Ledger's display\n *\n * - \"standard\": Standard Sovereign SDK authentication (not Solana off-chain)\n * - Uses the rollup's native authentication scheme\n * - For non-Solana wallets or when you need standard SDK auth\n * - Uses \"/sequencer/txs\" endpoint instead of \"/sequencer/accept-solana-offchain-tx\"\n *\n * @default \"standard\"\n */\n authenticator?: Authenticator;\n}\n\nfunction serializeExchangeInfoForWasm(exchangeInfo: VersionedExchangeInfo) {\n return serializeVersioned({\n version: exchangeInfo.version,\n data: {\n ...exchangeInfo.data,\n global_config: {\n ...exchangeInfo.data.global_config,\n pyth_lazer_trusted_signers: Array.from(\n exchangeInfo.data.global_config.pyth_lazer_trusted_signers,\n (signer) => Array.from(base58ToBytes(signer)),\n ),\n },\n },\n });\n}\n\nfunction serializeRiskEngineForWasm(riskEngine: VersionedRiskEngine) {\n if (riskEngine.version === \"V0\") {\n return serializeVersioned(riskEngine);\n }\n\n const { margin_config, pricing_engine } = riskEngine.data;\n return serializeVersioned({\n version: \"V1\",\n data: {\n margin_config: { V0: margin_config },\n pricing_engine:\n \"rwa_pricing_config\" in pricing_engine\n ? { V1: pricing_engine }\n : { V0: pricing_engine },\n },\n });\n}\n\nfunction wrapVersion<const V extends string, T>(\n version: V,\n data: T,\n): { [K in V]: T } {\n return { [version]: data } as { [K in V]: T };\n}\n\nfunction mapValues<K, V, R>(\n map: Map<K, V>,\n transform: (value: V) => R,\n): Map<K, R> {\n return new Map(\n Array.from(map.entries(), ([key, value]) => [key, transform(value)]),\n );\n}\n\nfunction serializeOrdersLedgerForWasm(\n ordersLedger: UserAccount[\"orders_ledger\"],\n) {\n return wrapVersion(\"V1\", {\n ...ordersLedger,\n perp_orders: mapValues(ordersLedger.perp_orders, (order) =>\n wrapVersion(\"V1\", order),\n ),\n spot_orders: mapValues(ordersLedger.spot_orders, (order) =>\n wrapVersion(\"V1\", order),\n ),\n });\n}\n\nfunction serializeUserAccountForWasm(userAccount: UserAccount) {\n return serializeVersioned({\n version: \"V1\",\n data: {\n ...userAccount,\n perp_ledgers: mapValues(userAccount.perp_ledgers, (ledger) =>\n wrapVersion(\"V1\", ledger),\n ),\n orders_ledger: serializeOrdersLedgerForWasm(userAccount.orders_ledger),\n },\n });\n}\n\n// Default transaction options\nconst DEFAULT_TRANSACTION_OPTS: Required<TransactionOpts> = {\n maxPriorityFeeBps: 0,\n maxFee: \"10000000000\",\n gasLimit: null,\n authenticator: \"standard\",\n};\n\ntype AmendOrderOptions =\n | {\n existingOrderId: bigint;\n existingClientOrderId?: never;\n newOrderArgs: NewOrderArgs;\n }\n | {\n existingOrderId?: never;\n existingClientOrderId: bigint;\n newOrderArgs: NewOrderArgs;\n };\n\ntype CancelOrderOptions =\n | {\n orderId: bigint;\n clientOrderId?: never;\n }\n | {\n orderId?: never;\n clientOrderId: bigint;\n };\n\ntype AssetInfo = {\n id: AssetId;\n name: AssetName;\n tokenId: TokenId | null;\n decimals: number;\n withdrawFee: string;\n};\n\n// Base class for read-only operations (no wallet required)\nexport class ReadOnlyClient {\n public rollup: SolanaSignableRollup<RuntimeCall>;\n public readonly endpoint: string;\n protected readonly wsManager?: WebSocketManager;\n protected assetInfoRegistry?: Map<AssetName, AssetInfo>;\n protected assetInfoRegistryReverse?: Map<AssetId, AssetInfo>;\n protected marketRegistry?: Map<MarketName, MarketMetadata>; // ID and type\n protected marketRegistryReverse?: Map<MarketId, MarketName>;\n protected generationOverride?: () => number;\n\n /**\n * @internal\n * Do not construct directly. Use Client.fromNetwork() or Client.fromEndpoints()\n */\n constructor(endpoints: Endpoints, rollup: SolanaSignableRollup<RuntimeCall>) {\n if (!isValidHttpUrl(endpoints.rest)) {\n throw new Error(`Invalid HTTP URL provided: ${endpoints.rest}`);\n }\n this.endpoint = endpoints.rest;\n this.rollup = rollup;\n if (endpoints.ws) {\n this.wsManager = new WebSocketManager(endpoints.ws);\n }\n // Initialize exchange info and registries asynchronously\n // Factory methods must await this separately\n }\n\n // Static convenience constructors (read-only, no wallet)\n public static async fromEndpoints(\n endpoints: Endpoints,\n ): Promise<ReadOnlyClient> {\n await initialize();\n validateEndpoints(endpoints);\n console.debug(`Connecting to ${endpoints.rest}`);\n\n const rollupConfig = {\n url: endpoints.rest,\n getSerializer: (schema: RollupSchema) => new WasmSerializer(schema),\n };\n\n // This endpoint is ONLY used for Solana offchain authenticators (\"solana\", \"solanaSimple\").\n // Standard authenticator (\"standard\") uses \"/sequencer/txs\" internally via the inner StandardRollup.\n //\n // Endpoint routing by authenticator:\n // - \"standard\" → /sequencer/txs (Borsh-serialized, handled by inner StandardRollup)\n // - \"solana\" → /sequencer/solana_offchain_txs (JSON, signed with Solana spec preamble)\n // - \"solanaSimple\" → /sequencer/solana_offchain_txs (JSON, simple signature)\n const solanaEndpoint = \"/sequencer/solana_offchain_txs\";\n const rollup = await createSolanaSignableRollup<RuntimeCall>(\n rollupConfig,\n solanaEndpoint,\n );\n const client = new ReadOnlyClient(endpoints, rollup);\n await client.initializeExchangeInfo();\n return client;\n }\n\n public static async fromNetwork(network: Network): Promise<ReadOnlyClient> {\n if (!isNetwork(network)) {\n throw new Error(`Invalid network: ${network}`);\n }\n return await ReadOnlyClient.fromEndpoints(NETWORKS[network]);\n }\n\n public setGenerationOverride(generation: (() => number) | undefined) {\n this.generationOverride = generation;\n }\n\n // HTTP methods for data fetching (errors bubble up naturally from Sovereign SDK)\n private async fetchApiResource<T>(\n path: string,\n params?: Record<string, string | undefined>,\n ): Promise<T> {\n return await this.rollup.http.get<T>(path, { query: params });\n }\n\n private async fetchBulkApiResource<T>(\n path: string,\n body: Record<string, unknown>,\n params?: Record<string, string>,\n ): Promise<T> {\n return await this.rollup.http.post<T>(path, { query: params, body });\n }\n\n /**\n * @internal\n * Initializes exchange info and registries. Called automatically by factory methods.\n */\n async initializeExchangeInfo(): Promise<void> {\n const exchangeInfo = await this.getExchangeInfo();\n if (!exchangeInfo) {\n throw new Error(\"Exchange info not found\");\n }\n\n this.assetInfoRegistry = new Map();\n this.assetInfoRegistryReverse = new Map();\n\n this.marketRegistry = new Map();\n this.marketRegistryReverse = new Map();\n\n for (const info of exchangeInfo.data.assets.values()) {\n if (info && typeof info.name === \"string\") {\n const transformedInfo = {\n id: info.id,\n name: info.name,\n tokenId: info.token_id,\n decimals: info.decimals,\n withdrawFee: info.withdraw_fee.toString(),\n };\n this.assetInfoRegistry.set(info.name, transformedInfo);\n this.assetInfoRegistryReverse.set(info.id, transformedInfo);\n }\n }\n\n for (const info of exchangeInfo.data.markets.values()) {\n if (info && typeof info.name === \"string\") {\n this.marketRegistry.set(info.name, {\n id: info.id,\n kind: \"kind\" in info ? info.kind : marketKindFromMarketId(info.id),\n baseAssetId: info.base_asset_id,\n name: info.name,\n });\n this.marketRegistryReverse.set(info.id, info.name);\n }\n }\n }\n\n // ========================================================================\n // Public Read Methods (work without wallet)\n // ========================================================================\n\n public async getExchangeInfo(): Promise<VersionedExchangeInfo | null> {\n const path = \"/modules/exchange/state/exchange-info\";\n const response = await this.fetchApiResource(path);\n const parsed = ResponseSchemas.ExchangeInfo.parse(response);\n return parsed.value;\n }\n\n private getMarketMapping(): Map<MarketName, MarketMetadata> {\n if (!this.marketRegistry) {\n throw new Error(\"Market registry not initialized\");\n }\n return this.marketRegistry;\n }\n\n public getAssetInfo(asset: AssetName): AssetInfo {\n if (!this.assetInfoRegistry) {\n throw new Error(\"Asset registry not initialized\");\n }\n const assetInfo = this.assetInfoRegistry.get(asset);\n if (!assetInfo) {\n throw new Error(`Asset ${asset} not found`);\n }\n\n return assetInfo;\n }\n\n public getAssetId(asset: AssetName): AssetId {\n if (!this.assetInfoRegistry) {\n throw new Error(\"Asset registry not initialized\");\n }\n const assetInfo = this.assetInfoRegistry.get(asset);\n if (!assetInfo) {\n throw new Error(`Asset ${asset} not found`);\n }\n return assetInfo.id;\n }\n\n public getAssetName(assetId: AssetId): AssetName {\n if (!this.assetInfoRegistryReverse) {\n throw new Error(\"Asset registry not initialized\");\n }\n const assetInfo = this.assetInfoRegistryReverse.get(assetId);\n if (!assetInfo) {\n throw new Error(`Asset ${assetId} not found`);\n }\n return assetInfo.name;\n }\n\n public getTokenAddress(assetName: AssetName): TokenId {\n if (!this.assetInfoRegistry) {\n throw new Error(\n \"Asset registry not initialized. Call initializeRegistries() first.\",\n );\n }\n\n const assetInfo = this.assetInfoRegistry.get(assetName);\n if (!assetInfo?.tokenId) {\n throw new Error(`Token address not found for asset ${assetName}`);\n }\n\n return assetInfo.tokenId;\n }\n\n public getTokenAddresses(): Record<AssetName, TokenId> {\n if (!this.assetInfoRegistry) {\n throw new Error(\n \"Asset registry not initialized. Call initializeRegistries() first.\",\n );\n }\n\n const tokenAddresses: Record<AssetName, TokenId> = {};\n for (const [assetName, assetInfo] of this.assetInfoRegistry.entries()) {\n if (assetInfo.tokenId) {\n tokenAddresses[assetName] = assetInfo.tokenId;\n }\n }\n\n return tokenAddresses;\n }\n\n public getMarketId(market: MarketName): MarketId {\n return this.getMarketMeta(market).id;\n }\n\n public getMarketMeta(market: MarketName): MarketMetadata {\n const marketRegistry = this.getMarketMapping();\n const marketId = marketRegistry.get(market);\n if (marketId === undefined) {\n throw new Error(`Market ${market} not found`);\n }\n return marketId;\n }\n\n public getMarketName(marketId: MarketId): MarketName {\n if (!this.marketRegistryReverse) {\n throw new Error(\"Market registry not initialized\");\n }\n const marketName = this.marketRegistryReverse.get(marketId);\n if (marketName === undefined) {\n throw new Error(`Market ${marketId} not found`);\n }\n return marketName;\n }\n\n public async getOrderbookL2(\n market: MarketName,\n levels = 100,\n ): Promise<OrderbookL2> {\n const marketId = this.getMarketId(market);\n const path = `/modules/exchange/api/v1/orderbook-level2/${marketId}?levels=${levels}`;\n const response = await this.fetchApiResource(path);\n const parsed = ResponseSchemas.OrderbookL2.parse(response);\n return parsed.orderbook;\n }\n\n public async getOrderbookL2s(\n markets: MarketName[],\n levels = 100,\n ): Promise<Map<MarketId, OrderbookL2>> {\n const marketIds = markets.map((market) => {\n return this.getMarketId(market);\n });\n const path = \"/modules/exchange/api/v1/orderbook-level2/bulk\";\n const response = await this.fetchBulkApiResource(path, {\n requests: marketIds.map((marketId) => ({\n market_id: marketId,\n depth: levels,\n })),\n });\n const parsed = ResponseSchemas.OrderbookL2Bulk.parse(response);\n return parsed.found;\n }\n\n public async getChainId(): Promise<number> {\n const constants = await this.rollup.rollup.constants();\n return constants.chain_id;\n }\n\n public async getUserAccountAddresses(\n offset?: number,\n limit?: number,\n ): Promise<AccountAddresses> {\n const path = \"/modules/exchange/api/v1/account/addresses\";\n const response = await this.fetchApiResource(path, {\n offset: offset?.toString(),\n limit: limit?.toString(),\n });\n const parsed = ResponseSchemas.AccountAddresses.parse(response);\n return parsed;\n }\n\n public async getUserAccount(address: Address): Promise<UserAccount> {\n const path = `/modules/exchange/api/v1/account/${address}`;\n const response = await this.fetchApiResource(path);\n const parsed = ResponseSchemas.UserAccount.parse(response);\n return parsed.account;\n }\n\n public async getUserAccounts(\n addresses: Address[],\n ): Promise<Map<Address, UserAccount>> {\n const path = \"/modules/exchange/api/v1/account/bulk\";\n const response = await this.fetchBulkApiResource(path, {\n addresses,\n });\n const parsed = ResponseSchemas.UserAccountBulk.parse(response);\n return parsed.found;\n }\n\n public async getUserAccountConfig(\n address: Address,\n ): Promise<VersionedUserAccountConfig | null> {\n const path = `/modules/exchange/state/user-account-configs/items/${address}`;\n const response = await this.fetchApiResource(path);\n const parsed = ResponseSchemas.UserAccountConfig.parse(response);\n return parsed.value;\n }\n\n public async getDelegate(delegate: Address): Promise<Delegate> {\n const path = `/modules/exchange/api/v1/delegate/${delegate}`;\n const response = await this.fetchApiResource(path);\n const parsed = ResponseSchemas.Delegate.parse(response);\n return parsed;\n }\n\n /**\n * Get all delegates for a given delegator\n * @param delegator - The address of the delegator\n * @returns The delegates for the given delegator\n */\n public async getAllDelegates(delegator: Address): Promise<Delegates> {\n const path = `/modules/exchange/api/v1/delegates/${delegator}`;\n const response = await this.fetchApiResource(path);\n const parsed = ResponseSchemas.Delegates.parse(response);\n return parsed;\n }\n\n public async getExchangeAssets(): Promise<VersionedExchangeAssets | null> {\n const path = \"/modules/exchange/state/exchange-assets\";\n const response = await this.fetchApiResource(path);\n const parsed = ResponseSchemas.ExchangeAssets.parse(response);\n return parsed.value;\n }\n\n public async getRiskEngine(): Promise<VersionedRiskEngine | null> {\n const path = \"/modules/exchange/state/risk-engine\";\n const response = await this.fetchApiResource(path);\n const parsed = ResponseSchemas.RiskEngine.parse(response);\n return parsed.value;\n }\n\n public async getPerpMarket(market: MarketName): Promise<VersionedPerpMarket> {\n const marketId = this.getMarketId(market);\n const path = `/modules/exchange/api/v1/perp-market/${marketId}`;\n const response = await this.fetchApiResource(path);\n const parsed = ResponseSchemas.PerpMarket.parse(response);\n return parsed.market;\n }\n\n public async getPerpMarketsConfig(): Promise<\n Map<MarketId, PerpMarketConfig>\n > {\n const path = \"/modules/exchange/api/v1/perp-market/configs\";\n const response = await this.fetchApiResource(path);\n const parsed = ResponseSchemas.PerpMarketConfigs.parse(response);\n return parsed;\n }\n\n public async getSpotMarket(market: MarketName): Promise<VersionedSpotMarket> {\n const marketId = this.getMarketId(market);\n const path = `/modules/exchange/api/v1/spot-market/${marketId}`;\n const response = await this.fetchApiResource(path);\n const parsed = ResponseSchemas.SpotMarket.parse(response);\n return parsed.market;\n }\n\n public async getSpotMarketsConfig(): Promise<\n Map<MarketId, SpotMarketConfig>\n > {\n const path = \"/modules/exchange/api/v1/spot-market/configs\";\n const response = await this.fetchApiResource(path);\n const parsed = ResponseSchemas.SpotMarketConfigs.parse(response);\n return parsed;\n }\n\n public async getExecutionIds(): Promise<VersionedExecutionIds | null> {\n const path = \"/modules/exchange/state/execution-ids\";\n const response = await this.fetchApiResource(path);\n const parsed = ResponseSchemas.ExecutionIds.parse(response);\n return parsed.value;\n }\n\n public async getTokenBalance(\n tokenId: TokenId,\n address: Address,\n ): Promise<bigint> {\n const response = await this.fetchApiResource(\n `/modules/bank/tokens/${tokenId}/balances/${address}`,\n );\n const parsed = BaseResponseSchemas.CoinsResponse.parse(response);\n return parsed.amount;\n }\n\n public async getTotalSupply(tokenId: TokenId): Promise<bigint> {\n const response = await this.fetchApiResource(\n `/modules/bank/tokens/${tokenId}/total-supply`,\n );\n const parsed = BaseResponseSchemas.CoinsResponse.parse(response);\n return parsed.amount;\n }\n\n public async getGasTokenAddress(): Promise<TokenId> {\n const response = await this.fetchApiResource<{ token_id: TokenId }>(\n \"/modules/bank/tokens/gas_token\",\n );\n return response.token_id;\n }\n\n // ========================================================================\n // Calculation Methods\n // ========================================================================\n\n public calculateOrderbookMidpoint(\n orderbook: OrderbookL2,\n ): Decimal | undefined {\n if (orderbook.bids.length === 0 || orderbook.asks.length === 0) {\n return undefined;\n }\n const bestBid = orderbook.bids.reduce((max, bid) => {\n const keyDecimal = new Decimal(bid[0]);\n return max.greaterThan(keyDecimal) ? max : keyDecimal;\n }, new Decimal(Number.NEGATIVE_INFINITY));\n const bestAsk = orderbook.asks.reduce((min, ask) => {\n const keyDecimal = new Decimal(ask[0]);\n return min.lessThan(keyDecimal) ? min : keyDecimal;\n }, new Decimal(Number.POSITIVE_INFINITY));\n return bestBid.plus(bestAsk).div(2);\n }\n\n public calculateEntryPrice(\n market: MarketName,\n userAccount: UserAccount,\n ): Decimal {\n const marketId = this.getMarketId(market);\n const position = userAccount.perp_ledgers.get(marketId)?.position;\n if (!position) {\n throw new Error(\"No position found for asset\");\n }\n return position.cost_of_trades.div(position.size.abs());\n }\n\n public calculatePerpUnrealizedPnl(\n marginMode: MarginMode,\n userAccount: UserAccount,\n riskEngine: VersionedRiskEngine,\n ) {\n const userAccountObject = serializeUserAccountForWasm(userAccount);\n const riskEngineObject = serializeRiskEngineForWasm(riskEngine);\n const result = BulletWasm.calculate_perp_unrealized_pnl(\n marginMode,\n userAccountObject,\n riskEngineObject,\n );\n return new Decimal(result);\n }\n\n public calculateAccountEquity(\n marginMode: MarginMode,\n equityType: EquityType,\n conservative: boolean,\n userAccount: UserAccount,\n riskEngine: VersionedRiskEngine,\n ) {\n const userAccountObject = serializeUserAccountForWasm(userAccount);\n const riskEngineObject = serializeRiskEngineForWasm(riskEngine);\n const result = BulletWasm.calculate_account_equity(\n marginMode,\n userAccountObject,\n conservative,\n equityType,\n riskEngineObject,\n );\n return new Decimal(result);\n }\n\n public calculateAccountLeverage(\n marginMode: MarginMode,\n userAccount: UserAccount,\n riskEngine: VersionedRiskEngine,\n ) {\n const userAccountObject = serializeUserAccountForWasm(userAccount);\n const riskEngineObject = serializeRiskEngineForWasm(riskEngine);\n const result = BulletWasm.calculate_account_leverage(\n marginMode,\n userAccountObject,\n riskEngineObject,\n );\n return new Decimal(result);\n }\n\n public calculateAvailableMargin(\n marginMode: MarginMode,\n marginType: MarginType,\n conservative: boolean,\n userAccount: UserAccount,\n riskEngine: VersionedRiskEngine,\n ) {\n const userAccountObject = serializeUserAccountForWasm(userAccount);\n const riskEngineObject = serializeRiskEngineForWasm(riskEngine);\n const result = BulletWasm.calculate_available_margin(\n marginMode,\n userAccountObject,\n conservative,\n marginType,\n riskEngineObject,\n );\n return new Decimal(result);\n }\n\n public calculateUsedMargin(\n marginMode: MarginMode,\n withdrawal: boolean,\n marginType: MarginType,\n userAccount: UserAccount,\n riskEngine: VersionedRiskEngine,\n ) {\n const userAccountObject = serializeUserAccountForWasm(userAccount);\n const riskEngineObject = serializeRiskEngineForWasm(riskEngine);\n const result = BulletWasm.calculate_used_margin(\n marginMode,\n userAccountObject,\n withdrawal,\n marginType,\n riskEngineObject,\n );\n return new Decimal(result);\n }\n\n public calculateUsedPerpMargin(\n marginMode: MarginMode,\n userAccount: UserAccount,\n marginType: MarginType,\n riskEngine: VersionedRiskEngine,\n ) {\n const userAccountObject = serializeUserAccountForWasm(userAccount);\n const riskEngineObject = serializeRiskEngineForWasm(riskEngine);\n const result = BulletWasm.calculate_used_perp_margin(\n marginMode,\n userAccountObject,\n marginType,\n riskEngineObject,\n );\n return new Decimal(result);\n }\n\n public calculateUsedBorrowLendMargin(\n userAccount: UserAccount,\n marginType: MarginType,\n riskEngine: VersionedRiskEngine,\n ) {\n const userAccountObject = serializeUserAccountForWasm(userAccount);\n const riskEngineObject = serializeRiskEngineForWasm(riskEngine);\n const result = BulletWasm.calculate_used_borrow_lend_margin(\n userAccountObject,\n marginType,\n riskEngineObject,\n );\n return new Decimal(result);\n }\n\n public calculateEstimatedLiquidationPrice(\n marginMode: MarginMode,\n market: MarketName,\n userAccount: UserAccount,\n riskEngine: VersionedRiskEngine,\n ) {\n const marketId = this.getMarketId(market);\n const baseAssetId = this.getMarketMeta(market).baseAssetId;\n const userAccountObject = serializeUserAccountForWasm(userAccount);\n const riskEngineObject = serializeRiskEngineForWasm(riskEngine);\n const result = BulletWasm.calculate_estimated_liquidation_price(\n marginMode,\n userAccountObject,\n marketId,\n baseAssetId,\n riskEngineObject,\n );\n return new Decimal(result);\n }\n\n public calculateLiquidationRiskPercentage(\n marginMode: MarginMode,\n userAccount: UserAccount,\n riskEngine: VersionedRiskEngine,\n ) {\n const userAccountObject = serializeUserAccountForWasm(userAccount);\n const riskEngineObject = serializeRiskEngineForWasm(riskEngine);\n const result = BulletWasm.calculate_liquidation_risk_percentage(\n marginMode,\n userAccountObject,\n riskEngineObject,\n );\n return new Decimal(result);\n }\n\n public calculateMarginBalance(\n marginMode: MarginMode,\n userAccount: UserAccount,\n riskEngine: VersionedRiskEngine,\n ) {\n const userAccountObject = serializeUserAccountForWasm(userAccount);\n const riskEngineObject = serializeRiskEngineForWasm(riskEngine);\n const result = BulletWasm.calculate_margin_balance(\n marginMode,\n userAccountObject,\n riskEngineObject,\n );\n return WasmResponseSchemas.MarginBalanceSummarySchema.parse(result);\n }\n\n public calculatePerpMarginRequirement(\n marginMode: MarginMode,\n userAccount: UserAccount,\n marginType: MarginType,\n withdrawal: boolean,\n riskEngine: VersionedRiskEngine,\n ) {\n const userAccountObject = serializeUserAccountForWasm(userAccount);\n const riskEngineObject = serializeRiskEngineForWasm(riskEngine);\n const result = BulletWasm.calculate_perp_margin_requirement(\n marginMode,\n userAccountObject,\n marginType,\n withdrawal,\n riskEngineObject,\n );\n return new Decimal(result);\n }\n\n public calculateForceCancelRiskPercentage(\n marginMode: MarginMode,\n userAccount: UserAccount,\n riskEngine: VersionedRiskEngine,\n ) {\n const userAccountObject = serializeUserAccountForWasm(userAccount);\n const riskEngineObject = serializeRiskEngineForWasm(riskEngine);\n const result = BulletWasm.calculate_force_cancel_risk_percentage(\n marginMode,\n userAccountObject,\n riskEngineObject,\n );\n return new Decimal(result);\n }\n\n public calculateMaxBorrowAmount(\n asset: AssetName,\n userAccount: UserAccount,\n riskEngine: VersionedRiskEngine,\n ) {\n const assetId = this.getAssetId(asset);\n const userAccountObject = serializeUserAccountForWasm(userAccount);\n const riskEngineObject = serializeRiskEngineForWasm(riskEngine);\n const result = BulletWasm.calculate_max_borrow_amount(\n assetId,\n userAccountObject,\n riskEngineObject,\n );\n return new Decimal(result);\n }\n\n public calculateMaxOrderSize(\n marginMode: MarginMode,\n market: MarketName,\n price: Decimal,\n side: Side,\n orderType: OrderType,\n reduceOnly: boolean,\n userAccount: UserAccount,\n riskEngine: VersionedRiskEngine,\n orderbook: OrderbookL2,\n nIterations = 100,\n errorTolerance: Decimal = new Decimal(0.0001),\n ) {\n const marketId = this.getMarketId(market);\n const userAccountObject = serializeUserAccountForWasm(userAccount);\n const riskEngineObject = serializeRiskEngineForWasm(riskEngine);\n const orderbookObject = serialize(orderbook);\n const result = BulletWasm.calculate_max_order_size(\n marginMode,\n marketId,\n price.toFixed(),\n side,\n orderType,\n reduceOnly,\n userAccountObject,\n riskEngineObject,\n orderbookObject,\n nIterations,\n errorTolerance.toFixed(),\n );\n return new Decimal(result);\n }\n\n public calculateWithdrawableAmountOfCrossMarginAsset(\n asset: AssetName,\n forTransferSpotCollateral: boolean,\n userAccount: UserAccount,\n riskEngine: VersionedRiskEngine,\n exchangeInfo: VersionedExchangeInfo,\n ) {\n const assetId = this.getAssetId(asset);\n const userAccountObject = serializeUserAccountForWasm(userAccount);\n const riskEngineObject = serializeRiskEngineForWasm(riskEngine);\n const exchangeInfoObject = serializeExchangeInfoForWasm(exchangeInfo);\n const result =\n BulletWasm.calculate_withdrawable_amount_of_cross_margin_asset(\n assetId,\n forTransferSpotCollateral,\n userAccountObject,\n riskEngineObject,\n exchangeInfoObject,\n );\n return new Decimal(result);\n }\n\n public simulateUsedCrossMarginOnBorrow(\n asset: AssetName,\n borrowAmount: Decimal,\n userAccount: UserAccount,\n marginType: MarginType,\n riskEngine: VersionedRiskEngine,\n ) {\n const assetId = this.getAssetId(asset);\n const userAccountObject = serializeUserAccountForWasm(userAccount);\n const riskEngineObject = serializeRiskEngineForWasm(riskEngine);\n const result = BulletWasm.simulate_used_cross_margin_on_borrow(\n assetId,\n borrowAmount.toFixed(),\n userAccountObject,\n marginType,\n riskEngineObject,\n );\n return WasmResponseSchemas.SimulationResultSchema.parse(result);\n }\n\n public simulateUsedCrossMarginOnOrder(\n market: MarketName,\n newOrderArgs: NewOrderArgs,\n userAccount: UserAccount,\n riskEngine: VersionedRiskEngine,\n orderbook: OrderbookL2,\n ) {\n const marketId = this.getMarketId(market);\n const userAccountObject = serializeUserAccountForWasm(userAccount);\n const riskEngineObject = serializeRiskEngineForWasm(riskEngine);\n const orderbookObject = serialize(orderbook);\n const result = BulletWasm.simulate_used_cross_margin_on_order(\n marketId,\n {\n price: newOrderArgs.price.toFixed(),\n size: newOrderArgs.size.toFixed(),\n side: newOrderArgs.side,\n order_type: newOrderArgs.orderType,\n reduce_only: newOrderArgs.reduceOnly,\n },\n userAccountObject,\n riskEngineObject,\n orderbookObject,\n );\n return WasmResponseSchemas.SimulationResultSchema.parse(result);\n }\n\n public simulateCrossMarginEstimatedLiquidationPriceOnOrder(\n market: MarketName,\n newOrderArgs: NewOrderArgs,\n userAccount: UserAccount,\n riskEngine: VersionedRiskEngine,\n orderbook: OrderbookL2,\n ) {\n const marketId = this.getMarketId(market);\n const baseAssetId = this.getMarketMeta(market).baseAssetId;\n const userAccountObject = serializeUserAccountForWasm(userAccount);\n const riskEngineObject = serializeRiskEngineForWasm(riskEngine);\n const orderbookObject = serialize(orderbook);\n const result =\n BulletWasm.simulate_cross_margin_estimated_liquidation_price_on_order(\n marketId,\n {\n price: newOrderArgs.price.toFixed(),\n size: newOrderArgs.size.toFixed(),\n side: newOrderArgs.side,\n order_type: newOrderArgs.orderType,\n reduce_only: newOrderArgs.reduceOnly,\n },\n baseAssetId,\n userAccountObject,\n riskEngineObject,\n orderbookObject,\n );\n return WasmResponseSchemas.SimulationResultSchema.parse(result);\n }\n\n public calculatePositionsAdditionalMetadata(\n userAccount: UserAccount,\n riskEngine: VersionedRiskEngine,\n exchangeInfo: VersionedExchangeInfo,\n ) {\n const userAccountObject = serializeUserAccountForWasm(userAccount);\n const riskEngineObject = serializeRiskEngineForWasm(riskEngine);\n const exchangeInfoObject = serializeExchangeInfoForWasm(exchangeInfo);\n\n const result = BulletWasm.calculate_positions_additional_metadata(\n userAccountObject,\n riskEngineObject,\n exchangeInfoObject,\n );\n\n return WasmResponseSchemas.PositionAdditionalMetadataSchema.parse(result);\n }\n\n public calculateBorrowLendPoolAdditionalMetadata(\n borrowLendPools: Map<AssetId, BorrowLendPool>,\n asset: AssetName,\n ) {\n const assetId = this.getAssetId(asset);\n const borrowLendPoolsObject = serialize(borrowLendPools);\n const result = BulletWasm.calculate_borrow_lend_additional_metadata(\n borrowLendPoolsObject?.get(assetId),\n );\n return WasmResponseSchemas.BorrowLendMarketAdditionalMetadataSchema.parse(\n result,\n );\n }\n\n public calculateCrossMarginAccountSummaryBatch(\n userAccounts: UserAccount[],\n riskEngine: VersionedRiskEngine,\n useWeightedEquity = true,\n ) {\n const userAccountsObject = userAccounts.map(serializeUserAccountForWasm);\n const riskEngineObject = serializeRiskEngineForWasm(riskEngine);\n const result = BulletWasm.calculate_cross_margin_account_summary_batch(\n userAccountsObject,\n riskEngineObject,\n useWeightedEquity,\n );\n return WasmResponseSchemas.AccountSummaryBatchSchema.parse(result);\n }\n\n public estimateHourlyFundingRate(\n market: MarketName,\n riskEngine: VersionedRiskEngine,\n ) {\n const marketId = this.getMarketId(market);\n const riskEngineObject = serializeRiskEngineForWasm(riskEngine);\n const result = BulletWasm.estimate_hourly_funding_rate(\n marketId,\n riskEngineObject,\n );\n return new Decimal(result);\n }\n\n // ========================================================================\n // WebSocket Methods\n // ========================================================================\n\n private getWebSocketManager(): WebSocketManager {\n if (!this.wsManager) {\n throw new Error(\"WebSocket connection not configured\");\n }\n return this.wsManager;\n }\n\n public async *subscribeOrderbook(\n market: MarketName,\n signal?: AbortSignal,\n ): AsyncIterable<Orderbook> {\n const marketId = this.getMarketId(market);\n yield* this.getWebSocketManager().subscribeOrderbook(marketId, signal);\n }\n\n public async unsubscribeOrderbook(market: MarketName) {\n const marketId = this.getMarketId(market);\n await this.getWebSocketManager().unsubscribeOrderbook(marketId);\n }\n\n // ========================================================================\n // Resource Management\n // ========================================================================\n\n /**\n * Dispose of all resources: WebSocket connections, Maps, and references\n * Call this when the client is no longer needed to prevent memory leaks\n */\n public dispose(): void {\n // Dispose WebSocket manager if it exists\n if (this.wsManager) {\n this.wsManager.dispose();\n }\n\n // Clear Maps\n this.assetInfoRegistry?.clear();\n this.assetInfoRegistryReverse?.clear();\n this.marketRegistry?.clear();\n this.marketRegistryReverse?.clear();\n\n // Clear references\n this.assetInfoRegistry = undefined;\n this.assetInfoRegistryReverse = undefined;\n this.marketRegistry = undefined;\n this.marketRegistryReverse = undefined;\n this.generationOverride = undefined;\n }\n}\n\n// Authenticated client - extends ReadOnlyClient and adds authenticated operations\nexport class AuthenticatedClient extends ReadOnlyClient {\n public readonly address: Address;\n private readonly wallet: Wallet;\n private readonly authenticator: Authenticator;\n private readonly useSerdePath: boolean;\n\n /**\n * @internal\n * Do not construct directly. Use Client.fromNetwork() or Client.fromEndpoints()\n */\n constructor(\n endpoints: Endpoints,\n rollup: SolanaSignableRollup<RuntimeCall>,\n wallet: Wallet,\n delegatorAddress?: Address,\n authenticator: Authenticator = \"standard\",\n ) {\n super(endpoints, rollup);\n this.wallet = wallet;\n this.address = delegatorAddress ?? wallet.address;\n this.authenticator = authenticator;\n // \"solanaAuto\" resolves to \"solana\" (Ledger) or \"solanaSimple\" (all other\n // signers) at call time — it never falls back to the standard/Borsh path.\n // See: SolanaSignableRollup.getAutoAuthenticator() in @sovereign-sdk/web3.\n this.useSerdePath =\n authenticator === \"solana\" ||\n authenticator === \"solanaSimple\" ||\n authenticator === \"solanaAuto\";\n }\n\n /**\n * Encodes a Decimal.js value for the configured authenticator:\n * - Solana auth (serde): returns string (e.g. \"10000\")\n * - Standard auth (borsh): returns SurrogateDecimal { flags, hi, lo, mid }\n */\n private encodeDecimal(d?: Decimal | null) {\n if (!d) return null;\n const fixed = d.toFixed();\n return this.useSerdePath\n ? fixed\n : BulletWasm.convert_rust_decimal_to_json(fixed);\n }\n\n // Override getUserAccount to use this.address when no address provided\n public override async getUserAccount(\n address?: Address,\n ): Promise<UserAccount> {\n const addr = address ?? this.address;\n return await super.getUserAccount(addr);\n }\n\n // Override getDelegates to use this.address when no address provided\n public override async getAllDelegates(address?: Address): Promise<Delegates> {\n const addr = address ?? this.address;\n return await super.getAllDelegates(addr);\n }\n\n public override async getUserAccountConfig(\n address?: Address,\n ): Promise<VersionedUserAccountConfig | null> {\n const addr = address ?? this.address;\n return await super.getUserAccountConfig(addr);\n }\n\n // Override getTokenBalance to use this.address when no address provided\n public override async getTokenBalance(\n tokenId: TokenId,\n address?: Address,\n ): Promise<bigint> {\n const addr = address ?? this.address;\n return await super.getTokenBalance(tokenId, addr);\n }\n\n // Authenticated-only methods\n public async getNonce(): Promise<number> {\n const pubKey = base58ToBytes(this.wallet.address);\n const dedup = await this.rollup.dedup(pubKey);\n return dedup.nonce;\n }\n\n // ========================================================================\n // Transaction Methods (requires wallet)\n // ========================================================================\n\n public async submitTransaction(\n runtimeCall: RuntimeCall,\n ): Promise<TransactionResult<Transaction<RuntimeCall>>> {\n try {\n // Decimals are already encoded in the correct format by encodeDecimal():\n // - Solana auth (serde): string format (\"10000\")\n // - Standard auth (borsh): SurrogateDecimal { flags, hi, lo, mid }\n return await this.rollup.call(runtimeCall, {\n signer: this.wallet.getSigner(),\n authenticator: this.authenticator,\n overrides: {\n uniqueness: this.generationOverride\n ? { generation: this.generationOverride() }\n : undefined,\n },\n });\n } catch (e) {\n // Handle version mismatch with retry\n if (e instanceof VersionMismatchError && e.retryable) {\n console.warn(\"Version mismatch, retrying...\");\n return await this.submitTransaction(runtimeCall);\n }\n // Convert to BulletError for consistent error handling\n throw BulletError.from(e);\n }\n }\n\n public async createToken(\n tokenName: string,\n tokenDecimals: number | null,\n initialBalance: bigint,\n mintToAddress: Address,\n admins: Address[],\n supplyCap: bigint | null,\n ) {\n const response = await this.submitTransaction({\n bank: {\n create_token: {\n token_name: tokenName,\n token_decimals: tokenDecimals,\n initial_balance: initialBalance.toString(),\n mint_to_address: mintToAddress,\n admins: admins,\n supply_cap: supplyCap?.toString() ?? null,\n },\n },\n });\n const rawBytestokenId = getTokenId(\n base58ToBytes(this.address),\n tokenName,\n tokenDecimals ?? 8,\n );\n return {\n rawBytestokenId,\n response,\n };\n }\n\n public async transfer(to: Address, amount: bigint, tokenId: TokenId) {\n return await this.submitTransaction({\n bank: {\n transfer: {\n to: to,\n coins: {\n amount: amount.toString(),\n token_id: tokenId,\n },\n },\n },\n });\n }\n\n public async mint(to: Address, amount: bigint, tokenId: TokenId) {\n return await this.submitTransaction({\n bank: {\n mint: {\n mint_to_address: to,\n coins: {\n amount: amount.toString(),\n token_id: tokenId,\n },\n },\n },\n });\n }\n\n public async deposit(asset: AssetName, amount: Decimal) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n user: {\n deposit: {\n asset_id: assetId,\n amount: this.encodeDecimal(amount),\n },\n },\n },\n });\n }\n\n public async depositToVault(\n vaultAddress: Address,\n asset: AssetName,\n amount: Decimal,\n ) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n user: {\n deposit_to_vault: {\n vault_address: vaultAddress,\n asset_id: assetId,\n amount: this.encodeDecimal(amount),\n },\n },\n },\n });\n }\n\n public async withdraw(asset: AssetName, amount: Decimal) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n user: {\n withdraw: {\n asset_id: assetId,\n amount: this.encodeDecimal(amount),\n },\n },\n },\n });\n }\n\n public async borrowSpot(\n asset: AssetName,\n amount: Decimal,\n subAccountIndex?: number,\n ) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n user: {\n borrow_spot: {\n asset_id: assetId,\n amount: this.encodeDecimal(amount),\n sub_account_index: subAccountIndex ?? null,\n },\n },\n },\n });\n }\n\n public async depositSpotCollateral(asset: AssetName, amount: Decimal) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n user: {\n deposit_spot_collateral: {\n asset_id: assetId,\n amount: this.encodeDecimal(amount),\n },\n },\n },\n });\n }\n\n public async withdrawSpotCollateral(asset: AssetName, amount: Decimal) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n user: {\n withdraw_spot_collateral: {\n asset_id: assetId,\n amount: this.encodeDecimal(amount),\n },\n },\n },\n });\n }\n\n public async transferSpotCollateral(\n direction: SpotCollateralTransferDirection,\n asset: AssetName,\n amount: Decimal,\n subAccountIndex?: number,\n ) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n user: {\n transfer_spot_collateral: {\n asset_id: assetId,\n amount: this.encodeDecimal(amount),\n direction,\n sub_account_index: subAccountIndex ?? null,\n },\n },\n },\n });\n }\n\n public async placeOrders(\n market: MarketName,\n newOrders: NewOrderArgs[],\n replace = false,\n subAccountIndex?: number,\n ) {\n const marketMeta = this.getMarketMeta(market);\n\n const args = newOrders.map((newOrder) => {\n return {\n price: this.encodeDecimal(newOrder.price),\n size: this.encodeDecimal(newOrder.size),\n side: newOrder.side,\n order_type: newOrder.orderType,\n reduce_only: newOrder.reduceOnly,\n client_order_id: newOrder.clientOrderId\n ? newOrder.clientOrderId.toString()\n : null,\n pending_tpsl_pair: newOrder.pendingTpslPair\n ? {\n tpsl_pair: {\n tp: newOrder.pendingTpslPair.tpslPair.tp\n ? {\n order_price: this.encodeDecimal(\n newOrder.pendingTpslPair.tpslPair.tp.orderPrice,\n ),\n trigger_price: this.encodeDecimal(\n newOrder.pendingTpslPair.tpslPair.tp.triggerPrice,\n ),\n price_condition:\n newOrder.pendingTpslPair.tpslPair.tp.priceCondition,\n order_type:\n newOrder.pendingTpslPair.tpslPair.tp.orderType,\n }\n : null,\n sl: newOrder.pendingTpslPair.tpslPair.sl\n ? {\n order_price: this.encodeDecimal(\n newOrder.pendingTpslPair.tpslPair.sl.orderPrice,\n ),\n trigger_price: this.encodeDecimal(\n newOrder.pendingTpslPair.tpslPair.sl.triggerPrice,\n ),\n price_condition:\n newOrder.pendingTpslPair.tpslPair.sl.priceCondition,\n order_type:\n newOrder.pendingTpslPair.tpslPair.sl.orderType,\n }\n : null,\n },\n dynamic_size: newOrder.pendingTpslPair.dynamicSize,\n }\n : null,\n };\n });\n\n const msgInner = {\n market_id: marketMeta.id,\n orders: args,\n replace,\n sub_account_index: subAccountIndex ?? null,\n };\n\n const msg: RuntimeCall = {\n exchange: {\n user: {\n place_orders: msgInner,\n },\n },\n };\n\n return await this.submitTransaction(msg);\n }\n\n public async createPerpPositionTpsl(\n market: MarketName,\n tpslPair: TpslPair,\n size?: Decimal,\n subAccountIndex?: number,\n ) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n user: {\n create_position_tpsl: {\n market_id: marketId,\n tpsl_pair: {\n tp: tpslPair.tp\n ? {\n order_price: this.encodeDecimal(tpslPair.tp.orderPrice),\n trigger_price: this.encodeDecimal(tpslPair.tp.triggerPrice),\n price_condition: tpslPair.tp.priceCondition,\n order_type: tpslPair.tp.orderType,\n }\n : null,\n sl: tpslPair.sl\n ? {\n order_price: this.encodeDecimal(tpslPair.sl.orderPrice),\n trigger_price: this.encodeDecimal(tpslPair.sl.triggerPrice),\n price_condition: tpslPair.sl.priceCondition,\n order_type: tpslPair.sl.orderType,\n }\n : null,\n },\n size: this.encodeDecimal(size),\n sub_account_index: subAccountIndex ?? null,\n },\n },\n },\n });\n }\n\n public async amendOrders(\n market: MarketName,\n options: AmendOrderOptions[],\n subAccountIndex?: number,\n ) {\n const marketMeta = this.getMarketMeta(market);\n const args = options.map((option) => {\n return {\n cancel: {\n order_id: option.existingOrderId?.toString() ?? null,\n client_order_id: option.existingClientOrderId?.toString() ?? null,\n },\n place: {\n price: this.encodeDecimal(option.newOrderArgs.price),\n size: this.encodeDecimal(option.newOrderArgs.size),\n side: option.newOrderArgs.side,\n order_type: option.newOrderArgs.orderType,\n reduce_only: option.newOrderArgs.reduceOnly,\n client_order_id:\n option.newOrderArgs.clientOrderId?.toString() ?? null,\n pending_tpsl_pair: option.newOrderArgs.pendingTpslPair\n ? {\n tpsl_pair: {\n tp: option.newOrderArgs.pendingTpslPair.tpslPair.tp\n ? {\n order_price: this.encodeDecimal(\n option.newOrderArgs.pendingTpslPair.tpslPair.tp\n .orderPrice,\n ),\n trigger_price: this.encodeDecimal(\n option.newOrderArgs.pendingTpslPair.tpslPair.tp\n .triggerPrice,\n ),\n price_condition:\n option.newOrderArgs.pendingTpslPair.tpslPair.tp\n .priceCondition,\n order_type:\n option.newOrderArgs.pendingTpslPair.tpslPair.tp\n .orderType,\n }\n : null,\n sl: option.newOrderArgs.pendingTpslPair.tpslPair.sl\n ? {\n order_price: this.encodeDecimal(\n option.newOrderArgs.pendingTpslPair.tpslPair.sl\n .orderPrice,\n ),\n trigger_price: this.encodeDecimal(\n option.newOrderArgs.pendingTpslPair.tpslPair.sl\n .triggerPrice,\n ),\n price_condition:\n option.newOrderArgs.pendingTpslPair.tpslPair.sl\n .priceCondition,\n order_type:\n option.newOrderArgs.pendingTpslPair.tpslPair.sl\n .orderType,\n }\n : null,\n },\n dynamic_size: option.newOrderArgs.pendingTpslPair.dynamicSize,\n }\n : null,\n },\n };\n });\n\n const msgInner = {\n market_id: marketMeta.id,\n orders: args,\n sub_account_index: subAccountIndex ?? null,\n };\n\n const msg: RuntimeCall = {\n exchange: {\n user: {\n amend_orders: msgInner,\n },\n },\n };\n\n return await this.submitTransaction(msg);\n }\n\n public async cancelTriggerOrders(\n market: MarketName,\n triggerOrderIds: bigint[],\n subAccountIndex?: number,\n ) {\n const marketMeta = this.getMarketMeta(market);\n\n const msgInner = {\n market_id: marketMeta.id,\n trigger_order_ids: triggerOrderIds.map((id) => id.toString()),\n sub_account_index: subAccountIndex ?? null,\n };\n\n return await this.submitTransaction({\n exchange: {\n user: {\n cancel_trigger_orders: msgInner,\n },\n },\n });\n }\n\n public async cancelOrders(\n market: MarketName,\n options: CancelOrderOptions[],\n subAccountIndex?: number,\n ) {\n const marketMeta = this.getMarketMeta(market);\n\n const msgInner = {\n market_id: marketMeta.id,\n orders: options.map((option) => {\n return {\n order_id: option.orderId?.toString() ?? null,\n client_order_id: option.clientOrderId?.toString() ?? null,\n };\n }),\n sub_account_index: subAccountIndex ?? null,\n };\n\n const msg: RuntimeCall = {\n exchange: {\n user: {\n cancel_orders: msgInner,\n },\n },\n };\n\n return await this.submitTransaction(msg);\n }\n\n public async adminCancelOrders(\n address: Address,\n market: MarketName,\n orderId: string,\n ) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n admin: {\n cancel_orders: { cancels: [[marketId, orderId, address]] },\n },\n },\n });\n }\n\n public async adminCancelTriggerOrder(\n address: Address,\n market: MarketName,\n triggerOrderId: string,\n ) {\n const marketId = this.getMarketId(market);\n\n return await this.submitTransaction({\n exchange: {\n admin: {\n cancel_trigger_orders: {\n cancels: [[marketId, triggerOrderId, address]],\n },\n },\n },\n });\n }\n\n public async updateAdmin(adminType: AdminType, newAdmin: Address) {\n return await this.submitTransaction({\n exchange: {\n admin: {\n update_admin: {\n admin_type: adminType,\n new_admin: newAdmin,\n },\n },\n },\n });\n }\n\n public async adminAddTradingCredits(address: Address, amount: Decimal) {\n return await this.submitTransaction({\n exchange: {\n keeper: {\n add_trading_credits: {\n user_address: address,\n amount: this.encodeDecimal(amount),\n },\n },\n },\n });\n }\n\n public async adminRemoveTradingCredits(address: Address, amount: Decimal) {\n return await this.submitTransaction({\n exchange: {\n keeper: {\n remove_trading_credits: {\n user_address: address,\n amount: this.encodeDecimal(amount),\n },\n },\n },\n });\n }\n\n public async adminSetCumulativeReferralRewards(\n address: Address,\n asset: AssetName,\n amount: Decimal,\n ) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n keeper: {\n set_cumulative_referral_rewards: {\n address,\n asset_id: assetId,\n amount: this.encodeDecimal(amount),\n },\n },\n },\n });\n }\n\n public async adminUpdateUserFeeDiscountBps(\n address: Address,\n feeDiscountBps: number,\n ) {\n return await this.submitTransaction({\n exchange: {\n keeper: {\n update_user_fee_discount_bps: {\n address,\n fee_discount_bps: feeDiscountBps,\n },\n },\n },\n });\n }\n\n public async adminUpdateUserFeeTier(address: Address, feeTier: FeeTier) {\n return await this.submitTransaction({\n exchange: {\n keeper: {\n update_user_fee_tier: {\n address,\n fee_tier: feeTier,\n },\n },\n },\n });\n }\n\n public async cancelMarketOrders(\n market: MarketName,\n subAccountIndex?: number,\n ) {\n const meta = this.getMarketMeta(market);\n return await this.submitTransaction({\n exchange: {\n user: {\n cancel_market_orders: {\n market_id: meta.id,\n sub_account_index: subAccountIndex ?? null,\n },\n },\n },\n });\n }\n\n public async cancelAllOrders(subAccountIndex?: number) {\n const msgInner = {\n sub_account_index: subAccountIndex ?? null,\n };\n\n return await this.submitTransaction({\n exchange: {\n user: {\n cancel_all_orders: msgInner,\n },\n },\n });\n }\n\n public async updateOraclePrices(\n pricesToUpdate: OraclePriceUpdateArgs[],\n publishTimestamp?: number,\n ) {\n // set publish_timestamp to current timestamp if not provided\n const timestamp = publishTimestamp || Math.floor(Date.now() * 1000);\n return await this.submitTransaction({\n exchange: {\n keeper: {\n update_oracle_prices: {\n prices: await Promise.all(\n pricesToUpdate.map(async ({ asset, oraclePrice }) => ({\n asset_id: this.getAssetId(asset),\n oracle_price: this.encodeDecimal(oraclePrice),\n })),\n ),\n publish_timestamp: timestamp,\n },\n },\n },\n });\n }\n\n public async updateMarkPrices(\n pricesToUpdate: MarkPriceUpdateArgs[],\n publishTimestamp?: number,\n ) {\n // set publish_timestamp to current timestamp if not provided\n const timestamp = publishTimestamp || Math.floor(Date.now() * 1000);\n return await this.submitTransaction({\n exchange: {\n keeper: {\n update_mark_prices: {\n prices: await Promise.all(\n pricesToUpdate.map(\n async ({ market, medianCexPrice, diffEma }) => ({\n market_id: this.getMarketId(market),\n median_cex_price: this.encodeDecimal(medianCexPrice),\n diff_ema: this.encodeDecimal(diffEma),\n }),\n ),\n ),\n publish_timestamp: timestamp,\n },\n },\n },\n });\n }\n\n public async updateMaxLeverageForMarket(\n market: MarketName,\n maxLeverage: number,\n subAccountIndex?: number,\n ) {\n if (!Number.isInteger(maxLeverage)) {\n throw Error(\"Max leverage must be set to an integer\");\n }\n\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n user: {\n update_max_leverage: {\n market_id: marketId,\n max_leverage: maxLeverage,\n sub_account_index: subAccountIndex ?? null,\n },\n },\n },\n });\n }\n\n public async claimReferralRewards(asset: AssetName) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n user: {\n claim_referral_rewards: {\n asset_id: assetId,\n },\n },\n },\n });\n }\n\n public async updatePremiumIndexes(markets: MarketName[]) {\n const marketIds = await Promise.all(\n markets.map(async (market) => {\n return this.getMarketId(market);\n }),\n );\n return await this.submitTransaction({\n exchange: {\n keeper: {\n update_premium_indexes: { market_ids: marketIds },\n },\n },\n });\n }\n\n public async executeTriggerOrders(market: MarketName) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n public: {\n execute_trigger_orders: { market_id: marketId },\n },\n },\n });\n }\n\n public async createTwapOrder(\n market: MarketName,\n twapOrderArgs: NewTwapOrderArgs,\n subAccountIndex?: number,\n ) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n user: {\n create_twap_order: {\n market_id: marketId,\n twap_order_args: {\n side: twapOrderArgs.side,\n total_size: this.encodeDecimal(twapOrderArgs.totalSize),\n reduce_only: twapOrderArgs.reduceOnly,\n total_duration_seconds: twapOrderArgs.totalDurationSeconds,\n },\n sub_account_index: subAccountIndex ?? null,\n },\n },\n },\n });\n }\n\n public async executeTwapOrders(market: MarketName) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n public: {\n execute_twap_orders: { market_id: marketId },\n },\n },\n });\n }\n\n public async cancelTwapOrder(\n market: MarketName,\n twapId: bigint,\n subAccountIndex?: number,\n ) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n user: {\n cancel_twap_order: {\n market_id: marketId,\n twap_id: twapId.toString(),\n sub_account_index: subAccountIndex ?? null,\n },\n },\n },\n });\n }\n\n public async activateTwapOrders(markets: MarketName[]) {\n const marketIds = markets.map((market) => this.getMarketId(market));\n return await this.submitTransaction({\n exchange: {\n public: {\n activate_twap_orders: { market_ids: marketIds },\n },\n },\n });\n }\n\n public async updateFunding(markets: MarketName[]) {\n const marketIds = await Promise.all(\n markets.map(async (market) => {\n return this.getMarketId(market);\n }),\n );\n return await this.submitTransaction({\n exchange: { keeper: { update_funding: { market_ids: marketIds } } },\n });\n }\n\n public async applyFunding(addresses: Address[]) {\n return await this.submitTransaction({\n exchange: {\n public: {\n apply_funding: {\n addresses: addresses,\n },\n },\n },\n });\n }\n\n public async accrueBorrowLendInterest() {\n return await this.submitTransaction({\n exchange: {\n public: {\n accrue_borrow_lend_interest: {},\n },\n },\n });\n }\n\n public async forceCancelOrders(address: Address) {\n return await this.submitTransaction({\n exchange: {\n public: {\n force_cancel_orders: {\n user_address: address,\n },\n },\n },\n });\n }\n\n public async liquidatePerpPositions(address: Address) {\n return await this.submitTransaction({\n exchange: {\n public: {\n liquidate_perp_positions: {\n address: address,\n },\n },\n },\n });\n }\n\n public async backstopLiquidatePerpPositions(\n address: Address,\n positions?: { market: MarketName; size: Decimal }[],\n subAccountIndex?: number,\n ) {\n const positionsWithIds = positions\n ? await Promise.all(\n positions.map(async ({ market, size }) => ({\n market_id: this.getMarketId(market),\n size: this.encodeDecimal(size),\n })),\n )\n : null;\n\n return await this.submitTransaction({\n exchange: {\n user: {\n backstop_liquidate_perp_positions: {\n address: address,\n positions: positionsWithIds,\n sub_account_index: subAccountIndex ?? null,\n },\n },\n },\n });\n }\n\n public async liquidateBorrowLendLiability(\n address: Address,\n liabilityAsset: AssetName,\n collateralAsset: AssetName,\n liabilityAmount: Decimal,\n subAccountIndex?: number,\n ) {\n const liabilityAssetId = this.getAssetId(liabilityAsset);\n const collateralAssetId = this.getAssetId(collateralAsset);\n return await this.submitTransaction({\n exchange: {\n user: {\n liquidate_borrow_lend_liability: {\n liquidatee_address: address,\n liability_asset_id: liabilityAssetId,\n collateral_asset_id: collateralAssetId,\n liability_amount: this.encodeDecimal(liabilityAmount),\n sub_account_index: subAccountIndex ?? null,\n },\n },\n },\n });\n }\n\n public async depositToUsdcPnlPool(amount: Decimal) {\n return await this.submitTransaction({\n exchange: {\n user: {\n deposit_to_pnl_pool: {\n usdc_amount: this.encodeDecimal(amount),\n },\n },\n },\n });\n }\n\n public async depositToInsuranceFund(amount: Decimal) {\n return await this.submitTransaction({\n exchange: {\n user: {\n deposit_to_insurance_fund: {\n usdc_amount: this.encodeDecimal(amount),\n },\n },\n },\n });\n }\n\n public async initAssetInfo(\n assetId: AssetId,\n assetName: AssetName,\n tokenId: TokenId | null,\n decimals: number,\n withdrawFee: Decimal,\n pythLazerFeedId: number | null,\n pythLazerQuoteFeedId: number | null,\n ) {\n return await this.submitTransaction({\n exchange: {\n admin: {\n init_asset_info_v_1: {\n args: {\n asset_id: assetId,\n asset_name: assetName,\n token_id: tokenId,\n decimals: decimals,\n withdraw_fee: this.encodeDecimal(withdrawFee),\n pyth_lazer_feed_id: pythLazerFeedId ?? null,\n pyth_lazer_quote_feed_id: pythLazerQuoteFeedId ?? null,\n },\n },\n },\n },\n });\n }\n\n public async updateAssetInfo(\n asset: AssetName,\n withdrawFee: Decimal,\n pythLazerFeedId?: number | null,\n pythLazerQuoteFeedId?: number | null,\n ) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n admin: {\n update_asset_info_v_1: {\n args: {\n asset_id: assetId,\n withdraw_fee: this.encodeDecimal(withdrawFee),\n pyth_lazer_feed_id: pythLazerFeedId ? pythLazerFeedId : null,\n pyth_lazer_quote_feed_id: pythLazerQuoteFeedId\n ? pythLazerQuoteFeedId\n : null,\n },\n },\n },\n },\n });\n }\n\n public async updateGlobalConfig(options: {\n maxOrdersPerUser?: number;\n maxTriggerOrdersPerUser?: number;\n maxOrdersPerBatchMsg?: number;\n maxTriggerOrdersToExecutePerMsg?: number;\n minNotionalTwapValue?: Decimal;\n minNotionalTwapValuePerOrder?: Decimal;\n twapExecutionIntervalSeconds?: number;\n depositLimitsPerUser?: [AssetId, Decimal][];\n whitelistedUsersForDeposit?: Address[];\n pyth_lazer_trusted_signers?: Address[];\n }) {\n return await this.submitTransaction({\n exchange: {\n admin: {\n update_global_config_v_1: {\n args: {\n max_orders_per_user: options.maxOrdersPerUser ?? null,\n max_trigger_orders_per_user:\n options.maxTriggerOrdersPerUser ?? null,\n max_orders_per_batch_msg: options.maxOrdersPerBatchMsg ?? null,\n max_trigger_orders_to_execute_per_msg:\n options.maxTriggerOrdersToExecutePerMsg ?? null,\n min_notional_twap_value: this.encodeDecimal(\n options.minNotionalTwapValue,\n ),\n min_notional_twap_value_per_order: this.encodeDecimal(\n options.minNotionalTwapValuePerOrder,\n ),\n twap_execution_interval_seconds:\n options.twapExecutionIntervalSeconds ?? null,\n deposit_limits_per_user:\n options.depositLimitsPerUser?.map(([assetId, amount]) => [\n assetId,\n this.encodeDecimal(amount),\n ]) ?? null,\n whitelisted_users_for_deposit:\n options.whitelistedUsersForDeposit ?? null,\n pyth_lazer_trusted_signers:\n options.pyth_lazer_trusted_signers ?? null,\n },\n },\n },\n },\n });\n }\n\n public async createVault(\n name: string,\n description: string,\n leader: Address,\n depositAssets: AssetName[],\n withdrawAsset: AssetName,\n withdrawLockupPeriodHours: number,\n whitelistDeposits: boolean,\n profitSharePercentage: number,\n withdrawalFeeBps: number,\n depositLimit: Decimal,\n ) {\n const depositAssetIds = depositAssets.map((asset) =>\n this.getAssetId(asset),\n );\n const withdrawAssetId = this.getAssetId(withdrawAsset);\n return await this.submitTransaction({\n exchange: {\n user: {\n create_vault: {\n args: {\n name,\n description,\n leader,\n deposit_asset_ids: depositAssetIds,\n withdraw_asset_id: withdrawAssetId,\n withdraw_lockup_period_hours: withdrawLockupPeriodHours,\n whitelist_deposits: whitelistDeposits,\n profit_share_percentage: profitSharePercentage,\n withdrawal_fee_bps: withdrawalFeeBps,\n deposit_limit: this.encodeDecimal(depositLimit),\n },\n },\n },\n },\n });\n }\n\n public async initSpotMarket(\n marketId: MarketId,\n baseAssetId: AssetId,\n quoteAssetId: AssetId,\n baseMinLotSize: Decimal,\n quoteMinLotSize: Decimal,\n maxOrdersPerSide: number,\n maxOrdersPerUser: number,\n maxTriggerOrdersPerUser: number,\n takerFeesTenthBps: number[],\n makerFeesTenthBps: number[],\n maxOrderToTriggerPriceDeviationRatio: Decimal,\n name: string,\n ) {\n return await this.submitTransaction({\n exchange: {\n admin: {\n init_spot_market: {\n args: {\n market_id: marketId,\n base_asset_id: baseAssetId,\n quote_asset_id: quoteAssetId,\n base_min_lot_size: this.encodeDecimal(baseMinLotSize),\n quote_min_lot_size: this.encodeDecimal(quoteMinLotSize),\n max_orders_per_side: maxOrdersPerSide,\n max_orders_per_user: maxOrdersPerUser,\n max_trigger_orders_per_user: maxTriggerOrdersPerUser,\n taker_fees_tenth_bps: takerFeesTenthBps,\n maker_fees_tenth_bps: makerFeesTenthBps,\n name: name,\n max_order_to_trigger_price_deviation_ratio: this.encodeDecimal(\n maxOrderToTriggerPriceDeviationRatio,\n ),\n },\n },\n },\n },\n });\n }\n\n public async updateSpotMarket(\n market: MarketName,\n options: {\n baseMinLotSize?: Decimal;\n quoteMinLotSize?: Decimal;\n maxOrdersPerSide?: number;\n maxOrdersPerUser?: number;\n maxTriggerOrdersPerUser?: number;\n takerFeesTenthBps?: number[];\n makerFeesTenthBps?: number[];\n maxOrderToTriggerPriceDeviationRatio?: Decimal;\n },\n ) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n admin: {\n update_spot_market: {\n args: {\n market_id: marketId,\n base_min_lot_size: this.encodeDecimal(options.baseMinLotSize),\n quote_min_lot_size: this.encodeDecimal(options.quoteMinLotSize),\n max_orders_per_side: options.maxOrdersPerSide ?? null,\n max_orders_per_user: options.maxOrdersPerUser ?? null,\n max_trigger_orders_per_user:\n options.maxTriggerOrdersPerUser ?? null,\n taker_fees_tenth_bps: options.takerFeesTenthBps ?? null,\n maker_fees_tenth_bps: options.makerFeesTenthBps ?? null,\n max_order_to_trigger_price_deviation_ratio: this.encodeDecimal(\n options.maxOrderToTriggerPriceDeviationRatio,\n ),\n },\n },\n },\n },\n });\n }\n\n public async initPerpMarket(\n marketId: MarketId,\n baseAssetId: AssetId,\n name: string,\n tradingMode: string,\n minTickSize: Decimal,\n minLotSize: Decimal,\n maxOrdersPerSide: number,\n maxOrdersPerUser: number,\n maxTriggerOrdersPerUser: number,\n minInterestRateClamp: Decimal,\n maxInterestRateClamp: Decimal,\n minFundingRateClamp: Decimal,\n maxFundingRateClamp: Decimal,\n maxOiNotional: Decimal,\n maxOrderToMarkPriceDeviationRatio: Decimal,\n maxTriggerToComparisonPriceDeviationRatio: Decimal,\n maxOrderToTriggerPriceDeviationRatio: Decimal,\n impactMargin: Decimal,\n interestRate: Decimal,\n leverageTable: Record<string, number>,\n takerFeesTenthBps: number[],\n makerFeesTenthBps: number[],\n ) {\n return await this.submitTransaction({\n exchange: {\n admin: {\n init_perp_market: {\n args: {\n market_id: marketId,\n base_asset_id: baseAssetId,\n name: name,\n trading_mode: tradingMode,\n min_tick_size: this.encodeDecimal(minTickSize),\n min_lot_size: this.encodeDecimal(minLotSize),\n max_orders_per_side: maxOrdersPerSide,\n max_orders_per_user: maxOrdersPerUser,\n max_trigger_orders_per_user: maxTriggerOrdersPerUser,\n min_interest_rate_clamp: this.encodeDecimal(minInterestRateClamp),\n max_interest_rate_clamp: this.encodeDecimal(maxInterestRateClamp),\n min_funding_rate_clamp: this.encodeDecimal(minFundingRateClamp),\n max_funding_rate_clamp: this.encodeDecimal(maxFundingRateClamp),\n max_oi_notional: this.encodeDecimal(maxOiNotional),\n max_order_to_mark_price_deviation_ratio: this.encodeDecimal(\n maxOrderToMarkPriceDeviationRatio,\n ),\n max_trigger_to_comparison_price_deviation_ratio:\n this.encodeDecimal(maxTriggerToComparisonPriceDeviationRatio),\n max_order_to_trigger_price_deviation_ratio: this.encodeDecimal(\n maxOrderToTriggerPriceDeviationRatio,\n ),\n impact_margin: this.encodeDecimal(impactMargin),\n interest_rate: this.encodeDecimal(interestRate),\n leverage_table_args: { table: leverageTable },\n taker_fees_tenth_bps: takerFeesTenthBps,\n maker_fees_tenth_bps: makerFeesTenthBps,\n },\n },\n },\n },\n });\n }\n\n public async updatePerpMarket(\n market: MarketName,\n options: {\n minTickSize?: Decimal;\n minLotSize?: Decimal;\n maxOrdersPerSide?: number;\n maxOrdersPerUser?: number;\n maxTriggerOrdersPerUser?: number;\n minInterestRateClamp?: Decimal;\n maxInterestRateClamp?: Decimal;\n minFundingRateClamp?: Decimal;\n maxFundingRateClamp?: Decimal;\n maxOiNotional?: Decimal;\n impactMargin?: Decimal;\n interestRate?: Decimal;\n takerFeesTenthBps?: number[];\n makerFeesTenthBps?: number[];\n maxOrderToMarkPriceDeviationRatio?: Decimal;\n maxTriggerToComparisonPriceDeviationRatio?: Decimal;\n maxOrderToTriggerPriceDeviationRatio?: Decimal;\n },\n ) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n admin: {\n update_perp_market: {\n args: {\n market_id: marketId,\n min_tick_size: this.encodeDecimal(options.minTickSize),\n min_lot_size: this.encodeDecimal(options.minLotSize),\n max_orders_per_side: options.maxOrdersPerSide ?? null,\n max_orders_per_user: options.maxOrdersPerUser ?? null,\n max_trigger_orders_per_user:\n options.maxTriggerOrdersPerUser ?? null,\n min_interest_rate_clamp: this.encodeDecimal(\n options.minInterestRateClamp,\n ),\n max_interest_rate_clamp: this.encodeDecimal(\n options.maxInterestRateClamp,\n ),\n min_funding_rate_clamp: this.encodeDecimal(\n options.minFundingRateClamp,\n ),\n max_funding_rate_clamp: this.encodeDecimal(\n options.maxFundingRateClamp,\n ),\n max_oi_notional: this.encodeDecimal(options.maxOiNotional),\n impact_margin: this.encodeDecimal(options.impactMargin),\n interest_rate: this.encodeDecimal(options.interestRate),\n taker_fees_tenth_bps: options.takerFeesTenthBps ?? null,\n maker_fees_tenth_bps: options.makerFeesTenthBps ?? null,\n max_order_to_mark_price_deviation_ratio: this.encodeDecimal(\n options.maxOrderToMarkPriceDeviationRatio,\n ),\n max_trigger_to_comparison_price_deviation_ratio:\n this.encodeDecimal(\n options.maxTriggerToComparisonPriceDeviationRatio,\n ),\n max_order_to_trigger_price_deviation_ratio: this.encodeDecimal(\n options.maxOrderToTriggerPriceDeviationRatio,\n ),\n leverage_table_args: null,\n },\n },\n },\n },\n });\n }\n\n public async initBorrowLendPool(\n assetId: AssetId,\n optimalUtilisationRate: Decimal,\n minBorrowRate: Decimal,\n maxBorrowRate: Decimal,\n optimalBorrowRate: Decimal,\n assetWeight: Decimal,\n initialLiabilityWeight: Decimal,\n maintenanceLiabilityWeight: Decimal,\n depositLimit: Decimal,\n borrowLimit: Decimal,\n maxUtilizationRate: Decimal,\n liquidationTotalRewardRatio: Decimal,\n protocolRewardRatio: Decimal,\n liabilityLiquidationLimitRatio: Decimal,\n interestFeeTenthBps: number,\n ) {\n return await this.submitTransaction({\n exchange: {\n admin: {\n init_borrow_lend_pool: {\n args: {\n asset_id: assetId,\n optimal_utilization_rate: this.encodeDecimal(\n optimalUtilisationRate,\n ),\n min_borrow_rate: this.encodeDecimal(minBorrowRate),\n max_borrow_rate: this.encodeDecimal(maxBorrowRate),\n optimal_borrow_rate: this.encodeDecimal(optimalBorrowRate),\n asset_weight: this.encodeDecimal(assetWeight),\n initial_liability_weight: this.encodeDecimal(\n initialLiabilityWeight,\n ),\n maintenance_liability_weight: this.encodeDecimal(\n maintenanceLiabilityWeight,\n ),\n deposit_limit: this.encodeDecimal(depositLimit),\n borrow_limit: this.encodeDecimal(borrowLimit),\n max_utilization_rate: this.encodeDecimal(maxUtilizationRate),\n liquidation_total_reward_ratio: this.encodeDecimal(\n liquidationTotalRewardRatio,\n ),\n protocol_reward_ratio: this.encodeDecimal(protocolRewardRatio),\n liability_liquidation_limit_ratio: this.encodeDecimal(\n liabilityLiquidationLimitRatio,\n ),\n interest_fee_tenth_bps: interestFeeTenthBps,\n },\n },\n },\n },\n });\n }\n\n public async updateBorrowLendPool(\n asset: AssetName,\n options: {\n optimalUtilizationRate?: Decimal;\n minBorrowRate?: Decimal;\n maxBorrowRate?: Decimal;\n optimalBorrowRate?: Decimal;\n assetWeight?: Decimal;\n initialLiabilityWeight?: Decimal;\n maintenanceLiabilityWeight?: Decimal;\n depositLimit?: Decimal;\n borrowLimit?: Decimal;\n maxUtilizationRate?: Decimal;\n liquidationTotalRewardRatio?: Decimal;\n protocolRewardRatio?: Decimal;\n liabilityLiquidationLimitRatio?: Decimal;\n interestFeeTenthBps?: number;\n },\n ) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n admin: {\n update_borrow_lend_pool: {\n args: {\n asset_id: assetId,\n optimal_utilization_rate: this.encodeDecimal(\n options.optimalUtilizationRate,\n ),\n min_borrow_rate: this.encodeDecimal(options.minBorrowRate),\n max_borrow_rate: this.encodeDecimal(options.maxBorrowRate),\n optimal_borrow_rate: this.encodeDecimal(\n options.optimalBorrowRate,\n ),\n asset_weight: this.encodeDecimal(options.assetWeight),\n initial_liability_weight: this.encodeDecimal(\n options.initialLiabilityWeight,\n ),\n maintenance_liability_weight: this.encodeDecimal(\n options.maintenanceLiabilityWeight,\n ),\n deposit_limit: this.encodeDecimal(options.depositLimit),\n borrow_limit: this.encodeDecimal(options.borrowLimit),\n max_utilization_rate: this.encodeDecimal(\n options.maxUtilizationRate,\n ),\n liquidation_total_reward_ratio: this.encodeDecimal(\n options.liquidationTotalRewardRatio,\n ),\n protocol_reward_ratio: this.encodeDecimal(\n options.protocolRewardRatio,\n ),\n liability_liquidation_limit_ratio: this.encodeDecimal(\n options.liabilityLiquidationLimitRatio,\n ),\n interest_fee_tenth_bps: options.interestFeeTenthBps ?? null,\n },\n },\n },\n },\n });\n }\n\n public async updateLeverageTable(\n market: MarketName,\n leverageTable: Record<string, number>,\n ) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n admin: {\n update_perp_leverage_table: {\n market_id: marketId,\n args: { table: leverageTable },\n },\n },\n },\n });\n }\n\n public async createSubAccount(index: number) {\n return await this.submitTransaction({\n exchange: {\n user: {\n create_sub_account: {\n index,\n },\n },\n },\n });\n }\n\n public async transferSubAccount(\n subAccountIndex: number,\n toSubAccount: boolean,\n asset: AssetName,\n amount: Decimal,\n ) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n user: {\n transfer_to_sub_account: {\n asset_id: assetId,\n amount: this.encodeDecimal(amount),\n sub_account_index: subAccountIndex,\n to_sub_account: toSubAccount,\n },\n },\n },\n });\n }\n\n public async delegateUser(\n delegate: Address,\n name: string,\n flags: number,\n subAccountIndex: number | null = null,\n expiresAt: number | null = null,\n ) {\n return await this.submitTransaction({\n exchange: {\n user: {\n delegate_user_v2: {\n delegate,\n name,\n sub_account_index: subAccountIndex,\n expires_at: expiresAt,\n flags,\n },\n },\n },\n });\n }\n\n public async revokeDelegation(delegate: Address, subAccountIndex?: number) {\n return await this.submitTransaction({\n exchange: {\n user: {\n revoke_delegation_v1: {\n delegate,\n sub_account_index: subAccountIndex ?? null,\n },\n },\n },\n });\n }\n\n public async vaultDelegateUser(\n vaultAddress: Address,\n delegate: Address,\n name: string,\n flags: number,\n expiresAt: number | null = null,\n ) {\n return await this.submitTransaction({\n exchange: {\n vault: {\n delegate_vault_user_v1: {\n vault_address: vaultAddress,\n delegate,\n name,\n expires_at: expiresAt,\n flags,\n },\n },\n },\n });\n }\n\n public async vaultRevokeDelegation(vaultAddress: Address, delegate: Address) {\n return await this.submitTransaction({\n exchange: {\n vault: {\n revoke_vault_delegation: {\n vault_address: vaultAddress,\n delegate,\n },\n },\n },\n });\n }\n\n public async adminPruneMarket(market: MarketName) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n admin: {\n prune_market: {\n market_id: marketId,\n },\n },\n },\n });\n }\n\n public async adminForceSettlePerpPosition(\n market: MarketName,\n usersToForceSettle: Address[],\n ) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n admin: {\n force_settle_perp_position: {\n market_id: marketId,\n users: usersToForceSettle,\n },\n },\n },\n });\n }\n\n public async adminHaltPerpMarket(\n market: MarketName,\n settlementPrice: Decimal,\n ) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n admin: {\n halt_perp_market: {\n market_id: marketId,\n settlement_price: this.encodeDecimal(settlementPrice),\n },\n },\n },\n });\n }\n\n public async adminHaltSpotMarket(market: MarketName) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n admin: {\n halt_spot_market: {\n market_id: marketId,\n },\n },\n },\n });\n }\n\n public async adminUnhaltPerpMarket(market: MarketName) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n admin: {\n unhalt_perp_market: {\n market_id: marketId,\n },\n },\n },\n });\n }\n\n public async adminUnhaltSpotMarket(market: MarketName) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n admin: {\n unhalt_spot_market: {\n market_id: marketId,\n },\n },\n },\n });\n }\n\n public async adminHaltBorrowLendPool(asset: AssetName) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n admin: {\n halt_borrow_lend_pool: {\n asset_id: assetId,\n },\n },\n },\n });\n }\n\n public async adminUnhaltBorrowLendPool(asset: AssetName) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n admin: {\n unhalt_borrow_lend_pool: {\n asset_id: assetId,\n },\n },\n },\n });\n }\n\n public async adminForceRemoveDelegate(delegator: Address, delegate: Address) {\n return await this.submitTransaction({\n exchange: {\n admin: {\n force_remove_delegate: {\n delegator,\n delegate,\n },\n },\n },\n });\n }\n\n // ============================================\n // Additional User Actions\n // ============================================\n\n public async settleFromPnlPool(subAccountIndex?: number) {\n return await this.submitTransaction({\n exchange: {\n user: {\n settle_from_pnl_pool: {\n sub_account_index: subAccountIndex ?? null,\n },\n },\n },\n });\n }\n\n public async depositToTreasury(asset: AssetName, amount: Decimal) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n user: {\n deposit_to_treasury: {\n asset_id: assetId,\n amount: this.encodeDecimal(amount),\n },\n },\n },\n });\n }\n\n public async claimBorrowLendFees() {\n return await this.submitTransaction({\n exchange: {\n user: {\n claim_borrow_lend_fees: {},\n },\n },\n });\n }\n\n public async queueWithdrawal(vaultAddress: Address, shares: Decimal) {\n return await this.submitTransaction({\n exchange: {\n user: {\n queue_withdrawal: {\n vault_address: vaultAddress,\n shares: this.encodeDecimal(shares),\n },\n },\n },\n });\n }\n\n public async cancelQueuedWithdrawal(vaultAddress: Address) {\n return await this.submitTransaction({\n exchange: {\n user: {\n cancel_queued_withdrawal: {\n vault_address: vaultAddress,\n },\n },\n },\n });\n }\n\n public async forceWithdrawVault(vaultAddress: Address, shares: Decimal) {\n return await this.submitTransaction({\n exchange: {\n user: {\n force_withdraw_vault: {\n vault_address: vaultAddress,\n shares: this.encodeDecimal(shares),\n },\n },\n },\n });\n }\n\n // ============================================\n // Vault Actions\n // ============================================\n\n public async updateVaultConfig(\n vaultAddress: Address,\n options: {\n depositLimit?: Decimal;\n withdrawLockupPeriodHours?: number;\n profitSharePercentage?: number;\n },\n ) {\n return await this.submitTransaction({\n exchange: {\n vault: {\n update_vault_config: {\n vault_address: vaultAddress,\n args: {\n deposit_limit: options.depositLimit\n ? this.encodeDecimal(options.depositLimit)\n : null,\n withdraw_lockup_period_hours:\n options.withdrawLockupPeriodHours ?? null,\n profit_share_percentage: options.profitSharePercentage ?? null,\n },\n },\n },\n },\n });\n }\n\n public async processWithdrawalQueue(vaultAddress: Address) {\n return await this.submitTransaction({\n exchange: {\n vault: {\n process_withdrawal_queue: {\n vault_address: vaultAddress,\n },\n },\n },\n });\n }\n\n public async whitelistDepositor(vaultAddress: Address, userAddress: Address) {\n return await this.submitTransaction({\n exchange: {\n vault: {\n whitelist_depositor: {\n vault_address: vaultAddress,\n user_address: userAddress,\n },\n },\n },\n });\n }\n\n public async unwhitelistDepositor(\n vaultAddress: Address,\n userAddress: Address,\n ) {\n return await this.submitTransaction({\n exchange: {\n vault: {\n unwhitelist_depositor: {\n vault_address: vaultAddress,\n user_address: userAddress,\n },\n },\n },\n });\n }\n\n // ============================================\n // Additional Admin Actions\n // ============================================\n\n public async adminDeleteAsset(asset: AssetName) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n admin: { delete_asset: { asset_id: assetId } },\n },\n });\n }\n\n public async adminDeleteMarket(market: MarketName) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n admin: {\n delete_market: {\n market_id: marketId,\n },\n },\n },\n });\n }\n\n public async adminCleanupUserMarketState(\n market: MarketName,\n users: Address[],\n ) {\n const marketId = this.getMarketId(market);\n return await this.submitTransaction({\n exchange: {\n admin: {\n cleanup_user_market_state: {\n market_id: marketId,\n users,\n },\n },\n },\n });\n }\n\n public async adminUpdatePerpLiquidationConfig(options: {\n liquidationFee?: Decimal;\n liquidationIocBuffer?: Decimal;\n backstopLiquidationThreshold?: Decimal;\n liquidationProtocolRewardRatio?: Decimal;\n }) {\n const liquidationFee = options.liquidationFee\n ? this.encodeDecimal(options.liquidationFee)\n : null;\n const liquidationIocBuffer = options.liquidationIocBuffer\n ? this.encodeDecimal(options.liquidationIocBuffer)\n : null;\n const backstopLiquidationThreshold = options.backstopLiquidationThreshold\n ? this.encodeDecimal(options.backstopLiquidationThreshold)\n : null;\n const liquidationProtocolRewardRatio =\n options.liquidationProtocolRewardRatio\n ? this.encodeDecimal(options.liquidationProtocolRewardRatio)\n : null;\n return await this.submitTransaction({\n exchange: {\n admin: {\n update_perp_liquidation_config: {\n args: {\n liquidation_fee: liquidationFee,\n liquidation_ioc_buffer: liquidationIocBuffer,\n backstop_liquidation_threshold: backstopLiquidationThreshold,\n liquidation_protocol_reward_ratio: liquidationProtocolRewardRatio,\n },\n },\n },\n },\n });\n }\n\n public async adminUpdateGlobalVaultConfig(options: {\n leaderMinimumHoldingPercentage?: number;\n creationFeeUsdc?: Decimal;\n minDepositValue?: Decimal;\n }) {\n const creationFeeUsdc = options.creationFeeUsdc\n ? this.encodeDecimal(options.creationFeeUsdc)\n : null;\n const minDepositValue = options.minDepositValue\n ? this.encodeDecimal(options.minDepositValue)\n : null;\n return await this.submitTransaction({\n exchange: {\n admin: {\n update_global_vault_config: {\n args: {\n leader_minimum_holding_percentage:\n options.leaderMinimumHoldingPercentage ?? null,\n creation_fee_usdc: creationFeeUsdc,\n min_deposit_value: minDepositValue,\n },\n },\n },\n },\n });\n }\n\n public async adminWithdrawFromTreasury(\n asset: AssetName,\n amount: Decimal,\n to: Address,\n ) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n admin: {\n withdraw_from_treasury: {\n asset_id: assetId,\n amount: this.encodeDecimal(amount),\n to,\n },\n },\n },\n });\n }\n\n public async adminAutoDeleverage(options: {\n counterpartyA: Address;\n counterpartyASubAccountIndex?: number;\n counterpartyB: Address;\n counterpartyBSubAccountIndex?: number;\n market: MarketName;\n size?: Decimal;\n settlementPrice: Decimal;\n }) {\n const marketId = this.getMarketId(options.market);\n const size = this.encodeDecimal(options.size);\n return await this.submitTransaction({\n exchange: {\n admin: {\n auto_deleverage: {\n counterparty_a: options.counterpartyA,\n counterparty_a_sub_account_index:\n options.counterpartyASubAccountIndex ?? null,\n counterparty_b: options.counterpartyB,\n counterparty_b_sub_account_index:\n options.counterpartyBSubAccountIndex ?? null,\n market_id: marketId,\n size,\n settlement_price: this.encodeDecimal(options.settlementPrice),\n },\n },\n },\n });\n }\n\n public async adminDeposit(\n userAddress: Address,\n asset: AssetName,\n amount: Decimal,\n ) {\n const assetId = this.getAssetId(asset);\n return await this.submitTransaction({\n exchange: {\n admin: {\n deposit: {\n user_address: userAddress,\n asset_id: assetId,\n amount: this.encodeDecimal(amount),\n },\n },\n },\n });\n }\n\n // ============================================\n // Warp (Hyperlane) Actions\n // ============================================\n\n public async warpRegister(options: {\n admin: Address;\n remoteTokenId: string;\n localDecimals: number;\n remoteDecimals: number;\n ismThreshold: number;\n ismValidators: string[];\n remoteRouters: [number, string][];\n inboundTransferrableTokensLimit: string;\n inboundLimitReplenishmentPerSlot: string;\n outboundTransferrableTokensLimit: string;\n outboundLimitReplenishmentPerSlot: string;\n }) {\n return await this.submitTransaction({\n warp: {\n register: {\n admin: {\n InsecureOwner: options.admin,\n },\n token_source: {\n Synthetic: {\n remote_token_id: options.remoteTokenId,\n local_decimals: options.localDecimals,\n remote_decimals: options.remoteDecimals,\n },\n },\n ism: {\n MessageIdMultisig: {\n threshold: options.ismThreshold,\n validators: options.ismValidators,\n },\n },\n remote_routers: options.remoteRouters,\n inbound_transferrable_tokens_limit:\n options.inboundTransferrableTokensLimit,\n inbound_limit_replenishment_per_slot:\n options.inboundLimitReplenishmentPerSlot,\n outbound_transferrable_tokens_limit:\n options.outboundTransferrableTokensLimit,\n outbound_limit_replenishment_per_slot:\n options.outboundLimitReplenishmentPerSlot,\n },\n },\n });\n }\n\n public async warpUpdate(options: {\n warpRoute: string;\n admin?: Address;\n ismThreshold?: number;\n ismValidators?: string[];\n inboundTransferrableTokensLimit?: string;\n inboundLimitReplenishmentPerSlot?: string;\n outboundTransferrableTokensLimit?: string;\n outboundLimitReplenishmentPerSlot?: string;\n }) {\n return await this.submitTransaction({\n warp: {\n update: {\n warp_route: options.warpRoute,\n admin: options.admin ? { InsecureOwner: options.admin } : null,\n ism:\n options.ismThreshold != null && options.ismValidators != null\n ? {\n MessageIdMultisig: {\n threshold: options.ismThreshold,\n validators: options.ismValidators,\n },\n }\n : null,\n inbound_transferrable_tokens_limit:\n options.inboundTransferrableTokensLimit ?? null,\n inbound_limit_replenishment_per_slot:\n options.inboundLimitReplenishmentPerSlot ?? null,\n outbound_transferrable_tokens_limit:\n options.outboundTransferrableTokensLimit ?? null,\n outbound_limit_replenishment_per_slot:\n options.outboundLimitReplenishmentPerSlot ?? null,\n },\n },\n });\n }\n\n public async warpEnrollRemoteRouter(\n warpRoute: string,\n remoteDomain: number,\n remoteRouterAddress: string,\n ) {\n return await this.submitTransaction({\n warp: {\n enroll_remote_router: {\n warp_route: warpRoute,\n remote_domain: remoteDomain,\n remote_router_address: remoteRouterAddress,\n },\n },\n });\n }\n\n public async warpUnenrollRemoteRouter(\n warpRoute: string,\n remoteDomain: number,\n ) {\n return await this.submitTransaction({\n warp: {\n un_enroll_remote_router: {\n warp_route: warpRoute,\n remote_domain: remoteDomain,\n },\n },\n });\n }\n\n public async warpTransferRemote(options: {\n warpRoute: string;\n amount: number;\n destinationDomain: number;\n gasPaymentLimit: number;\n recipient: string;\n relayer?: { Standard?: string; Vm?: string };\n }) {\n return await this.submitTransaction({\n warp: {\n transfer_remote: {\n warp_route: options.warpRoute,\n amount: options.amount,\n destination_domain: options.destinationDomain,\n gas_payment_limit: options.gasPaymentLimit,\n recipient: options.recipient,\n relayer: options.relayer ?? null,\n },\n },\n });\n }\n\n // ============================================\n // Interchain Gas Paymaster Actions\n // ============================================\n\n public async setRelayerConfig(options: {\n domainOracleData: {\n domain: number;\n dataValue: { gasPrice: number; tokenExchangeRate: number };\n }[];\n domainDefaultGas: { domain: number; defaultGas: number }[];\n defaultGas: number;\n beneficiary?: string;\n }) {\n return await this.submitTransaction({\n interchain_gas_paymaster: {\n set_relayer_config: {\n domain_oracle_data: options.domainOracleData.map((d) => ({\n domain: d.domain,\n data_value: {\n gas_price: d.dataValue.gasPrice,\n token_exchange_rate: d.dataValue.tokenExchangeRate,\n },\n })),\n domain_default_gas: options.domainDefaultGas.map((d) => ({\n domain: d.domain,\n default_gas: d.defaultGas,\n })),\n default_gas: options.defaultGas,\n beneficiary: options.beneficiary ?? null,\n },\n },\n });\n }\n}\n\n// Factory function to create authenticated client (wallet required)\nasync function createAuthenticatedClient(\n endpoints: Endpoints,\n wallet: Wallet,\n delegatorAddress?: Address,\n txOpts?: TransactionOpts,\n): Promise<AuthenticatedClient> {\n await initialize();\n validateEndpoints(endpoints);\n console.debug(`Connecting to ${endpoints.rest}`);\n\n // This endpoint is ONLY used for Solana offchain authenticators (\"solana\", \"solanaSimple\").\n // Standard authenticator (\"standard\") uses \"/sequencer/txs\" internally via the inner StandardRollup.\n //\n // Endpoint routing by authenticator:\n // - \"standard\" → /sequencer/txs (Borsh-serialized, handled by inner StandardRollup)\n // - \"solana\" → /sequencer/solana_offchain_txs (JSON, signed with Solana spec preamble)\n // - \"solanaSimple\" → /sequencer/solana_offchain_txs (JSON, simple signature)\n const solanaEndpoint = \"/sequencer/solana_offchain_txs\";\n const rollupConfig: {\n url: string;\n getSerializer: (schema: RollupSchema) => WasmSerializer;\n context?: StandardRollupContext;\n } = {\n url: endpoints.rest,\n getSerializer: (schema: RollupSchema) => new WasmSerializer(schema),\n };\n\n const authenticator =\n txOpts?.authenticator ?? DEFAULT_TRANSACTION_OPTS.authenticator;\n const rollup = await createSolanaSignableRollup<RuntimeCall>(\n rollupConfig,\n solanaEndpoint,\n );\n const client = new AuthenticatedClient(\n endpoints,\n rollup,\n wallet,\n delegatorAddress,\n authenticator,\n );\n await client.initializeExchangeInfo();\n\n // Configure rollup with transaction defaults\n const chainId = await client.getChainId();\n\n rollupConfig.context = {\n defaultTxDetails: {\n max_priority_fee_bips:\n txOpts?.maxPriorityFeeBps ?? DEFAULT_TRANSACTION_OPTS.maxPriorityFeeBps,\n max_fee: txOpts?.maxFee ?? DEFAULT_TRANSACTION_OPTS.maxFee,\n gas_limit: txOpts?.gasLimit ?? DEFAULT_TRANSACTION_OPTS.gasLimit,\n chain_id: chainId,\n },\n };\n const rollupWithContext = await createSolanaSignableRollup<RuntimeCall>(\n rollupConfig,\n solanaEndpoint,\n );\n // Replace rollup with configured version after initialization\n // This is safe because we're in the factory function that creates the client\n client.rollup = rollupWithContext;\n\n return client;\n}\n\n// Client namespace - factory methods that return the correct type based on parameters\n// This provides a clean API: Client.fromNetwork() works for both authenticated and read-only\nexport namespace Client {\n // Overload: with wallet → returns AuthenticatedClient\n export function fromEndpoints(\n endpoints: Endpoints,\n wallet: Wallet,\n delegatorAddress?: Address,\n txOpts?: TransactionOpts,\n ): Promise<AuthenticatedClient>;\n // Overload: without wallet → returns ReadOnlyClient\n export function fromEndpoints(endpoints: Endpoints): Promise<ReadOnlyClient>;\n // Implementation\n export async function fromEndpoints(\n endpoints: Endpoints,\n wallet?: Wallet,\n delegatorAddress?: Address,\n txOpts?: TransactionOpts,\n ): Promise<ReadOnlyClient | AuthenticatedClient> {\n if (wallet) {\n return await createAuthenticatedClient(\n endpoints,\n wallet,\n delegatorAddress,\n txOpts,\n );\n }\n return await ReadOnlyClient.fromEndpoints(endpoints);\n }\n\n // Overload: with wallet → returns AuthenticatedClient\n export function fromNetwork(\n network: Network,\n wallet: Wallet,\n delegatorAddress?: Address,\n txOpts?: TransactionOpts,\n ): Promise<AuthenticatedClient>;\n // Overload: without wallet → returns ReadOnlyClient\n export function fromNetwork(network: Network): Promise<ReadOnlyClient>;\n // Implementation\n export async function fromNetwork(\n network: Network,\n wallet?: Wallet,\n delegatorAddress?: Address,\n txOpts?: TransactionOpts,\n ): Promise<ReadOnlyClient | AuthenticatedClient> {\n if (!isNetwork(network)) {\n throw new Error(`Invalid network: ${network}`);\n }\n if (wallet) {\n return await createAuthenticatedClient(\n NETWORKS[network],\n wallet,\n delegatorAddress,\n txOpts,\n );\n }\n return await ReadOnlyClient.fromNetwork(network);\n }\n}\n",
|
|
14
14
|
"import type { Network } from \"./types\";\n\nexport interface Endpoints {\n rest: string;\n ws?: string;\n}\n\nexport const NETWORKS: Record<Network, Endpoints> = {\n localnet: {\n rest: \"http://127.0.0.1:12346\",\n ws: \"ws://127.0.0.1:3000/ws\",\n },\n staging: {\n rest: \"https://rollup.staging.bullet.xyz\",\n ws: \"wss://ws.staging.bullet.xyz/ws\",\n },\n testnet: {\n rest: \"https://rollup.testnet.bullet.xyz\",\n ws: \"wss://ws.testnet.bullet.xyz/ws\",\n },\n mainnet: {\n rest: \"https://rollup.mainnet.bullet.xyz\",\n ws: \"wss://ws.mainnet.bullet.xyz/ws\",\n },\n} as const;\n\nexport const GLOBAL_DEFAULT_MAX_LEVERAGE = 1000;\n",
|
|
15
15
|
"import { SovereignError } from \"@sovereign-sdk/web3\";\n\n/**\n * Structured error details from rollup responses.\n *\n * Standard fields: domain, code, message\n * All other fields are dynamic and specific to each error type.\n */\nexport interface RollupErrorDetails {\n /** Error domain/category (e.g., 'risk_engine', 'account', 'order') */\n domain: string;\n\n /** Specific error code (e.g., 'stale_price', 'insufficient_margin') */\n code: string;\n\n /** Detailed error message from the rollup (thiserror Display) */\n message: string;\n\n /**\n * Additional dynamic fields specific to each error type.\n *\n * Examples:\n * - StalePrice: id, price_kind, last_update_timestamp, current_timestamp\n * - InsufficientMargin: address, available_margin, required_margin, margin_type\n * - OrderNotFound: order_id, market_id, market_type\n */\n [key: string]: unknown;\n}\n\n/**\n * Error class for Bullet SDK transaction execution errors.\n *\n * Wraps errors from `rollup.call()` and provides structured rollup module error details.\n * HTTP/API errors from data fetching are not wrapped and bubble up as Sovereign SDK errors.\n *\n * @example\n * ```typescript\n * try {\n * await client.placeOrders(\"BTC-USD\", [...]);\n * } catch (error) {\n * if (isBulletError(error)) {\n * console.log(error.code); // 'stale_price'\n * console.log(error.domain); // 'risk_engine'\n * console.log(error.message); // 'Stale price - mark 1, last_update: 0, current: 1762425013275'\n *\n * // Access error-specific fields via details\n * console.log(error.details.id);\n * console.log(error.details.price_kind);\n * console.log(error.details.current_timestamp);\n *\n * // Type-safe error handling\n * if (error.domain === 'account' && error.code === 'insufficient_margin') {\n * const { available_margin, required_margin } = error.details;\n * showDepositModal(Number(required_margin) - Number(available_margin));\n * }\n * }\n * }\n * ```\n */\nexport class BulletError extends SovereignError {\n /** Specific error code (e.g., 'stale_price', 'insufficient_margin') */\n readonly code: string;\n\n /** Error domain/category (e.g., 'risk_engine', 'account', 'order') */\n readonly domain: string;\n\n /** HTTP status code */\n readonly status?: number;\n\n /**\n * Structured error details from the rollup.\n * Contains all error-specific fields.\n * For ModuleError format: has domain and code.\n * For non-ModuleError format: just contains the original error details.\n */\n readonly details: RollupErrorDetails | Record<string, unknown>;\n\n /** Original error that caused this */\n readonly cause?: Error;\n\n private constructor(options: {\n code: string;\n domain: string;\n message: string;\n status?: number;\n details: RollupErrorDetails | Record<string, unknown>;\n cause?: Error;\n }) {\n super(options.message);\n this.code = options.code;\n this.domain = options.domain;\n this.status = options.status;\n this.details = options.details;\n this.cause = options.cause;\n this.name = \"BulletError\";\n\n // Maintain proper stack trace\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, BulletError);\n }\n }\n\n /**\n * Creates a BulletError from a Sovereign SDK transaction error.\n *\n * Only use this for errors from `rollup.call()` which contain structured\n * rollup module error details. HTTP/API errors should bubble up naturally.\n *\n * @param error - Error from rollup.call() transaction execution\n * @returns A properly structured BulletError\n */\n static from(error: unknown): BulletError {\n const err = error as Record<string, unknown>;\n const status = err?.status as number | undefined;\n\n // Extract structured error from Sovereign SDK\n // Format: { status: 400, error: { status, message, details: { domain, code, message, ... } }, headers }\n const rollupError = err?.error as Record<string, unknown> | undefined;\n const details = rollupError?.details as RollupErrorDetails | undefined;\n\n // Check for structured rollup error with code/domain\n if (details?.code && details?.domain) {\n // ModuleError always has a message\n const message = details.message || \"Unknown module error\";\n\n return new BulletError({\n code: details.code,\n domain: details.domain,\n message,\n status: (rollupError?.status as number | undefined) || status,\n details,\n cause: error instanceof Error ? error : undefined,\n });\n }\n\n // Fallback: extract message from rollupError.details.message if available\n // This happens when details exists but doesn't have code/domain (non-exchange-module errors,\n // e.g. hyperlane warp module doesn't use ModuleError format)\n const message =\n ((details as Record<string, unknown>)?.message as string | undefined) ||\n (rollupError?.message as string | undefined) ||\n (error instanceof Error ? error.message : undefined) ||\n \"Unknown error\";\n\n return new BulletError({\n code: \"unknown\",\n domain: \"unknown\",\n message,\n status,\n details: details || {},\n cause: error instanceof Error ? error : undefined,\n });\n }\n\n /**\n * Serializes the error to JSON (safe for React state, Redux, etc.)\n */\n toJSON() {\n return {\n name: this.name,\n code: this.code,\n domain: this.domain,\n message: this.message,\n status: this.status,\n details: this.details,\n stack: this.stack,\n };\n }\n\n /**\n * Returns a developer-friendly string representation.\n *\n * @example\n * \"[risk_engine:stale_price] Stale price - mark 1, last_update: 0, current: 1762425013275\"\n */\n toString(): string {\n return `[${this.domain}:${this.code}] ${this.message}`;\n }\n}\n\n/**\n * Type guard to check if an error is a BulletError.\n *\n * @example\n * ```typescript\n * catch (error) {\n * if (isBulletError(error)) {\n * console.log(error.code, error.domain, error.details);\n * }\n * }\n * ```\n */\nexport function isBulletError(error: unknown): error is BulletError {\n return error instanceof BulletError;\n}\n\n/**\n * Helper to create type-safe error handlers for specific error types.\n *\n * @example\n * ```typescript\n * const handleStalePrice = createErrorHandler(\n * 'risk_engine',\n * 'stale_price',\n * (error) => {\n * // Access fields via error.details\n * console.log(`Stale price for ${error.details.id}`);\n * console.log(`Price kind: ${error.details.price_kind}`);\n * retryWithFreshData();\n * }\n * );\n *\n * try {\n * await client.placeOrder(...);\n * } catch (error) {\n * if (isBulletError(error)) {\n * handleStalePrice(error);\n * }\n * }\n * ```\n */\nexport function createErrorHandler(\n domain: string,\n code: string,\n handler: (error: BulletError) => void,\n): (error: BulletError) => boolean {\n return (error: BulletError): boolean => {\n if (error.domain === domain && error.code === code) {\n handler(error);\n return true;\n }\n return false;\n };\n}\n\n/**\n * Type guard with specific domain/code check.\n * Useful for narrowing error types in conditional logic.\n *\n * @example\n * ```typescript\n * if (isErrorType(error, 'risk_engine', 'stale_price')) {\n * // error is BulletError with domain='risk_engine' and code='stale_price'\n * const { id, price_kind } = error.details;\n * }\n * ```\n */\nexport function isErrorType(\n error: unknown,\n domain: string,\n code: string,\n): error is BulletError {\n return isBulletError(error) && error.domain === domain && error.code === code;\n}\n\n/**\n * Custom AbortError class that works in both browser and Node.js environments.\n * Matches the behavior of DOMException with name \"AbortError\" for consistent error handling.\n *\n * This is the standard approach for isomorphic SDKs - using a custom error class\n * rather than runtime feature detection ensures predictable behavior across all environments.\n */\nexport class AbortError extends Error {\n constructor(message = \"Operation aborted\") {\n super(message);\n this.name = \"AbortError\";\n // Maintain proper stack trace\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, AbortError);\n }\n }\n}\n\n/**\n * Type guard to check if an error is an AbortError.\n * Works with both custom AbortError and DOMException (browser).\n *\n * @example\n * ```typescript\n * try {\n * await client.subscribeOrderbook(market, signal);\n * } catch (error) {\n * if (isAbortError(error)) {\n * // Expected cancellation, ignore\n * return;\n * }\n * // Handle other errors\n * }\n * ```\n */\nexport function isAbortError(error: unknown): error is AbortError | Error {\n if (error instanceof AbortError) {\n return true;\n }\n // Also check for DOMException in browser environments\n if (typeof DOMException !== \"undefined\" && error instanceof DOMException) {\n return error.name === \"AbortError\";\n }\n // Check for Error with AbortError name (Node.js or custom implementations)\n if (error instanceof Error) {\n return error.name === \"AbortError\";\n }\n return false;\n}\n",
|
|
16
|
+
"import type Decimal from \"decimal.js\";\nexport type PrivateKey = string;\nexport type PublicKey = string;\nexport type Address = string;\nexport type TokenId = string;\nexport type AssetName = string;\nexport type MarketName = string;\nexport type AssetId = number;\nexport type MarketId = number;\nexport type OrderId = bigint;\nexport type ClientOrderId = bigint;\n\nexport type MarketKind = \"perp\" | \"spot\" | \"rwa_perp\";\n\n/** Market ID ranges from bullet-exchange-interface */\nexport const SPOT_MARKET_ID_OFFSET = 10_000;\nexport const RWA_PERP_MARKET_ID_OFFSET = 20_000;\n\n/** Derives market kind from market id (matches `MarketId::kind()` on-chain). */\nexport function marketKindFromMarketId(marketId: MarketId): MarketKind {\n if (marketId < SPOT_MARKET_ID_OFFSET) return \"perp\";\n if (marketId < RWA_PERP_MARKET_ID_OFFSET) return \"spot\";\n return \"rwa_perp\";\n}\n\nexport type Side = \"bid\" | \"ask\";\n\nexport type AdminType =\n | \"protocol\"\n | \"funding\"\n | \"pricing\"\n | \"fee_tier\"\n | \"credits\"\n | \"referrals\";\n\nexport type SpotCollateralTransferDirection =\n | \"spot_to_margin\"\n | \"margin_to_spot\";\n\nexport type TriggerDirection = \"greater_than_or_equal\" | \"less_than_or_equal\";\n\nexport type TriggerPriceCondition = \"mark\" | \"oracle\" | \"last_trade\";\n\nexport type OrderType =\n | \"limit\"\n | \"post_only\"\n | \"fill_or_kill\"\n | \"immediate_or_cancel\"\n | \"post_only_slide\"\n | \"post_only_front\";\n\nexport type MarginType = \"initial\" | \"maintenance\";\n\nexport type EquityType =\n | \"unweighted\"\n | \"weighted_initial\"\n | \"weighted_maintenance\";\n\nexport type FeeTier =\n | \"tier0\"\n | \"tier1\"\n | \"tier2\"\n | \"tier3\"\n | \"tier4\"\n | \"tier5\"\n | \"tier6\"\n | \"tier7\"\n | \"tier8\"\n | \"tier9\";\n\nexport type Network = \"localnet\" | \"staging\" | \"testnet\" | \"mainnet\";\n\nexport type NewOrderArgs = {\n price: Decimal;\n size: Decimal;\n side: Side;\n orderType: OrderType;\n reduceOnly: boolean;\n clientOrderId?: ClientOrderId;\n pendingTpslPair?: PendingTpslPair;\n};\n\nexport type AmendOrderArgs = {\n cancel: {\n orderId: OrderId | null;\n clientOrderId: ClientOrderId | null;\n };\n place: NewOrderArgs;\n};\n\nexport type OraclePriceUpdateArgs = {\n asset: AssetName;\n oraclePrice: Decimal;\n};\n\nexport type MarkPriceUpdateArgs = {\n market: MarketName;\n medianCexPrice: Decimal;\n diffEma: Decimal;\n};\n\nexport type Tpsl = {\n orderPrice: Decimal;\n triggerPrice: Decimal;\n priceCondition: TriggerPriceCondition;\n orderType: OrderType;\n};\n\nexport type TpslPair = {\n tp?: Tpsl;\n sl?: Tpsl;\n};\n\nexport type PendingTpslPair = {\n tpslPair: TpslPair;\n dynamicSize: boolean;\n};\n\nexport type MarketMetadata = {\n id: MarketId;\n kind: MarketKind;\n baseAssetId: AssetId;\n name: MarketName;\n};\n\nexport type NewTwapOrderArgs = {\n side: Side;\n totalSize: Decimal;\n reduceOnly: boolean;\n totalDurationSeconds: number;\n};\n",
|
|
16
17
|
"import bs58 from \"bs58\";\nimport Decimal from \"decimal.js\";\nimport { type Endpoints, NETWORKS } from \"./constants\";\nimport type { Network } from \"./types\";\n\n// Browser compatible - does not use Buffer\nexport function bytesToHex(bytes: Uint8Array): string {\n return Array.from(bytes)\n .map((b) => b.toString(16).padStart(2, \"0\"))\n .join(\"\");\n}\n\nexport function hexToBytes(hex: string): Uint8Array {\n const matches = hex.match(/.{1,2}/g) || [];\n return new Uint8Array(matches.map((byte) => Number.parseInt(byte, 16)));\n}\n\nexport function hexToBase64(hex: string): string {\n const bytes = hexToBytes(hex);\n // Convert bytes to binary string\n const binString = String.fromCharCode(...bytes);\n // Use btoa for base64 encoding\n return btoa(binString);\n}\n\nexport function hexToBase58(hex: string): string {\n const bytes = hexToBytes(hex);\n return bs58.encode(bytes);\n}\n\nexport function base58ToBytes(base58: string): Uint8Array {\n return bs58.decode(base58);\n}\n\nexport function base58ToHex(base58: string): string {\n const bytes = base58ToBytes(base58);\n return bytesToHex(bytes);\n}\n\nexport function sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nexport function isNode(): boolean {\n return !!(typeof process !== \"undefined\" && process.versions?.node);\n}\n\nexport function serializeVersioned<T>(versioned: {\n version: string;\n data: T;\n}): unknown {\n return serialize({ [versioned.version]: versioned.data });\n}\n\n// This is needed because wasm-bindgen is not able to serialize Decimal and it expects IndexMap to be a JS Object (not Map)\nexport function serialize<T>(value: T): T {\n // Handle null/undefined\n if (value == null) {\n return value;\n }\n\n // Handle Decimal.js values\n if (Decimal.isDecimal(value)) {\n return value.toFixed() as T;\n }\n\n // Handle Sets\n if (value instanceof Set) {\n return Array.from(value).map(serialize) as T;\n }\n\n // Handle Maps\n if (value instanceof Map) {\n return new Map(\n Array.from(value.entries()).map(([k, v]) => [serialize(k), serialize(v)]),\n ) as T;\n }\n\n // Handle Arrays\n if (Array.isArray(value)) {\n return value.map(serialize) as T;\n }\n\n // Handle Objects\n if (value && typeof value === \"object\") {\n return Object.fromEntries(\n Object.entries(value).map(([k, v]) => [serialize(k), serialize(v)]),\n ) as T;\n }\n\n // Return primitives as-is\n return value;\n}\n\nexport const isNetwork = (value: string): value is Network => {\n return value in NETWORKS;\n};\n\nexport const isValidHttpUrl = (url: string): boolean => {\n try {\n const u = new URL(url);\n return u.protocol === \"http:\" || u.protocol === \"https:\";\n } catch {\n return false;\n }\n};\n\nexport const isValidWsUrl = (url: string): boolean => {\n try {\n const u = new URL(url);\n return u.protocol === \"ws:\" || u.protocol === \"wss:\";\n } catch {\n return false;\n }\n};\n\nexport const validateEndpoints = (endpoints: Endpoints): void => {\n if (!isValidHttpUrl(endpoints.rest)) {\n throw new Error(`Invalid REST URL: ${endpoints.rest}`);\n }\n if (endpoints.ws && !isValidWsUrl(endpoints.ws)) {\n throw new Error(`Invalid WebSocket URL: ${endpoints.ws}`);\n }\n};\n\n/**\n * Converts human-readable token amount to native units (scaled by decimals)\n * @param amount - Human-readable token amount (e.g., 1000 for 1k SOL, 1.5 for 1.5 SOL)\n * @param decimals - Token decimals (e.g., 9 for SOL, 6 for USDC, 8 for BTC, 18 for ETH)\n * @returns Native token amount as BigInt\n * @example\n * toNativeUnits(1000, 9) // 1000 SOL = 1000000000000n\n * toNativeUnits(100, 6) // 100 USDC = 100000000n\n * toNativeUnits(1.5, 9) // 1.5 SOL = 1500000000n\n */\nexport function toNativeUnits(amount: number, decimals: number): bigint {\n return BigInt(new Decimal(amount).mul(Decimal.pow(10, decimals)).toFixed(0));\n}\n\nexport function fromNativeUnits(amount: bigint, decimals: number): Decimal {\n return new Decimal(amount.toString()).div(Decimal.pow(10, decimals));\n}\n",
|
|
17
18
|
"import EventEmitter from './index.js'\n\nexport { EventEmitter }\nexport default EventEmitter\n",
|
|
18
19
|
"import Decimal from \"decimal.js\";\nimport type { OrderbookL2, PriceLevelL2 } from \"./zod-types/rest\";\nimport type { OrderbookUpdate } from \"./zod-types/ws\";\n\ntype Size = Decimal;\n\nexport class Orderbook {\n public bids: Map<string, Size>;\n public asks: Map<string, Size>;\n public marketId: number;\n public lastUpdated: number = Date.now();\n constructor(marketId: number, snapshot?: OrderbookUpdate) {\n this.bids = new Map<string, Size>();\n this.asks = new Map<string, Size>();\n this.marketId = marketId;\n if (snapshot) {\n for (const [price, size] of snapshot.b) {\n this.updateBid(price, size);\n }\n for (const [price, size] of snapshot.a) {\n this.updateAsk(price, size);\n }\n }\n }\n\n // Insert or update a bid\n protected updateBid(price: string, size: Size): void {\n if (size.eq(0)) {\n this.bids.delete(price);\n } else {\n this.bids.set(price, size);\n }\n }\n\n // Insert or update an ask\n protected updateAsk(price: string, size: Size): void {\n if (size.eq(0)) {\n this.asks.delete(price);\n } else {\n this.asks.set(price, size);\n }\n }\n\n // Apply a delta update to the orderbook\n public applyDelta(delta: OrderbookUpdate): void {\n for (const [price, size] of delta.b) {\n this.updateBid(price, size);\n }\n for (const [price, size] of delta.a) {\n this.updateAsk(price, size);\n }\n }\n\n // TODO: eventually ideal to move to data structure like btree map (https://www.npmjs.com/package/sorted-btree)\n // Get bids sorted by price descending\n public getSortedBids(levels = Number.POSITIVE_INFINITY): PriceLevelL2[] {\n return Array.from(this.bids.entries())\n .map(([price, size]): [Decimal, Decimal] => [new Decimal(price), size])\n .sort((priceLevel1, priceLevel2) =>\n priceLevel2[0].minus(priceLevel1[0]).toNumber(),\n )\n .slice(0, levels);\n }\n\n // Get asks sorted by price ascending\n public getSortedAsks(levels = Number.POSITIVE_INFINITY): PriceLevelL2[] {\n return Array.from(this.asks.entries())\n .map(([price, size]): [Decimal, Decimal] => [new Decimal(price), size])\n .sort((priceLevel1, priceLevel2) =>\n priceLevel1[0].minus(priceLevel2[0]).toNumber(),\n )\n .slice(0, levels);\n }\n\n public static fromOrderbookL2(orderbook: OrderbookL2): Orderbook {\n const localOrderbook = new Orderbook(orderbook.market_id);\n\n for (const [price, size] of orderbook.bids) {\n localOrderbook.updateBid(price.toString(), size);\n }\n\n for (const [price, size] of orderbook.asks) {\n localOrderbook.updateAsk(price.toString(), size);\n }\n\n return localOrderbook;\n }\n\n public static toOrderbookL2(orderbook: Orderbook): OrderbookL2 {\n return {\n market_id: orderbook.marketId,\n bids: orderbook.getSortedBids(Number.POSITIVE_INFINITY),\n asks: orderbook.getSortedAsks(Number.POSITIVE_INFINITY),\n };\n }\n\n public toDisplay(levels = 10): string {\n const asks = this.getSortedAsks(levels)\n .map(\n ([price, size]) =>\n `${price.toFixed(2).padStart(10)} | ${size.toFixed(4)}`,\n )\n .reverse()\n .join(\"\\n\");\n const bids = this.getSortedBids(levels)\n .map(\n ([price, size]) =>\n `${price.toFixed(2).padStart(10)} | ${size.toFixed(4)}`,\n )\n .join(\"\\n\");\n return `Asks:\\n${asks}\\n------------------------\\nBids:\\n${bids}`;\n }\n\n // Update the last updated timestamp\n public setLastUpdated(ts: number): void {\n this.lastUpdated = ts;\n }\n}\n",
|
|
19
20
|
"import { z } from \"zod\";\nimport { AssetId, DecimalSchema } from \".\";\n\n/**\n * Zod 4: WebSocket message schemas with rich metadata\n */\n\nconst Topic = z\n .union([\n z.string().regex(/^orderbook\\.[0-9]+\\.[0-9]+$/),\n z.string().regex(/^trade\\.[0-9]+$/),\n ])\n .describe(\n \"WebSocket subscription topic (orderbook.{marketId}.{assetId} or trade.{assetId})\",\n );\n\nconst MessageType = z\n .enum([\"snapshot\", \"delta\"])\n .describe(\n \"Message type: snapshot (full state) or delta (incremental update)\",\n );\n\nconst WsMessage = <T extends z.ZodTypeAny>(data: T) =>\n z\n .object({\n topic: Topic,\n type: MessageType,\n ts: z.number().describe(\"Server timestamp in milliseconds\"),\n data: data,\n })\n .describe(\"Generic WebSocket message wrapper\");\n\nconst WebSocketResponse = z\n .object({\n success: z.boolean().describe(\"Whether the operation succeeded\"),\n ret_msg: z.string().describe(\"Human-readable response message\"),\n conn_id: z.string().describe(\"Connection identifier\"),\n op: z\n .string()\n .describe(\"Operation type (subscribe, unsubscribe, ping, etc.)\"),\n })\n .describe(\"WebSocket control message response\");\n\nconst OrderbookDelta = z\n .array(z.tuple([z.string(), DecimalSchema]))\n .describe(\"Array of [price, size] tuples representing orderbook levels\");\n\nconst OrderbookUpdate = z\n .object({\n s: AssetId.describe(\"Asset ID for this orderbook\"),\n b: OrderbookDelta.describe(\"Bid side updates\"),\n a: OrderbookDelta.describe(\"Ask side updates\"),\n u: z.number().describe(\"Update sequence number for delta ordering\"),\n })\n .describe(\"Orderbook snapshot or delta update\");\n\nexport const WsResponseSchemas = {\n WebSocketResponse: WebSocketResponse,\n OrderbookResponse: WsMessage(OrderbookUpdate),\n};\n\nexport type WebSocketResponse = z.infer<\n typeof WsResponseSchemas.WebSocketResponse\n>;\nexport type OrderbookResponse = z.infer<\n typeof WsResponseSchemas.OrderbookResponse\n>;\nexport type OrderbookUpdate = z.infer<typeof OrderbookUpdate>;\n",
|
|
20
21
|
"import bs58 from \"bs58\";\nimport Decimal from \"decimal.js\";\nimport { z } from \"zod\";\n\n/**\n * Zod 4: Type-safe numeric bounds with const assertions\n */\nconst I16_MAX = 32767;\nconst I16_MIN = -32768;\nconst I64_MAX = 9223372036854775807n; // 2^63 - 1\nconst I64_MIN = -9223372036854775808n; // -2^63\nconst U8_MAX = 255;\nconst U16_MAX = 65535;\nconst U32_MAX = 4294967295;\nconst U64_MAX = 18446744073709551615n; // 2^64 - 1\nconst U128_MAX = 340282366920938463463374607431768211455n; // 2^128 - 1\n\n/**\n * Zod 4: Primitive integer schemas with rich metadata\n * Using z.pipe() for explicit conversions (14x faster than z.coerce)\n */\nexport const I64Schema = z\n .union([z.string(), z.number(), z.bigint()])\n .transform((val) => BigInt(val))\n .pipe(z.bigint().min(I64_MIN).max(I64_MAX))\n .describe(\"Signed 64-bit integer\");\n\nexport const U8Schema = z\n .union([z.string(), z.number()])\n .transform((val) => Number(val))\n .pipe(z.number().int().min(0).max(U8_MAX))\n .describe(\"Unsigned 8-bit integer (0-255)\");\n\nexport const U16Schema = z\n .union([z.string(), z.number()])\n .transform((val) => Number(val))\n .pipe(z.number().int().min(0).max(U16_MAX))\n .describe(\"Unsigned 16-bit integer (0-65535)\");\n\nexport const I16Schema = z\n .union([z.string(), z.number()])\n .transform((val) => Number(val))\n .pipe(z.number().int().min(I16_MIN).max(I16_MAX))\n .describe(\"Signed 16-bit integer (-32768-32767)\");\n\nexport const U32Schema = z\n .union([z.string(), z.number()])\n .transform((val) => Number(val))\n .pipe(z.number().int().min(0).max(U32_MAX))\n .describe(\"Unsigned 32-bit integer\");\n\nexport const U64Schema = z\n .union([z.string(), z.number(), z.bigint()])\n .transform((val) => BigInt(val))\n .pipe(z.bigint().min(0n).max(U64_MAX))\n .describe(\"Unsigned 64-bit integer\");\n\nexport const U128Schema = z\n .union([z.string(), z.number(), z.bigint()])\n .transform((val) => BigInt(val))\n .pipe(z.bigint().min(0n).max(U128_MAX))\n .describe(\"Unsigned 128-bit integer for large amounts\");\n\n/**\n * Zod 4: High-precision decimal schema\n * Accepts string or number, returns Decimal.js instance\n */\nexport const DecimalSchema = z\n .union([z.string(), z.number()])\n .transform((val, ctx) => {\n try {\n return new Decimal(val);\n } catch (_error) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `Invalid decimal value: ${val}`,\n });\n return z.NEVER;\n }\n })\n .describe(\"High-precision decimal number using Decimal.js\");\n\n/**\n * Zod 4: Solana address validation with rich metadata\n */\nexport const Base58Address = z\n .string()\n .pipe(\n z.string().regex(/^[1-9A-HJ-NP-Za-km-z]{32,44}$/, {\n error: \"Invalid Base58 address format\",\n }),\n )\n .describe(\"Solana Base58-encoded public key address (32-44 characters)\");\n\n/**\n * Accepts a raw byte array (number[]) from the backend and converts it to a\n * Base58-encoded address string. Used for fields like pyth_lazer_trusted_signers\n * where the backend stores public keys as raw bytes rather than Base58 strings.\n */\nexport const BytesAsBase58Address = z\n .array(U8Schema)\n .transform((bytes) => bs58.encode(new Uint8Array(bytes)))\n .describe(\"Raw byte array converted to Base58-encoded address string\");\n\n/**\n * Zod 4: Domain schemas with descriptive metadata\n * Note: Using type aliases instead of .brand() to maintain backwards compatibility\n * For full type safety, consider using .brand() after migrating existing code\n */\nexport const AssetId = U16Schema.describe(\n \"Unique identifier for a trading asset\",\n);\n\nexport const MarketId = U16Schema.describe(\n \"Unique identifier for a trading market\",\n);\n\nexport const OrderId = U64Schema.describe(\n \"Unique identifier for an order in the system\",\n);\n\nexport const TradeId = U64Schema.describe(\n \"Unique identifier for an executed trade\",\n);\n\nexport const ClientOrderId = U64Schema.describe(\n \"Client-provided order identifier for idempotency\",\n);\n\nexport const TriggerOrderId = U64Schema.describe(\n \"Unique identifier for a trigger/conditional order\",\n);\n\nexport const TwapId = U64Schema.describe(\"Unique identifier for a TWAP order\");\n\nexport const Amount = U128Schema.describe(\n \"Token amount in smallest unit (e.g., lamports for SOL)\",\n);\n\nexport const UnixTimestampMicros = I64Schema.describe(\n \"Unix timestamp in microseconds since epoch\",\n);\n\n/**\n * Zod 4: Type-safe map builder for JSON-serialized Maps\n * Converts object representation to native Map with typed keys\n *\n * @example\n * const MarketMap = createJsonMap(MarketId, MarketInfo);\n * // Type: Map<number & Brand<\"MarketId\">, MarketInfo>\n */\nexport const createJsonMap = <K extends z.ZodTypeAny, V extends z.ZodTypeAny>(\n keySchema: K,\n valueSchema: V,\n options?: {\n description?: string;\n example?: Record<string, unknown>;\n },\n) => {\n const schema = z\n .record(z.string(), valueSchema)\n .transform(\n (obj): Map<z.infer<K>, z.infer<V>> =>\n new Map(Object.entries(obj).map(([k, v]) => [keySchema.parse(k), v])),\n );\n\n if (options?.description) {\n schema.describe(options.description);\n }\n\n return schema;\n};\n\n/**\n * Zod 4: Type-safe set builder for JSON-serialized Sets (BTreeSet)\n * Converts array representation to native Set with typed elements\n *\n * @example\n * const AssetIdSet = createJsonSet(AssetId);\n * // Type: Set<number>\n *\n * const AddressSet = createJsonSet(Base58Address);\n * // Type: Set<string>\n */\nexport const createJsonSet = <V extends z.ZodTypeAny>(\n valueSchema: V,\n options?: {\n description?: string;\n example?: unknown[];\n },\n) => {\n const schema = z\n .array(valueSchema)\n .transform((arr): Set<z.infer<V>> => new Set(arr));\n\n if (options?.description) {\n schema.describe(options.description);\n }\n\n return schema;\n};\n\n/**\n * Zod 4: Schema registry for centralized validation and JSON Schema generation\n * Enables runtime introspection and API documentation generation\n */\nexport const PrimitiveSchemas = {\n I16: I16Schema,\n I64: I64Schema,\n U8: U8Schema,\n U16: U16Schema,\n U32: U32Schema,\n U64: U64Schema,\n U128: U128Schema,\n Decimal: DecimalSchema,\n Base58Address,\n} as const;\n\nexport const DomainSchemas = {\n AssetId,\n MarketId,\n OrderId,\n TradeId,\n ClientOrderId,\n TriggerOrderId,\n TwapId,\n Amount,\n UnixTimestampMicros,\n} as const;\n",
|
|
21
22
|
"import { EventEmitter } from \"eventemitter3\";\nimport { AbortError } from \"./error\";\nimport { Orderbook } from \"./orderbook\";\nimport type { MarketId } from \"./types\";\nimport { WsResponseSchemas } from \"./zod-types/ws\";\n\n/**\n * Helper: Convert EventEmitter.once() to Promise with AbortSignal support\n * This follows the standard pattern for async generators with EventEmitter\n * and AbortSignal as recommended in TypeScript/JavaScript best practices.\n */\nfunction onceWithSignal<T>(\n emitter: EventEmitter,\n event: string,\n signal?: AbortSignal,\n): Promise<T> {\n return new Promise<T>((resolve, reject) => {\n if (signal?.aborted) {\n reject(new AbortError());\n return;\n }\n\n let settled = false;\n\n const cleanup = () => {\n // Remove listener (safe even if once() already removed it)\n emitter.removeListener(event, listener);\n // Remove abort handler (safe with { once: true } but ensures cleanup)\n if (signal) {\n signal.removeEventListener(\"abort\", abortHandler);\n }\n };\n\n const listener = (value: T) => {\n if (settled) return; // Guard against race conditions\n settled = true;\n cleanup();\n resolve(value);\n };\n\n const abortHandler = () => {\n if (settled) return; // Guard against race conditions\n settled = true;\n cleanup();\n reject(new AbortError());\n };\n\n emitter.once(event, listener);\n\n if (signal) {\n signal.addEventListener(\"abort\", abortHandler, { once: true });\n }\n });\n}\n\nexport class WebSocketManager {\n private socket: WebSocket | null = null;\n private orderbooks: Map<MarketId, Orderbook> = new Map();\n private isConnected = false;\n private heartbeatInterval: NodeJS.Timeout | null = null;\n private lastUpdateIds: Map<MarketId, number> = new Map();\n private url: string;\n private reconnectAttempts = 0;\n private readonly maxReconnectAttempts = 5;\n private readonly reconnectDelay = 1000;\n private eventEmitter = new EventEmitter();\n private disposed = false;\n\n constructor(url: string) {\n this.url = url;\n }\n\n private async connect(): Promise<void> {\n if (this.disposed) {\n throw new Error(\"WebSocketManager has been disposed\");\n }\n\n if (this.socket?.readyState === WebSocket.OPEN) {\n return;\n }\n\n // Close existing socket if any\n if (this.socket) {\n this.socket.close();\n this.socket = null;\n }\n\n const { promise, resolve, reject } = Promise.withResolvers<void>();\n const timeout = setTimeout(() => {\n this.socket?.close();\n reject(new Error(\"Connection timeout\"));\n }, 10000);\n\n this.socket = new WebSocket(this.url);\n\n this.socket.onopen = () => {\n clearTimeout(timeout);\n this.isConnected = true;\n this.reconnectAttempts = 0;\n this.startHeartbeat();\n resolve();\n };\n\n this.socket.onerror = (err) => {\n clearTimeout(timeout);\n console.error(\"WebSocket error:\", err);\n reject(err);\n };\n\n this.socket.onclose = () => {\n clearTimeout(timeout);\n this.isConnected = false;\n this.stopHeartbeat();\n // Only auto-reconnect if not disposed and not already reconnecting\n if (\n !this.disposed &&\n this.reconnectAttempts < this.maxReconnectAttempts\n ) {\n this.handleReconnect();\n }\n };\n\n this.socket.onmessage = (data) => this.handleMessage(data.data);\n\n return promise;\n }\n\n private async handleReconnect() {\n // Don't reconnect if disposed\n if (this.disposed) {\n return;\n }\n\n if (this.reconnectAttempts >= this.maxReconnectAttempts) {\n console.error(\"Max reconnection attempts reached\");\n return;\n }\n\n this.reconnectAttempts++;\n const delay = this.reconnectDelay * 2 ** (this.reconnectAttempts - 1);\n\n console.info(`Attempting to reconnect in ${delay}ms...`);\n await new Promise((resolve) => setTimeout(resolve, delay));\n\n // Check again after delay (might have been disposed during wait)\n if (this.disposed) {\n return;\n }\n\n try {\n await this.connect();\n // Resubscribe to existing orderbooks\n for (const assetId of this.orderbooks.keys()) {\n this.sendSubscription(assetId);\n }\n } catch (error) {\n console.error(\"Reconnection failed:\", error);\n }\n }\n\n private handleMessage(data: MessageEvent) {\n let jsonData: unknown;\n try {\n jsonData = JSON.parse(data.toString());\n } catch (error) {\n console.error(\"Failed to parse WebSocket message:\", error);\n return;\n }\n\n // Fast path: Check if it's a control message (has 'op' field)\n if (typeof jsonData === \"object\" && jsonData !== null && \"op\" in jsonData) {\n const baseResponse =\n WsResponseSchemas.WebSocketResponse.safeParse(jsonData);\n if (baseResponse.success && !baseResponse.data.success) {\n console.error(\"WebSocket error:\", baseResponse.data.ret_msg);\n }\n return;\n }\n\n // Parse orderbook update\n const orderbookResponse =\n WsResponseSchemas.OrderbookResponse.safeParse(jsonData);\n if (!orderbookResponse.success) {\n console.error(\n \"Failed to parse orderbook message:\",\n jsonData,\n orderbookResponse.error,\n );\n return;\n }\n\n const message = orderbookResponse.data;\n const marketId = message.data.s;\n const updateId = message.data.u;\n const lastUpdateId = this.lastUpdateIds.get(marketId) ?? 0;\n\n // Skip stale updates\n if (updateId <= lastUpdateId) {\n return;\n }\n\n this.lastUpdateIds.set(marketId, updateId);\n\n // Handle snapshot or delta\n if (message.type === \"snapshot\") {\n this.orderbooks.set(marketId, new Orderbook(marketId, message.data));\n } else {\n // Delta update\n let orderbook = this.orderbooks.get(marketId);\n if (!orderbook) {\n orderbook = new Orderbook(marketId);\n this.orderbooks.set(marketId, orderbook);\n }\n orderbook.applyDelta(message.data);\n }\n\n // Update timestamp and emit event\n const orderbook = this.orderbooks.get(marketId);\n if (orderbook) {\n orderbook.setLastUpdated(message.ts);\n this.eventEmitter.emit(`orderbookUpdated-${marketId}`);\n }\n }\n\n private startHeartbeat() {\n this.stopHeartbeat();\n this.heartbeatInterval = setInterval(() => {\n if (this.isConnected) {\n this.sendMessage(JSON.stringify({ op: \"ping\" }));\n }\n }, 30000);\n }\n\n private stopHeartbeat() {\n if (this.heartbeatInterval) {\n clearInterval(this.heartbeatInterval);\n this.heartbeatInterval = null;\n }\n }\n\n private sendSubscription(marketId: MarketId) {\n this.sendMessage(\n JSON.stringify({ op: \"subscribe\", args: [`orderbook.None.${marketId}`] }),\n );\n }\n\n public sendMessage(message: string) {\n if (this.disposed) {\n throw new Error(\"WebSocketManager has been disposed\");\n }\n if (!this.isConnected || !this.socket) {\n throw new Error(\"WebSocket is not connected\");\n }\n this.socket.send(message);\n }\n\n /**\n * Dispose of all resources: close WebSocket, stop heartbeat, remove listeners, clear Maps\n */\n public dispose(): void {\n if (this.disposed) {\n return;\n }\n\n this.disposed = true;\n this.stopHeartbeat();\n\n if (this.socket) {\n // Remove event handlers to prevent reconnection attempts\n this.socket.onopen = null;\n this.socket.onerror = null;\n this.socket.onclose = null;\n this.socket.onmessage = null;\n\n // Close the connection if open or connecting\n if (\n this.socket.readyState === WebSocket.OPEN ||\n this.socket.readyState === WebSocket.CONNECTING\n ) {\n this.socket.close();\n }\n this.socket = null;\n }\n\n this.eventEmitter.removeAllListeners();\n this.orderbooks.clear();\n this.lastUpdateIds.clear();\n this.isConnected = false;\n this.reconnectAttempts = 0;\n }\n\n public async *subscribeOrderbook(\n marketId: MarketId,\n signal?: AbortSignal,\n ): AsyncIterable<Orderbook> {\n if (signal?.aborted) {\n throw new AbortError();\n }\n\n await this.connect();\n this.sendSubscription(marketId);\n\n const eventName = `orderbookUpdated-${marketId}`;\n\n try {\n while (true) {\n // Wait for next orderbook update (with abort support)\n await onceWithSignal(this.eventEmitter, eventName, signal);\n\n // Get the updated orderbook\n const orderbook = this.orderbooks.get(marketId);\n if (!orderbook) {\n throw new Error(`Orderbook for market ${marketId} not found`);\n }\n\n yield orderbook;\n }\n } finally {\n await this.unsubscribeOrderbook(marketId);\n this.eventEmitter.removeAllListeners(eventName);\n }\n }\n\n public async unsubscribeOrderbook(marketId: MarketId): Promise<void> {\n try {\n this.sendMessage(\n JSON.stringify({\n op: \"unsubscribe\",\n args: [`orderbook.None.${marketId}`],\n }),\n );\n } catch (error) {\n // Ignore errors if already disposed or disconnected\n if (this.disposed || !this.isConnected) {\n return;\n }\n throw error;\n }\n }\n}\n",
|
|
22
|
-
"import { z } from \"zod\";\nimport type {\n MarketKind,\n OrderType,\n Side,\n TriggerDirection,\n TriggerPriceCondition,\n} from \"../types\";\nimport {\n Amount,\n AssetId,\n Base58Address,\n BytesAsBase58Address,\n ClientOrderId,\n createJsonMap,\n createJsonSet,\n DecimalSchema,\n I16Schema,\n I64Schema,\n MarketId,\n OrderId,\n TradeId,\n TriggerOrderId,\n TwapId,\n U8Schema,\n U16Schema,\n U32Schema,\n U64Schema,\n UnixTimestampMicros,\n} from \".\";\n\n// Zod 4 Best Practice: Use z.literal() with arrays for cleaner enum definitions\nconst MARKET_KINDS = [\"perp\", \"spot\"] as const satisfies readonly MarketKind[];\nconst SIDES = [\"bid\", \"ask\"] as const satisfies readonly Side[];\nconst TRIGGER_DIRECTIONS = [\n \"greater_than_or_equal\",\n \"less_than_or_equal\",\n] as const satisfies readonly TriggerDirection[];\nconst TRIGGER_PRICE_CONDITIONS = [\n \"mark\",\n \"oracle\",\n \"last_trade\",\n] as const satisfies readonly TriggerPriceCondition[];\nconst ORDER_TYPES = [\n \"limit\",\n \"post_only\",\n \"fill_or_kill\",\n \"immediate_or_cancel\",\n \"post_only_slide\",\n \"post_only_front\",\n] as const satisfies readonly OrderType[];\n\n// Base response schema builder\nconst createBaseResponse = <T extends z.ZodTypeAny>(schema: T) => schema;\n\n// Helper for versioned types with proper type inference\n// Helper for versioned V0 type with discriminated output\nconst VersionedV0 = <V0 extends z.ZodTypeAny>(schema: V0) =>\n z.object({ V0: schema }).transform((d) => ({\n version: \"V0\" as const,\n data: (d as { V0: z.output<V0> }).V0,\n }));\n\nconst _VersionedV1 = <V1 extends z.ZodTypeAny>(schema: V1) =>\n z.object({ V1: schema }).transform((d) => ({\n version: \"V1\" as const,\n data: (d as { V1: z.output<V1> }).V1,\n }));\n\nconst VersionedV2 = <V2 extends z.ZodTypeAny>(schema: V2) =>\n z.object({ V2: schema }).transform((d) => ({\n version: \"V2\" as const,\n data: (d as { V2: z.output<V2> }).V2,\n }));\n\nconst VersionedV1Value = <V1 extends z.ZodTypeAny>(schema: V1) =>\n z.object({ V1: schema }).transform((d) => (d as { V1: z.output<V1> }).V1);\n\nconst UnversionedOrV1 = <T extends z.ZodTypeAny>(schema: T) =>\n z.union([schema, VersionedV1Value(schema)]);\n\n// Helper for versioned types with proper type inference\n// Not needed right now because we've fully migrated ExchangeInfo to V1\nconst _VersionedV1V0 = <\n V0 extends z.ZodTypeAny,\n V1 extends z.ZodTypeAny,\n>(schemas: {\n V0: V0;\n V1: V1;\n}) =>\n z.union([\n z.object({ V0: schemas.V0 }).transform((d) => ({\n version: \"V0\" as const,\n data: (d as { V0: z.output<V0> }).V0,\n })),\n z.object({ V1: schemas.V1 }).transform((d) => ({\n version: \"V1\" as const,\n data: (d as { V1: z.output<V1> }).V1,\n })),\n ]);\n\n// Generic response schemas\nexport const StateResponseSchemas = {\n RollupSchema: <T extends z.ZodTypeAny>(valueSchema: T) =>\n createBaseResponse(z.object({ schema: valueSchema })),\n\n StateValue: <T extends z.ZodTypeAny>(valueSchema: T) =>\n createBaseResponse(z.object({ value: valueSchema.nullable() })),\n\n CustomRouteValue: <T extends z.ZodTypeAny>(valueSchema: T) =>\n createBaseResponse(valueSchema),\n\n StateMapElement: <K extends z.ZodTypeAny, V extends z.ZodTypeAny>(\n keySchema: K,\n valueSchema: V,\n ) =>\n createBaseResponse(\n z.object({\n key: keySchema,\n value: valueSchema.nullable(),\n }),\n ),\n\n StateVecElement: <T extends z.ZodTypeAny>(valueSchema: T) =>\n createBaseResponse(\n z.object({\n index: z.number(),\n value: valueSchema.nullable(),\n }),\n ),\n} as const;\n\nexport const BaseResponseSchemas = {\n CoinsResponse: createBaseResponse(\n z.object({\n amount: Amount,\n token_id: z.string(),\n }),\n ),\n BatchSequencerResponse: createBaseResponse(\n z.object({\n da_height: z.number(),\n num_txs: z.number(),\n }),\n ),\n SequencerResponse: createBaseResponse(\n z.object({\n id: z.string(),\n status: z.string(),\n }),\n ),\n} as const;\n\n// Price and size\nconst PriceLevelL2 = z.tuple([DecimalSchema, DecimalSchema]);\n\nconst Position = z.object({\n size: DecimalSchema,\n cost_of_trades: DecimalSchema,\n realized_pnl: DecimalSchema,\n cached_mark_price: DecimalSchema,\n last_accum_funding_applied_per_lot: z.tuple([\n DecimalSchema,\n UnixTimestampMicros,\n ]),\n funding_payments_on_side: DecimalSchema,\n funding_payments_on_position: DecimalSchema,\n});\n\nconst BorrowLendRateConfig = z.object({\n optimal_utilization_rate: DecimalSchema,\n min_borrow_rate: DecimalSchema,\n optimal_borrow_rate: DecimalSchema,\n max_borrow_rate: DecimalSchema,\n});\n\nconst BorrowLendRiskConfig = z.object({\n liquidation_total_reward_ratio: DecimalSchema,\n liability_liquidation_limit_ratio: DecimalSchema,\n asset_weight: DecimalSchema,\n initial_liability_weight: DecimalSchema,\n maintenance_liability_weight: DecimalSchema,\n protocol_reward_ratio: DecimalSchema,\n});\n\nconst PerpLiquidationConfig = z.object({\n liquidation_ioc_buffer: DecimalSchema,\n backstop_liquidation_threshold: DecimalSchema,\n liquidation_fee: DecimalSchema,\n liquidation_protocol_reward_ratio: DecimalSchema,\n});\n\nconst Balance = z.object({\n asset: DecimalSchema,\n liability: DecimalSchema,\n});\n\nconst CrossBalances = z.object({\n balances: createJsonMap(AssetId, Balance),\n unrealized_loss_borrow: DecimalSchema,\n unsettled_perp_profit: DecimalSchema,\n trading_credits: DecimalSchema,\n});\n\nconst Tpsl = z.object({\n order_price: DecimalSchema,\n trigger_price: DecimalSchema,\n price_condition: z.enum(TRIGGER_PRICE_CONDITIONS),\n order_type: z.enum(ORDER_TYPES),\n});\n\nconst TpslPair = z.object({\n tp: Tpsl.nullable(),\n sl: Tpsl.nullable(),\n});\n\nconst PendingTpslPair = z.object({\n tpsl_pair: TpslPair,\n dynamic_size: z.boolean(),\n});\n\nconst PerpOrder = UnversionedOrV1(\n z.object({\n side: z.enum(SIDES),\n market_id: MarketId,\n order_id: OrderId,\n client_order_id: ClientOrderId.nullable(),\n price: DecimalSchema,\n remaining_size: DecimalSchema,\n reduce_only: z.boolean(),\n filled_size: DecimalSchema,\n filled_cot: DecimalSchema,\n owner: Base58Address,\n reserved_pending_tpsl_pair_ids: z.string().nullable(),\n expiry_timestamp: UnixTimestampMicros.nullable(),\n }),\n);\n\nconst SpotOrder = UnversionedOrV1(\n z.object({\n side: z.enum(SIDES),\n market_id: MarketId,\n order_id: OrderId,\n quote_asset_id: AssetId,\n base_asset_id: AssetId,\n client_order_id: ClientOrderId.nullable(),\n quote_lots: DecimalSchema,\n remaining_base_lots: DecimalSchema,\n filled_base_lots: DecimalSchema,\n filled_cot: DecimalSchema,\n owner: Base58Address,\n expiry_timestamp: UnixTimestampMicros.nullable(),\n }),\n);\n\nconst Order = z.union([PerpOrder, SpotOrder]);\n\nconst TriggerOrder = z.object({\n side: z.enum(SIDES),\n market_id: MarketId,\n trigger_order_id: TriggerOrderId,\n order_price: DecimalSchema,\n trigger_price: DecimalSchema,\n trigger_direction: z.enum(TRIGGER_DIRECTIONS),\n price_condition: z.enum(TRIGGER_PRICE_CONDITIONS),\n size: DecimalSchema.nullable(),\n order_type: z.enum(ORDER_TYPES),\n owner: Base58Address,\n last_update_timestamp: UnixTimestampMicros,\n linked_trigger_order_id: TriggerOrderId.nullable(),\n});\n\nconst RewardVariant = z.enum([\"referral\", \"liquidity\"]);\nconst MarketTradingStatus = z.enum([\"active\", \"halted\", \"cleaning\", \"cleaned\"]);\nconst FeeTier = z.enum([\n \"tier0\",\n \"tier1\",\n \"tier2\",\n \"tier3\",\n \"tier4\",\n \"tier5\",\n \"tier6\",\n \"tier7\",\n \"tier8\",\n \"tier9\",\n]);\nconst TradingMode = z.enum([\"iso\", \"cross\"]);\nconst PerpLedger = UnversionedOrV1(\n z.object({\n trading_mode: TradingMode,\n order_ids: z.array(OrderId),\n trigger_order_ids: z.array(TriggerOrderId),\n position: Position,\n user_selected_max_leverage: U16Schema,\n notional_open_bid_orders: DecimalSchema,\n notional_open_ask_orders: DecimalSchema,\n twap_ids: z.array(TwapId),\n twap_open_bid_lots: DecimalSchema,\n twap_open_ask_lots: DecimalSchema,\n }),\n);\n\nconst SpotLedger = z.object({\n order_ids: z.array(OrderId),\n trigger_order_ids: z.array(TriggerOrderId),\n twap_ids: z.array(TwapId),\n});\n\nconst Balances = z.object({\n cross: CrossBalances,\n iso: createJsonMap(MarketId, DecimalSchema),\n spot: createJsonMap(AssetId, DecimalSchema),\n});\n\nconst RewardsInfo = z.object({\n cumulative_amount: DecimalSchema,\n total_claimed_amount: DecimalSchema,\n});\n\nconst Twap = z.object({\n side: z.enum(SIDES),\n market_id: MarketId,\n twap_id: TwapId,\n total_orders: U32Schema,\n total_size: DecimalSchema,\n total_duration_seconds: U64Schema,\n executed_size: DecimalSchema,\n executed_orders: U32Schema,\n cost_of_trade: DecimalSchema,\n reduce_only: z.boolean(),\n owner: Base58Address,\n});\n\nconst OrdersLedger = UnversionedOrV1(\n z.object({\n client_order_ids: createJsonMap(ClientOrderId, OrderId),\n perp_orders: createJsonMap(OrderId, PerpOrder),\n perp_trigger_orders: createJsonMap(TriggerOrderId, TriggerOrder),\n perp_pending_tpsl_pairs: createJsonMap(z.string(), PendingTpslPair),\n spot_orders: createJsonMap(OrderId, SpotOrder),\n spot_trigger_orders: createJsonMap(TriggerOrderId, TriggerOrder),\n twaps: createJsonMap(TwapId, Twap),\n }),\n);\n\nconst TriggerNodesStore = z.object({\n inactive: createJsonMap(\n z.string(),\n createJsonMap(z.string(), z.any()), // TriggerNodesPriceMap<S>\n ),\n active: z.array(z.any()), // VecDeque<TriggerNode<S>>\n});\n\nconst ActiveTwap = z.object({\n twap_id: U64Schema,\n remaining_orders: U32Schema,\n owner: Base58Address,\n});\n\nconst TwapNode = z.object({\n twap_id: U64Schema,\n owner: Base58Address,\n});\n\nconst TwapNodesStore = z.object({\n twaps: z.array(ActiveTwap),\n last_execution_time: I64Schema,\n execution_queue: z.array(TwapNode),\n});\n\nconst PriceLevel = z.object({\n nodes: z.array(\n z.object({\n order_id: OrderId,\n owner: Base58Address,\n }),\n ),\n total_size: DecimalSchema,\n});\n\nconst OraclePrice = z.object({\n price: DecimalSchema,\n last_update_timestamp: UnixTimestampMicros.nullable(),\n});\n\nconst MarkPrice = z.object({\n price: DecimalSchema,\n last_oracle_diff_ema: DecimalSchema,\n last_median_cex_price: DecimalSchema,\n last_update_timestamp: UnixTimestampMicros.nullable(),\n});\n\nconst TimeWeightedPremiumIndex = z.object({\n weighted_premium_sum: DecimalSchema,\n duration_sum: U64Schema,\n last_update_timestamp: UnixTimestampMicros.nullable(),\n});\n\nconst FundingConfig = z.object({\n interest_rate: DecimalSchema,\n min_interest_rate_clamp: DecimalSchema,\n max_interest_rate_clamp: DecimalSchema,\n min_funding_rate_clamp: DecimalSchema,\n max_funding_rate_clamp: DecimalSchema,\n});\n\nconst FundingMeta = z.object({\n rate: DecimalSchema,\n accum_per_lot: DecimalSchema,\n last_update_timestamp: UnixTimestampMicros,\n config: FundingConfig,\n});\n\nconst PerpPrice = z.object({\n market_id: MarketId,\n mark_price: MarkPrice,\n accum_premium_index: TimeWeightedPremiumIndex,\n funding_meta: FundingMeta,\n});\n\nconst PricingEngine = z.object({\n pricing_frequency_seconds: U32Schema,\n relaxed_pricing_frequency_seconds: U32Schema,\n oracle_pricing: createJsonMap(AssetId, OraclePrice),\n perp_pricing: createJsonMap(MarketId, PerpPrice),\n});\n\nconst LeverageTable = z.object({\n tiers: createJsonMap(\n z.string(),\n z.object({\n max_leverage: U16Schema,\n mmr: DecimalSchema,\n maintenance_amount: DecimalSchema,\n }),\n ),\n});\n\nconst MarginConfig = z.object({\n perp_liquidation_config: PerpLiquidationConfig,\n perp_leverage_tables: createJsonMap(MarketId, LeverageTable),\n borrow_lend_risk_configs: createJsonMap(AssetId, BorrowLendRiskConfig),\n});\n\nconst GlobalConfig = z.object({\n max_orders_per_user: U16Schema,\n max_trigger_orders_per_user: U16Schema,\n max_orders_per_batch_msg: U16Schema,\n max_trigger_orders_to_execute_per_msg: U16Schema,\n min_notional_twap_value: DecimalSchema,\n min_notional_twap_value_per_order: DecimalSchema,\n twap_execution_interval_seconds: U64Schema,\n user_deposit_limits_per_asset: createJsonMap(AssetId, DecimalSchema),\n whitelisted_users_for_deposit: createJsonSet(Base58Address),\n pyth_lazer_trusted_signers: createJsonSet(BytesAsBase58Address),\n});\n\nconst LegacyGlobalConfigV0 = z.object({\n max_orders_per_user: U16Schema,\n max_trigger_orders_per_user: U16Schema,\n max_orders_per_batch_msg: U16Schema,\n max_trigger_orders_to_execute_per_msg: U16Schema,\n min_notional_twap_value: DecimalSchema,\n min_notional_twap_value_per_order: DecimalSchema,\n twap_execution_interval_seconds: U64Schema,\n user_deposit_limits_per_asset: createJsonMap(AssetId, DecimalSchema),\n whitelisted_users_for_deposit: createJsonSet(Base58Address),\n});\n\nconst AdminRegistry = z.object({\n protocol: Base58Address,\n funding: Base58Address,\n pricing: Base58Address,\n fee_tier: Base58Address,\n credits: Base58Address,\n referrals: Base58Address,\n});\n\nconst AssetInfo = z.object({\n id: AssetId,\n name: z.string(),\n token_id: z.string().nullable(),\n decimals: U8Schema,\n withdraw_fee: DecimalSchema,\n pyth_lazer_feed_id: z.number().nullable(),\n pyth_lazer_quote_feed_id: z.number().nullable(),\n});\n\nconst LegacyAssetInfoV0 = z.object({\n id: AssetId,\n name: z.string(),\n token_id: z.string().nullable(),\n decimals: U8Schema,\n withdraw_fee: DecimalSchema,\n});\n\nconst MarketInfo = z.object({\n id: MarketId,\n kind: z.enum(MARKET_KINDS),\n base_asset_id: AssetId,\n name: z.string(),\n trading_mode: TradingMode,\n});\n\nconst VaultWithdrawal = z.object({\n user: Base58Address,\n shares: DecimalSchema,\n timestamp: UnixTimestampMicros,\n});\n\nconst VaultInfo = z.object({\n leader: Base58Address,\n name: z.string(),\n description: z.string(),\n deposit_asset_ids: z.array(AssetId),\n withdraw_asset_id: AssetId,\n deposit_limit: DecimalSchema,\n leader_minimum_holding_percentage: U8Schema,\n withdraw_lockup_period_hours: U8Schema,\n profit_share_percentage: U8Schema,\n withdrawal_fee_bps: U8Schema,\n total_shares: DecimalSchema,\n high_watermark: DecimalSchema,\n queued_withdrawals: z.array(VaultWithdrawal),\n whitelist_deposits: z.boolean(),\n whitelisted_depositors: z.array(Base58Address),\n});\n\nconst GlobalVaultConfig = z.object({\n leader_minimum_holding_percentage: U8Schema,\n creation_fee_usdc: DecimalSchema,\n min_deposit_value: DecimalSchema,\n});\n\nconst VaultRegistry = z.object({\n vaults: createJsonMap(Base58Address, VaultInfo),\n config: GlobalVaultConfig,\n depositor_state: createJsonMap(\n Base58Address,\n createJsonMap(Base58Address, DecimalSchema),\n ),\n});\n\nconst UsdcPnlPool = z.object({\n amount: DecimalSchema,\n trading_credits: DecimalSchema,\n orphaned_trading_credits: DecimalSchema,\n external_deposits: createJsonMap(Base58Address, DecimalSchema),\n token_holder: z.string(),\n});\n\nconst UsdcInsuranceFund = z.object({\n amount: DecimalSchema,\n external_deposits: createJsonMap(Base58Address, DecimalSchema),\n minimum_usdc_token_amount: DecimalSchema,\n token_holder: z.string(),\n});\n\nconst BorrowLendPool = z.object({\n asset_id: AssetId,\n is_active: z.boolean(),\n last_update_timestamp: UnixTimestampMicros,\n rate_config: BorrowLendRateConfig,\n deposit_limit: DecimalSchema,\n borrow_limit: DecimalSchema,\n max_utilization_rate: DecimalSchema,\n available_amount: DecimalSchema,\n borrowed_amount: DecimalSchema,\n cumulative_deposit_rate: DecimalSchema,\n cumulative_borrow_rate: DecimalSchema,\n accumulated_protocol_fees: DecimalSchema,\n unclaimed_protocol_fees: DecimalSchema,\n interest_fee_tenth_bps: U16Schema,\n});\n\nconst CrossAssets = z.object({\n usdc_pnl_pool: UsdcPnlPool,\n usdc_insurance_fund: UsdcInsuranceFund,\n borrow_lend_deposit_vault: z.string(),\n borrow_lend_pools: createJsonMap(AssetId, BorrowLendPool),\n});\n\nconst IsoAssets = z.object({\n usdc_deposit_vault: z.string(),\n usdc_insurance_fund: UsdcInsuranceFund,\n});\n\nconst PerpMarketConfig = z.object({\n min_tick_size: DecimalSchema,\n min_lot_size: DecimalSchema,\n max_oi_notional: DecimalSchema,\n impact_margin: DecimalSchema,\n max_orders_per_side: U16Schema,\n max_orders_per_user: U16Schema,\n max_trigger_orders_per_user: U16Schema,\n taker_fees_tenth_bps: z.array(I16Schema),\n maker_fees_tenth_bps: z.array(I16Schema),\n max_order_to_mark_price_deviation_ratio: DecimalSchema,\n max_trigger_to_comparison_price_deviation_ratio: DecimalSchema,\n max_order_to_trigger_price_deviation_ratio: DecimalSchema,\n});\n\nconst SpotMarketConfig = z.object({\n base_min_lot_size: DecimalSchema,\n quote_min_lot_size: DecimalSchema,\n max_orders_per_side: U16Schema,\n max_orders_per_user: U16Schema,\n max_trigger_orders_per_user: U16Schema,\n taker_fees_tenth_bps: z.array(I16Schema),\n maker_fees_tenth_bps: z.array(I16Schema),\n max_order_to_trigger_price_deviation_ratio: DecimalSchema,\n});\n\nconst DelegateContainer = z.object({\n delegator: Base58Address,\n expires_at: UnixTimestampMicros.nullable(),\n flags: U32Schema,\n});\n\n// Main schemas\nexport const Schemas = {\n DummyValue: z.number(),\n\n ExchangeInfoV2: z.object({\n global_config: GlobalConfig,\n admins: AdminRegistry,\n assets: createJsonMap(AssetId, AssetInfo),\n markets: createJsonMap(MarketId, MarketInfo),\n vaults: VaultRegistry,\n }),\n\n ExchangeInfoV1: z.object({\n global_config: LegacyGlobalConfigV0,\n admins: AdminRegistry,\n assets: createJsonMap(AssetId, LegacyAssetInfoV0),\n markets: createJsonMap(MarketId, MarketInfo),\n vaults: VaultRegistry,\n }),\n\n ExchangeAssetsV0: z.object({\n cross_assets: CrossAssets,\n iso_assets: createJsonMap(MarketId, IsoAssets),\n spot_collateral_vault: z.string(),\n treasury: z.string(),\n }),\n\n OrderbookL2: z.object({\n market_id: MarketId,\n bids: z.array(PriceLevelL2),\n asks: z.array(PriceLevelL2),\n }),\n\n UserAccount: UnversionedOrV1(\n z.object({\n account_variant: z.discriminatedUnion(\"type\", [\n z.object({\n type: z.literal(\"master\"),\n sub_account_indices: z.array(U8Schema),\n }),\n z.object({ type: z.literal(\"sub\") }),\n z.object({ type: z.literal(\"vault\") }),\n z.object({ type: z.literal(\"protocol_vault\") }),\n z.object({ type: z.literal(\"master_v1\"), sub_account_mask: U32Schema }),\n ]),\n address: Base58Address,\n fee_tier: FeeTier,\n fee_discount_bps: U16Schema,\n balances: Balances,\n rewards: createJsonMap(\n AssetId,\n createJsonMap(RewardVariant, RewardsInfo),\n ),\n perp_ledgers: createJsonMap(MarketId, PerpLedger),\n spot_ledgers: createJsonMap(MarketId, SpotLedger),\n orders_ledger: OrdersLedger,\n }),\n ),\n\n UserAccountConfigV0: z.object({\n delegates: createJsonMap(Base58Address, z.string()),\n }),\n\n Delegate: z.object({\n name: z.string(),\n address: Base58Address,\n container: DelegateContainer,\n }),\n\n RiskEngineV0: z.object({\n pricing_engine: PricingEngine,\n margin_config: MarginConfig,\n }),\n\n PerpMarketV0: z.object({\n market_id: MarketId,\n trading_status: MarketTradingStatus,\n config: PerpMarketConfig,\n current_open_interest_lots: DecimalSchema,\n last_trade_price: DecimalSchema.nullable(),\n orderbook: z.object({\n bids: createJsonMap(z.string(), PriceLevel),\n asks: createJsonMap(z.string(), PriceLevel),\n }),\n trigger_nodes_store: TriggerNodesStore,\n twap_nodes_store: TwapNodesStore,\n }),\n\n PerpMarketConfig: PerpMarketConfig,\n\n SpotMarketV0: z.object({\n market_id: MarketId,\n trading_status: MarketTradingStatus,\n base_asset_id: AssetId,\n quote_asset_id: AssetId,\n config: SpotMarketConfig,\n last_trade_price: DecimalSchema.nullable(),\n orderbook: z.object({\n bids: createJsonMap(z.string(), PriceLevel),\n asks: createJsonMap(z.string(), PriceLevel),\n }),\n trigger_nodes_store: TriggerNodesStore,\n }),\n\n SpotMarketConfig: SpotMarketConfig,\n\n ExecutionIdsV0: z.object({\n last_order_id: OrderId,\n last_trigger_order_id: TriggerOrderId,\n last_trade_id: TradeId,\n }),\n AccountAddresses: z.object({\n addresses: z.array(Base58Address),\n total: z.number(),\n next_offset: z.number().nullable(),\n }),\n} as const;\n\n// Response schemas\nexport const ResponseSchemas = {\n DummyValue: StateResponseSchemas.StateValue(Schemas.DummyValue),\n Order: StateResponseSchemas.StateMapElement(OrderId, Order),\n ExchangeInfo: StateResponseSchemas.StateValue(\n VersionedV2(Schemas.ExchangeInfoV2),\n ),\n ExchangeAssets: StateResponseSchemas.StateValue(\n VersionedV0(Schemas.ExchangeAssetsV0),\n ),\n RiskEngine: StateResponseSchemas.StateValue(\n VersionedV0(Schemas.RiskEngineV0),\n ),\n ExecutionIds: StateResponseSchemas.StateValue(\n VersionedV0(Schemas.ExecutionIdsV0),\n ),\n OrderbookL2: createBaseResponse(\n z.object({\n market_id: MarketId,\n orderbook: Schemas.OrderbookL2,\n }),\n ),\n OrderbookL2Bulk: createBaseResponse(\n z.object({\n found: createJsonMap(MarketId, Schemas.OrderbookL2),\n not_found: z.array(MarketId),\n }),\n ),\n UserAccount: createBaseResponse(\n z.object({\n address: Base58Address,\n account: Schemas.UserAccount,\n }),\n ),\n Delegate: createBaseResponse(Schemas.Delegate),\n Delegates: createBaseResponse(\n z.object({\n delegator: Base58Address,\n delegates: z.array(Schemas.Delegate),\n }),\n ),\n UserAccountConfig: StateResponseSchemas.StateMapElement(\n Base58Address,\n VersionedV0(Schemas.UserAccountConfigV0),\n ),\n UserAccountBulk: createBaseResponse(\n z.object({\n found: createJsonMap(Base58Address, Schemas.UserAccount),\n not_found: z.array(Base58Address),\n }),\n ),\n PerpMarket: createBaseResponse(\n z.object({\n market_id: MarketId,\n market: VersionedV0(Schemas.PerpMarketV0),\n }),\n ),\n PerpMarketConfigs: createBaseResponse(\n createJsonMap(MarketId, Schemas.PerpMarketConfig),\n ),\n SpotMarket: createBaseResponse(\n z.object({\n market_id: MarketId,\n market: VersionedV0(Schemas.SpotMarketV0),\n }),\n ),\n SpotMarketConfigs: createBaseResponse(\n createJsonMap(MarketId, Schemas.SpotMarketConfig),\n ),\n AccountAddresses: createBaseResponse(Schemas.AccountAddresses),\n ChainData: StateResponseSchemas.RollupSchema(\n z.object({\n chain_data: z.object({\n chain_id: z.number(),\n chain_name: z.string(),\n }),\n }),\n ),\n} as const;\n\n// Internal scehma types\ntype UserAccountConfigV0 = z.infer<typeof Schemas.UserAccountConfigV0>;\ntype PerpMarketV0 = z.infer<typeof Schemas.PerpMarketV0>;\ntype SpotMarketV0 = z.infer<typeof Schemas.SpotMarketV0>;\ntype RiskEngineV0 = z.infer<typeof Schemas.RiskEngineV0>;\ntype ExchangeInfoV2 = z.infer<typeof Schemas.ExchangeInfoV2>;\ntype ExchangeAssetsV0 = z.infer<typeof Schemas.ExchangeAssetsV0>;\ntype ExecutionIdsV0 = z.infer<typeof Schemas.ExecutionIdsV0>;\n\n// Schema types\nexport type DummyValue = z.infer<typeof Schemas.DummyValue>;\nexport type Order = z.infer<typeof Order>;\nexport type OrderbookL2 = z.infer<typeof Schemas.OrderbookL2>;\nexport type PriceLevelL2 = z.infer<typeof PriceLevelL2>;\nexport type UserAccount = z.infer<typeof Schemas.UserAccount>;\nexport type PerpMarketConfig = z.infer<typeof Schemas.PerpMarketConfig>;\nexport type SpotMarketConfig = z.infer<typeof Schemas.SpotMarketConfig>;\nexport type VersionedUserAccountConfig = {\n version: \"V0\";\n data: UserAccountConfigV0;\n};\nexport type VersionedExchangeAssets = { version: \"V0\"; data: ExchangeAssetsV0 };\nexport type VersionedPerpMarket = { version: \"V0\"; data: PerpMarketV0 };\nexport type VersionedSpotMarket = { version: \"V0\"; data: SpotMarketV0 };\nexport type VersionedExchangeInfo = { version: \"V2\"; data: ExchangeInfoV2 };\nexport type AccountAddresses = z.infer<typeof Schemas.AccountAddresses>;\nexport type VersionedExecutionIds = { version: \"V0\"; data: ExecutionIdsV0 };\nexport type VersionedRiskEngine = { version: \"V0\"; data: RiskEngineV0 };\nexport type BorrowLendPool = z.infer<typeof BorrowLendPool>;\nexport type Delegate = z.infer<typeof Schemas.Delegate>;\nexport type Delegates = z.infer<typeof ResponseSchemas.Delegates>;\n",
|
|
23
|
+
"import { z } from \"zod\";\nimport type {\n MarketKind,\n OrderType,\n Side,\n TriggerDirection,\n TriggerPriceCondition,\n} from \"../types\";\nimport {\n Amount,\n AssetId,\n Base58Address,\n BytesAsBase58Address,\n ClientOrderId,\n createJsonMap,\n createJsonSet,\n DecimalSchema,\n I16Schema,\n I64Schema,\n MarketId,\n OrderId,\n TradeId,\n TriggerOrderId,\n TwapId,\n U8Schema,\n U16Schema,\n U32Schema,\n U64Schema,\n UnixTimestampMicros,\n} from \".\";\n\n// Zod 4 Best Practice: Use z.literal() with arrays for cleaner enum definitions\nconst MARKET_KINDS = [\n \"perp\",\n \"spot\",\n \"rwa_perp\",\n] as const satisfies readonly MarketKind[];\nconst SIDES = [\"bid\", \"ask\"] as const satisfies readonly Side[];\nconst TRIGGER_DIRECTIONS = [\n \"greater_than_or_equal\",\n \"less_than_or_equal\",\n] as const satisfies readonly TriggerDirection[];\nconst TRIGGER_PRICE_CONDITIONS = [\n \"mark\",\n \"oracle\",\n \"last_trade\",\n] as const satisfies readonly TriggerPriceCondition[];\nconst ORDER_TYPES = [\n \"limit\",\n \"post_only\",\n \"fill_or_kill\",\n \"immediate_or_cancel\",\n \"post_only_slide\",\n \"post_only_front\",\n] as const satisfies readonly OrderType[];\n\n// Base response schema builder\nconst createBaseResponse = <T extends z.ZodTypeAny>(schema: T) => schema;\n\n// Helper for versioned types with proper type inference\n// Helper for versioned V0 type with discriminated output\nconst VersionedV0 = <V0 extends z.ZodTypeAny>(schema: V0) =>\n z.object({ V0: schema }).transform((d) => ({\n version: \"V0\" as const,\n data: (d as { V0: z.output<V0> }).V0,\n }));\n\nconst _VersionedV1 = <V1 extends z.ZodTypeAny>(schema: V1) =>\n z.object({ V1: schema }).transform((d) => ({\n version: \"V1\" as const,\n data: (d as { V1: z.output<V1> }).V1,\n }));\n\nconst _VersionedV2 = <V2 extends z.ZodTypeAny>(schema: V2) =>\n z.object({ V2: schema }).transform((d) => ({\n version: \"V2\" as const,\n data: (d as { V2: z.output<V2> }).V2,\n }));\n\nconst VersionedV3 = <V3 extends z.ZodTypeAny>(schema: V3) =>\n z.object({ V3: schema }).transform((d) => ({\n version: \"V3\" as const,\n data: (d as { V3: z.output<V3> }).V3,\n }));\n\nconst VersionedV1Value = <V1 extends z.ZodTypeAny>(schema: V1) =>\n z.object({ V1: schema }).transform((d) => (d as { V1: z.output<V1> }).V1);\n\nconst UnversionedOrV1 = <T extends z.ZodTypeAny>(schema: T) =>\n z.union([schema, VersionedV1Value(schema)]);\n\n// Helper for versioned types with proper type inference\n// Not needed right now because we've fully migrated ExchangeInfo to V1\nconst VersionedV1V0 = <\n V0 extends z.ZodTypeAny,\n V1 extends z.ZodTypeAny,\n>(schemas: {\n V0: V0;\n V1: V1;\n}) =>\n z.union([\n z.object({ V0: schemas.V0 }).transform((d) => ({\n version: \"V0\" as const,\n data: (d as { V0: z.output<V0> }).V0,\n })),\n z.object({ V1: schemas.V1 }).transform((d) => ({\n version: \"V1\" as const,\n data: (d as { V1: z.output<V1> }).V1,\n })),\n ]);\n\n// Generic response schemas\nexport const StateResponseSchemas = {\n RollupSchema: <T extends z.ZodTypeAny>(valueSchema: T) =>\n createBaseResponse(z.object({ schema: valueSchema })),\n\n StateValue: <T extends z.ZodTypeAny>(valueSchema: T) =>\n createBaseResponse(z.object({ value: valueSchema.nullable() })),\n\n CustomRouteValue: <T extends z.ZodTypeAny>(valueSchema: T) =>\n createBaseResponse(valueSchema),\n\n StateMapElement: <K extends z.ZodTypeAny, V extends z.ZodTypeAny>(\n keySchema: K,\n valueSchema: V,\n ) =>\n createBaseResponse(\n z.object({\n key: keySchema,\n value: valueSchema.nullable(),\n }),\n ),\n\n StateVecElement: <T extends z.ZodTypeAny>(valueSchema: T) =>\n createBaseResponse(\n z.object({\n index: z.number(),\n value: valueSchema.nullable(),\n }),\n ),\n} as const;\n\nexport const BaseResponseSchemas = {\n CoinsResponse: createBaseResponse(\n z.object({\n amount: Amount,\n token_id: z.string(),\n }),\n ),\n BatchSequencerResponse: createBaseResponse(\n z.object({\n da_height: z.number(),\n num_txs: z.number(),\n }),\n ),\n SequencerResponse: createBaseResponse(\n z.object({\n id: z.string(),\n status: z.string(),\n }),\n ),\n} as const;\n\n// Price and size\nconst PriceLevelL2 = z.tuple([DecimalSchema, DecimalSchema]);\n\nconst Position = z.object({\n size: DecimalSchema,\n cost_of_trades: DecimalSchema,\n realized_pnl: DecimalSchema,\n cached_mark_price: DecimalSchema,\n last_accum_funding_applied_per_lot: z.tuple([\n DecimalSchema,\n UnixTimestampMicros,\n ]),\n funding_payments_on_side: DecimalSchema,\n funding_payments_on_position: DecimalSchema,\n});\n\nconst BorrowLendRateConfig = z.object({\n optimal_utilization_rate: DecimalSchema,\n min_borrow_rate: DecimalSchema,\n optimal_borrow_rate: DecimalSchema,\n max_borrow_rate: DecimalSchema,\n});\n\nconst BorrowLendRiskConfig = z.object({\n liquidation_total_reward_ratio: DecimalSchema,\n liability_liquidation_limit_ratio: DecimalSchema,\n asset_weight: DecimalSchema,\n initial_liability_weight: DecimalSchema,\n maintenance_liability_weight: DecimalSchema,\n protocol_reward_ratio: DecimalSchema,\n});\n\nconst PerpLiquidationConfig = z.object({\n liquidation_ioc_buffer: DecimalSchema,\n backstop_liquidation_threshold: DecimalSchema,\n liquidation_fee: DecimalSchema,\n liquidation_protocol_reward_ratio: DecimalSchema,\n});\n\nconst Balance = z.object({\n asset: DecimalSchema,\n liability: DecimalSchema,\n});\n\nconst CrossBalances = z.object({\n balances: createJsonMap(AssetId, Balance),\n unrealized_loss_borrow: DecimalSchema,\n unsettled_perp_profit: DecimalSchema,\n trading_credits: DecimalSchema,\n});\n\nconst Tpsl = z.object({\n order_price: DecimalSchema,\n trigger_price: DecimalSchema,\n price_condition: z.enum(TRIGGER_PRICE_CONDITIONS),\n order_type: z.enum(ORDER_TYPES),\n});\n\nconst TpslPair = z.object({\n tp: Tpsl.nullable(),\n sl: Tpsl.nullable(),\n});\n\nconst PendingTpslPair = z.object({\n tpsl_pair: TpslPair,\n dynamic_size: z.boolean(),\n});\n\nconst PerpOrder = UnversionedOrV1(\n z.object({\n side: z.enum(SIDES),\n market_id: MarketId,\n order_id: OrderId,\n client_order_id: ClientOrderId.nullable(),\n price: DecimalSchema,\n remaining_size: DecimalSchema,\n reduce_only: z.boolean(),\n filled_size: DecimalSchema,\n filled_cot: DecimalSchema,\n owner: Base58Address,\n reserved_pending_tpsl_pair_ids: z.string().nullable(),\n expiry_timestamp: UnixTimestampMicros.nullable(),\n }),\n);\n\nconst SpotOrder = UnversionedOrV1(\n z.object({\n side: z.enum(SIDES),\n market_id: MarketId,\n order_id: OrderId,\n quote_asset_id: AssetId,\n base_asset_id: AssetId,\n client_order_id: ClientOrderId.nullable(),\n quote_lots: DecimalSchema,\n remaining_base_lots: DecimalSchema,\n filled_base_lots: DecimalSchema,\n filled_cot: DecimalSchema,\n owner: Base58Address,\n expiry_timestamp: UnixTimestampMicros.nullable(),\n }),\n);\n\nconst Order = z.union([PerpOrder, SpotOrder]);\n\nconst TriggerOrder = z.object({\n side: z.enum(SIDES),\n market_id: MarketId,\n trigger_order_id: TriggerOrderId,\n order_price: DecimalSchema,\n trigger_price: DecimalSchema,\n trigger_direction: z.enum(TRIGGER_DIRECTIONS),\n price_condition: z.enum(TRIGGER_PRICE_CONDITIONS),\n size: DecimalSchema.nullable(),\n order_type: z.enum(ORDER_TYPES),\n owner: Base58Address,\n last_update_timestamp: UnixTimestampMicros,\n linked_trigger_order_id: TriggerOrderId.nullable(),\n});\n\nconst RewardVariant = z.enum([\"referral\", \"liquidity\"]);\nconst MarketTradingStatus = z.enum([\"active\", \"halted\", \"cleaning\", \"cleaned\"]);\nconst FeeTier = z.enum([\n \"tier0\",\n \"tier1\",\n \"tier2\",\n \"tier3\",\n \"tier4\",\n \"tier5\",\n \"tier6\",\n \"tier7\",\n \"tier8\",\n \"tier9\",\n]);\nconst TradingMode = z.enum([\"iso\", \"cross\"]);\nconst PerpLedger = UnversionedOrV1(\n z.object({\n trading_mode: TradingMode,\n order_ids: z.array(OrderId),\n trigger_order_ids: z.array(TriggerOrderId),\n position: Position,\n user_selected_max_leverage: U16Schema,\n notional_open_bid_orders: DecimalSchema,\n notional_open_ask_orders: DecimalSchema,\n twap_ids: z.array(TwapId),\n twap_open_bid_lots: DecimalSchema,\n twap_open_ask_lots: DecimalSchema,\n }),\n);\n\nconst SpotLedger = z.object({\n order_ids: z.array(OrderId),\n trigger_order_ids: z.array(TriggerOrderId),\n twap_ids: z.array(TwapId),\n});\n\nconst Balances = z.object({\n cross: CrossBalances,\n iso: createJsonMap(MarketId, DecimalSchema),\n spot: createJsonMap(AssetId, DecimalSchema),\n});\n\nconst RewardsInfo = z.object({\n cumulative_amount: DecimalSchema,\n total_claimed_amount: DecimalSchema,\n});\n\nconst Twap = z.object({\n side: z.enum(SIDES),\n market_id: MarketId,\n twap_id: TwapId,\n total_orders: U32Schema,\n total_size: DecimalSchema,\n total_duration_seconds: U64Schema,\n executed_size: DecimalSchema,\n executed_orders: U32Schema,\n cost_of_trade: DecimalSchema,\n reduce_only: z.boolean(),\n owner: Base58Address,\n});\n\nconst OrdersLedger = UnversionedOrV1(\n z.object({\n client_order_ids: createJsonMap(ClientOrderId, OrderId),\n perp_orders: createJsonMap(OrderId, PerpOrder),\n perp_trigger_orders: createJsonMap(TriggerOrderId, TriggerOrder),\n perp_pending_tpsl_pairs: createJsonMap(z.string(), PendingTpslPair),\n spot_orders: createJsonMap(OrderId, SpotOrder),\n spot_trigger_orders: createJsonMap(TriggerOrderId, TriggerOrder),\n twaps: createJsonMap(TwapId, Twap),\n }),\n);\n\nconst TriggerNodesStore = z.object({\n inactive: createJsonMap(\n z.string(),\n createJsonMap(z.string(), z.any()), // TriggerNodesPriceMap<S>\n ),\n active: z.array(z.any()), // VecDeque<TriggerNode<S>>\n});\n\nconst ActiveTwap = z.object({\n twap_id: U64Schema,\n remaining_orders: U32Schema,\n owner: Base58Address,\n});\n\nconst TwapNode = z.object({\n twap_id: U64Schema,\n owner: Base58Address,\n});\n\nconst TwapNodesStore = z.object({\n twaps: z.array(ActiveTwap),\n last_execution_time: I64Schema,\n execution_queue: z.array(TwapNode),\n});\n\nconst PriceLevel = z.object({\n nodes: z.array(\n z.object({\n order_id: OrderId,\n owner: Base58Address,\n }),\n ),\n total_size: DecimalSchema,\n});\n\nconst OraclePrice = z.object({\n price: DecimalSchema,\n last_update_timestamp: UnixTimestampMicros.nullable(),\n});\n\nconst MarkPrice = z.object({\n price: DecimalSchema,\n last_oracle_diff_ema: DecimalSchema,\n last_median_cex_price: DecimalSchema,\n last_update_timestamp: UnixTimestampMicros.nullable(),\n});\n\nconst TimeWeightedPremiumIndex = z.object({\n weighted_premium_sum: DecimalSchema,\n duration_sum: U64Schema,\n last_update_timestamp: UnixTimestampMicros.nullable(),\n});\n\nconst FundingConfig = z.object({\n interest_rate: DecimalSchema,\n min_interest_rate_clamp: DecimalSchema,\n max_interest_rate_clamp: DecimalSchema,\n min_funding_rate_clamp: DecimalSchema,\n max_funding_rate_clamp: DecimalSchema,\n});\n\nconst FundingMeta = z.object({\n rate: DecimalSchema,\n accum_per_lot: DecimalSchema,\n last_update_timestamp: UnixTimestampMicros,\n config: FundingConfig,\n});\n\nconst PerpPrice = z.object({\n market_id: MarketId,\n mark_price: MarkPrice,\n accum_premium_index: TimeWeightedPremiumIndex,\n funding_meta: FundingMeta,\n});\n\nconst RwaPriceConfig = z.object({\n reference_price: DecimalSchema.nullable(),\n oracle_threshold_ratio: DecimalSchema,\n up_bound_n: U8Schema,\n down_bound_n: U8Schema,\n max_bound_n: U8Schema,\n funding_dampening_multiplier: DecimalSchema,\n internal_pricing_time_constant: UnixTimestampMicros,\n});\n\nconst PricingEngineV1 = z.object({\n pricing_frequency_seconds: U32Schema,\n relaxed_pricing_frequency_seconds: U32Schema,\n oracle_pricing: createJsonMap(AssetId, OraclePrice),\n perp_pricing: createJsonMap(MarketId, PerpPrice),\n rwa_pricing_config: createJsonMap(MarketId, RwaPriceConfig),\n});\n\nconst PricingEngineV0 = z.object({\n pricing_frequency_seconds: U32Schema,\n relaxed_pricing_frequency_seconds: U32Schema,\n oracle_pricing: createJsonMap(AssetId, OraclePrice),\n perp_pricing: createJsonMap(MarketId, PerpPrice),\n});\n\n/** Unwraps nested PricingEngine enum (V1 current, V0 legacy) */\nconst PricingEngine = z.union([\n z.object({ V1: PricingEngineV1 }).transform((d) => d.V1),\n z.object({ V0: PricingEngineV0 }).transform((d) => d.V0),\n]);\n\nconst LeverageTable = z.object({\n tiers: createJsonMap(\n z.string(),\n z.object({\n max_leverage: U16Schema,\n mmr: DecimalSchema,\n maintenance_amount: DecimalSchema,\n }),\n ),\n});\n\nconst MarginConfigV0 = z.object({\n perp_liquidation_config: PerpLiquidationConfig,\n perp_leverage_tables: createJsonMap(MarketId, LeverageTable),\n borrow_lend_risk_configs: createJsonMap(AssetId, BorrowLendRiskConfig),\n});\n\n/** Unwraps nested MarginConfig enum (only V0 exists today) */\nconst MarginConfig = z.object({ V0: MarginConfigV0 }).transform((d) => d.V0);\n\nconst GlobalConfig = z.object({\n max_orders_per_user: U16Schema,\n max_trigger_orders_per_user: U16Schema,\n max_orders_per_batch_msg: U16Schema,\n max_trigger_orders_to_execute_per_msg: U16Schema,\n min_notional_twap_value: DecimalSchema,\n min_notional_twap_value_per_order: DecimalSchema,\n twap_execution_interval_seconds: U64Schema,\n user_deposit_limits_per_asset: createJsonMap(AssetId, DecimalSchema),\n whitelisted_users_for_deposit: createJsonSet(Base58Address),\n pyth_lazer_trusted_signers: createJsonSet(BytesAsBase58Address),\n});\n\nconst LegacyGlobalConfigV0 = z.object({\n max_orders_per_user: U16Schema,\n max_trigger_orders_per_user: U16Schema,\n max_orders_per_batch_msg: U16Schema,\n max_trigger_orders_to_execute_per_msg: U16Schema,\n min_notional_twap_value: DecimalSchema,\n min_notional_twap_value_per_order: DecimalSchema,\n twap_execution_interval_seconds: U64Schema,\n user_deposit_limits_per_asset: createJsonMap(AssetId, DecimalSchema),\n whitelisted_users_for_deposit: createJsonSet(Base58Address),\n});\n\nconst AdminRegistry = z.object({\n protocol: Base58Address,\n funding: Base58Address,\n pricing: Base58Address,\n fee_tier: Base58Address,\n credits: Base58Address,\n referrals: Base58Address,\n});\n\nconst AssetInfo = z.object({\n id: AssetId,\n name: z.string(),\n token_id: z.string().nullable(),\n decimals: U8Schema,\n withdraw_fee: DecimalSchema,\n pyth_lazer_feed_id: z.number().nullable(),\n pyth_lazer_quote_feed_id: z.number().nullable(),\n});\n\nconst LegacyAssetInfoV0 = z.object({\n id: AssetId,\n name: z.string(),\n token_id: z.string().nullable(),\n decimals: U8Schema,\n withdraw_fee: DecimalSchema,\n});\n\nconst MarketInfo = z.object({\n id: MarketId,\n base_asset_id: AssetId,\n quote_asset_id: AssetId,\n name: z.string(),\n trading_mode: TradingMode,\n});\n\nconst LegacyMarketInfoV0 = z.object({\n id: MarketId,\n kind: z.enum(MARKET_KINDS),\n base_asset_id: AssetId,\n name: z.string(),\n trading_mode: TradingMode,\n});\n\nconst VaultWithdrawal = z.object({\n user: Base58Address,\n shares: DecimalSchema,\n timestamp: UnixTimestampMicros,\n});\n\nconst VaultInfoV0 = z.object({\n leader: Base58Address,\n name: z.string(),\n description: z.string(),\n deposit_asset_ids: z.array(AssetId),\n withdraw_asset_id: AssetId,\n deposit_limit: DecimalSchema,\n leader_minimum_holding_percentage: U8Schema,\n withdraw_lockup_period_hours: U8Schema,\n profit_share_percentage: U8Schema,\n withdrawal_fee_bps: U8Schema,\n total_shares: DecimalSchema,\n high_watermark: DecimalSchema,\n queued_withdrawals: z.array(VaultWithdrawal),\n whitelist_deposits: z.boolean(),\n whitelisted_depositors: z.array(Base58Address),\n});\n\nconst GlobalVaultConfig = z.object({\n leader_minimum_holding_percentage: U8Schema,\n creation_fee_usdc: DecimalSchema,\n min_deposit_value: DecimalSchema,\n});\n\nconst VaultRegistry = z.object({\n vaults: createJsonMap(Base58Address, VaultInfoV0),\n config: GlobalVaultConfig,\n depositor_state: createJsonMap(\n Base58Address,\n createJsonMap(Base58Address, DecimalSchema),\n ),\n});\n\nconst UsdcPnlPool = z.object({\n amount: DecimalSchema,\n trading_credits: DecimalSchema,\n orphaned_trading_credits: DecimalSchema,\n external_deposits: createJsonMap(Base58Address, DecimalSchema),\n token_holder: z.string(),\n});\n\nconst UsdcInsuranceFund = z.object({\n amount: DecimalSchema,\n external_deposits: createJsonMap(Base58Address, DecimalSchema),\n minimum_usdc_token_amount: DecimalSchema,\n token_holder: z.string(),\n});\n\nconst BorrowLendPool = z.object({\n asset_id: AssetId,\n is_active: z.boolean(),\n last_update_timestamp: UnixTimestampMicros,\n rate_config: BorrowLendRateConfig,\n deposit_limit: DecimalSchema,\n borrow_limit: DecimalSchema,\n max_utilization_rate: DecimalSchema,\n available_amount: DecimalSchema,\n borrowed_amount: DecimalSchema,\n cumulative_deposit_rate: DecimalSchema,\n cumulative_borrow_rate: DecimalSchema,\n accumulated_protocol_fees: DecimalSchema,\n unclaimed_protocol_fees: DecimalSchema,\n interest_fee_tenth_bps: U16Schema,\n});\n\nconst CrossAssets = z.object({\n usdc_pnl_pool: UsdcPnlPool,\n usdc_insurance_fund: UsdcInsuranceFund,\n borrow_lend_deposit_vault: z.string(),\n borrow_lend_pools: createJsonMap(AssetId, BorrowLendPool),\n});\n\nconst IsoAssets = z.object({\n usdc_deposit_vault: z.string(),\n usdc_insurance_fund: UsdcInsuranceFund,\n});\n\nconst PerpMarketConfig = z.object({\n min_tick_size: DecimalSchema,\n min_lot_size: DecimalSchema,\n max_oi_notional: DecimalSchema,\n impact_margin: DecimalSchema,\n max_orders_per_side: U16Schema,\n max_orders_per_user: U16Schema,\n max_trigger_orders_per_user: U16Schema,\n taker_fees_tenth_bps: z.array(I16Schema),\n maker_fees_tenth_bps: z.array(I16Schema),\n max_order_to_mark_price_deviation_ratio: DecimalSchema,\n max_trigger_to_comparison_price_deviation_ratio: DecimalSchema,\n max_order_to_trigger_price_deviation_ratio: DecimalSchema,\n});\n\nconst SpotMarketConfig = z.object({\n base_min_lot_size: DecimalSchema,\n quote_min_lot_size: DecimalSchema,\n max_orders_per_side: U16Schema,\n max_orders_per_user: U16Schema,\n max_trigger_orders_per_user: U16Schema,\n taker_fees_tenth_bps: z.array(I16Schema),\n maker_fees_tenth_bps: z.array(I16Schema),\n max_order_to_trigger_price_deviation_ratio: DecimalSchema,\n});\n\nconst DelegateContainer = z.object({\n delegator: Base58Address,\n expires_at: UnixTimestampMicros.nullable(),\n flags: U32Schema,\n});\n\n// Main schemas\nexport const Schemas = {\n DummyValue: z.number(),\n\n ExchangeInfoV3: z.object({\n global_config: GlobalConfig,\n global_vault_config: GlobalVaultConfig,\n admins: AdminRegistry,\n assets: createJsonMap(AssetId, AssetInfo),\n markets: createJsonMap(MarketId, MarketInfo),\n }),\n\n ExchangeInfoV2: z.object({\n global_config: GlobalConfig,\n admins: AdminRegistry,\n assets: createJsonMap(AssetId, AssetInfo),\n markets: createJsonMap(MarketId, LegacyMarketInfoV0),\n vaults: VaultRegistry,\n }),\n\n ExchangeInfoV1: z.object({\n global_config: LegacyGlobalConfigV0,\n admins: AdminRegistry,\n assets: createJsonMap(AssetId, LegacyAssetInfoV0),\n markets: createJsonMap(MarketId, LegacyMarketInfoV0),\n vaults: VaultRegistry,\n }),\n\n ExchangeAssetsV0: z.object({\n cross_assets: CrossAssets,\n iso_assets: createJsonMap(MarketId, IsoAssets),\n spot_collateral_vault: z.string(),\n treasury: z.string(),\n }),\n\n OrderbookL2: z.object({\n market_id: MarketId,\n bids: z.array(PriceLevelL2),\n asks: z.array(PriceLevelL2),\n }),\n\n UserAccount: UnversionedOrV1(\n z.object({\n account_variant: z.discriminatedUnion(\"type\", [\n z.object({\n type: z.literal(\"master\"),\n sub_account_indices: z.array(U8Schema),\n }),\n z.object({ type: z.literal(\"sub\") }),\n z.object({ type: z.literal(\"vault\") }),\n z.object({ type: z.literal(\"protocol_vault\") }),\n z.object({ type: z.literal(\"master_v1\"), sub_account_mask: U32Schema }),\n ]),\n address: Base58Address,\n fee_tier: FeeTier,\n fee_discount_bps: U16Schema,\n balances: Balances,\n rewards: createJsonMap(\n AssetId,\n createJsonMap(RewardVariant, RewardsInfo),\n ),\n perp_ledgers: createJsonMap(MarketId, PerpLedger),\n spot_ledgers: createJsonMap(MarketId, SpotLedger),\n orders_ledger: OrdersLedger,\n }),\n ),\n\n UserAccountConfigV0: z.object({\n delegates: createJsonMap(Base58Address, z.string()),\n }),\n\n Delegate: z.object({\n name: z.string(),\n address: Base58Address,\n container: DelegateContainer,\n }),\n\n RiskEngineV1: z.object({\n margin_config: MarginConfig,\n pricing_engine: PricingEngine,\n }),\n\n RiskEngineV0: z.object({\n margin_config: MarginConfigV0,\n pricing_engine: PricingEngineV0,\n }),\n\n PerpMarketV0: z.object({\n market_id: MarketId,\n trading_status: MarketTradingStatus,\n config: PerpMarketConfig,\n current_open_interest_lots: DecimalSchema,\n last_trade_price: DecimalSchema.nullable(),\n orderbook: z.object({\n bids: createJsonMap(z.string(), PriceLevel),\n asks: createJsonMap(z.string(), PriceLevel),\n }),\n trigger_nodes_store: TriggerNodesStore,\n twap_nodes_store: TwapNodesStore,\n }),\n\n PerpMarketConfig: PerpMarketConfig,\n\n SpotMarketV0: z.object({\n market_id: MarketId,\n trading_status: MarketTradingStatus,\n _base_asset_id: AssetId,\n _quote_asset_id: AssetId,\n config: SpotMarketConfig,\n last_trade_price: DecimalSchema.nullable(),\n orderbook: z.object({\n bids: createJsonMap(z.string(), PriceLevel),\n asks: createJsonMap(z.string(), PriceLevel),\n }),\n trigger_nodes_store: TriggerNodesStore,\n }),\n\n SpotMarketConfig: SpotMarketConfig,\n\n ExecutionIdsV0: z.object({\n last_order_id: OrderId,\n last_trigger_order_id: TriggerOrderId,\n last_trade_id: TradeId,\n }),\n AccountAddresses: z.object({\n addresses: z.array(Base58Address),\n total: z.number(),\n next_offset: z.number().nullable(),\n }),\n} as const;\n\n// Response schemas\nexport const ResponseSchemas = {\n DummyValue: StateResponseSchemas.StateValue(Schemas.DummyValue),\n ExchangeInfo: StateResponseSchemas.StateValue(\n VersionedV3(Schemas.ExchangeInfoV3),\n ),\n ExchangeAssets: StateResponseSchemas.StateValue(\n VersionedV0(Schemas.ExchangeAssetsV0),\n ),\n RiskEngine: StateResponseSchemas.StateValue(\n VersionedV1V0({\n V0: Schemas.RiskEngineV0,\n V1: Schemas.RiskEngineV1,\n }),\n ),\n ExecutionIds: StateResponseSchemas.StateValue(\n VersionedV0(Schemas.ExecutionIdsV0),\n ),\n OrderbookL2: createBaseResponse(\n z.object({\n market_id: MarketId,\n orderbook: Schemas.OrderbookL2,\n }),\n ),\n OrderbookL2Bulk: createBaseResponse(\n z.object({\n found: createJsonMap(MarketId, Schemas.OrderbookL2),\n not_found: z.array(MarketId),\n }),\n ),\n UserAccount: createBaseResponse(\n z.object({\n address: Base58Address,\n account: Schemas.UserAccount,\n }),\n ),\n Delegate: createBaseResponse(Schemas.Delegate),\n Delegates: createBaseResponse(\n z.object({\n delegator: Base58Address,\n delegates: z.array(Schemas.Delegate),\n }),\n ),\n UserAccountConfig: StateResponseSchemas.StateMapElement(\n Base58Address,\n VersionedV0(Schemas.UserAccountConfigV0),\n ),\n UserAccountBulk: createBaseResponse(\n z.object({\n found: createJsonMap(Base58Address, Schemas.UserAccount),\n not_found: z.array(Base58Address),\n }),\n ),\n PerpMarket: createBaseResponse(\n z.object({\n market_id: MarketId,\n market: VersionedV0(Schemas.PerpMarketV0),\n }),\n ),\n PerpMarketConfigs: createBaseResponse(\n createJsonMap(MarketId, Schemas.PerpMarketConfig),\n ),\n SpotMarket: createBaseResponse(\n z.object({\n market_id: MarketId,\n market: VersionedV0(Schemas.SpotMarketV0),\n }),\n ),\n SpotMarketConfigs: createBaseResponse(\n createJsonMap(MarketId, Schemas.SpotMarketConfig),\n ),\n AccountAddresses: createBaseResponse(Schemas.AccountAddresses),\n ChainData: StateResponseSchemas.RollupSchema(\n z.object({\n chain_data: z.object({\n chain_id: z.number(),\n chain_name: z.string(),\n }),\n }),\n ),\n} as const;\n\n// Internal scehma types\ntype UserAccountConfigV0 = z.infer<typeof Schemas.UserAccountConfigV0>;\ntype PerpMarketV0 = z.infer<typeof Schemas.PerpMarketV0>;\ntype SpotMarketV0 = z.infer<typeof Schemas.SpotMarketV0>;\ntype RiskEngineV1 = z.infer<typeof Schemas.RiskEngineV1>;\ntype RiskEngineV0 = z.infer<typeof Schemas.RiskEngineV0>;\ntype ExchangeInfoV3 = z.infer<typeof Schemas.ExchangeInfoV3>;\ntype ExchangeInfoV2 = z.infer<typeof Schemas.ExchangeInfoV2>;\ntype ExchangeAssetsV0 = z.infer<typeof Schemas.ExchangeAssetsV0>;\ntype ExecutionIdsV0 = z.infer<typeof Schemas.ExecutionIdsV0>;\n\n// Schema types\nexport type DummyValue = z.infer<typeof Schemas.DummyValue>;\nexport type Order = z.infer<typeof Order>;\nexport type OrderbookL2 = z.infer<typeof Schemas.OrderbookL2>;\nexport type PriceLevelL2 = z.infer<typeof PriceLevelL2>;\nexport type UserAccount = z.infer<typeof Schemas.UserAccount>;\nexport type PerpMarketConfig = z.infer<typeof Schemas.PerpMarketConfig>;\nexport type SpotMarketConfig = z.infer<typeof Schemas.SpotMarketConfig>;\nexport type VersionedUserAccountConfig = {\n version: \"V0\";\n data: UserAccountConfigV0;\n};\nexport type VersionedExchangeAssets = { version: \"V0\"; data: ExchangeAssetsV0 };\nexport type VersionedPerpMarket = { version: \"V0\"; data: PerpMarketV0 };\nexport type VersionedSpotMarket = { version: \"V0\"; data: SpotMarketV0 };\nexport type VersionedExchangeInfo =\n | { version: \"V3\"; data: ExchangeInfoV3 }\n | { version: \"V2\"; data: ExchangeInfoV2 };\nexport type AccountAddresses = z.infer<typeof Schemas.AccountAddresses>;\nexport type VersionedExecutionIds = { version: \"V0\"; data: ExecutionIdsV0 };\nexport type VersionedRiskEngine =\n | { version: \"V1\"; data: RiskEngineV1 }\n | { version: \"V0\"; data: RiskEngineV0 };\nexport type PricingEngine = z.infer<typeof PricingEngine>;\nexport type BorrowLendPool = z.infer<typeof BorrowLendPool>;\nexport type Delegate = z.infer<typeof Schemas.Delegate>;\nexport type Delegates = z.infer<typeof ResponseSchemas.Delegates>;\n",
|
|
23
24
|
"import { z } from \"zod\";\nimport { Base58Address, DecimalSchema, MarketId, U16Schema } from \".\";\n\nexport const WasmResponseSchemas = {\n SimulationResultSchema: z.object({\n current: DecimalSchema,\n updated: DecimalSchema,\n }),\n PositionAdditionalMetadataSchema: z.map(\n // since we use hashmap which serializes to map\n MarketId,\n z.object({\n projected_funding_payment: DecimalSchema,\n unrealized_pnl: DecimalSchema,\n liquidation_price: DecimalSchema,\n liquidation_risk_percentage: DecimalSchema,\n max_leverage_to_use: U16Schema,\n }),\n ),\n BorrowLendMarketAdditionalMetadataSchema: z.object({\n utilization_rate: DecimalSchema,\n current_deposit_rate: DecimalSchema,\n current_borrow_rate: DecimalSchema,\n }),\n AccountSummaryBatchSchema: z.array(\n z.object({\n account_variant: z.string().optional(),\n address: Base58Address,\n equity: DecimalSchema,\n unrealized_pnl: DecimalSchema,\n available_initial_margin: DecimalSchema,\n available_maintenance_margin: DecimalSchema,\n leverage: DecimalSchema,\n }),\n ),\n MarginBalanceSummarySchema: z.object({\n margin_balance: DecimalSchema,\n assets: DecimalSchema,\n liabilities: DecimalSchema,\n upnl: DecimalSchema,\n }),\n};\n\nexport type PositionAdditionalMetadata = z.infer<\n typeof WasmResponseSchemas.PositionAdditionalMetadataSchema\n>;\n",
|
|
24
25
|
"import type { Signer } from \"@sovereign-sdk/signers\";\nimport type { Address, PublicKey } from \"../types\";\nimport { hexToBase58 } from \"../utils\";\n\nexport abstract class Wallet {\n // For now this is same as pubkey but b58 encoded\n public address: Address;\n public publicKey: PublicKey;\n\n constructor(publicKey: PublicKey) {\n this.publicKey = publicKey;\n this.address = hexToBase58(this.publicKey);\n }\n\n // Abstract method to be implemented by subclasses\n public abstract getSigner(): Signer;\n}\n",
|
|
25
26
|
"import type { Signer } from \"@sovereign-sdk/signers\";\nimport type { PublicKey } from \"../types\";\nimport { bytesToHex } from \"../utils\";\nimport { Wallet } from \"./wallet\";\n\n/**\n * Type guard to check if a signer is a Ledger Solana signer.\n * This allows checking the signer type without importing Ledger-specific dependencies.\n */\nexport function isLedgerSolanaSigner(\n signer: Signer,\n): signer is Signer & { readonly __ledgerSolanaSigner: true } {\n return (\n \"__ledgerSolanaSigner\" in signer && signer.__ledgerSolanaSigner === true\n );\n}\n\n/**\n * LedgerSolanaSigner interface matching the @sovereign-sdk/signers implementation.\n * This allows us to work with the Ledger signer without directly importing\n * the browser-specific or node-specific implementations.\n */\nexport interface LedgerSolanaSigner extends Signer {\n readonly __ledgerSolanaSigner: true;\n disconnect(): Promise<void>;\n}\n\n/**\n * A Wallet implementation that uses a Ledger hardware wallet for signing.\n *\n * This wallet wraps a LedgerSolanaSigner from @sovereign-sdk/signers and is\n * compatible with the Bullet SDK's Client class.\n *\n * @example\n * ```typescript\n * // Browser environment - use default export from @sovereign-sdk/signers/ledger-solana\n * import { LedgerSolanaSigner } from \"@sovereign-sdk/signers/ledger-solana\";\n *\n * const ledgerSigner = new LedgerSolanaSigner();\n * const wallet = await LedgerWallet.fromSigner(ledgerSigner);\n *\n * // Create client with Ledger wallet - will auto-detect and use \"solana\" authenticator\n * const client = await Client.fromNetwork(\"mainnet\", wallet);\n * ```\n *\n * @example\n * ```typescript\n * // Node.js environment - use node export\n * import { LedgerSolanaSigner } from \"@sovereign-sdk/signers/ledger-solana/node\";\n *\n * const ledgerSigner = new LedgerSolanaSigner();\n * const wallet = await LedgerWallet.fromSigner(ledgerSigner);\n * ```\n */\nexport class LedgerWallet extends Wallet {\n private ledgerSigner: LedgerSolanaSigner;\n\n /**\n * @internal\n * Use LedgerWallet.fromSigner() to create instances.\n */\n private constructor(publicKey: PublicKey, ledgerSigner: LedgerSolanaSigner) {\n super(publicKey);\n this.ledgerSigner = ledgerSigner;\n }\n\n /**\n * Creates a LedgerWallet from a LedgerSolanaSigner instance.\n *\n * This is an async factory method because getting the public key from\n * the Ledger device requires an async operation.\n *\n * @param ledgerSigner - A LedgerSolanaSigner instance from @sovereign-sdk/signers\n * @returns A Promise that resolves to a LedgerWallet instance\n *\n * @example\n * ```typescript\n * import { LedgerSolanaSigner } from \"@sovereign-sdk/signers/ledger-solana\";\n *\n * const signer = new LedgerSolanaSigner(\"44'/501'/0'/0'\");\n * const wallet = await LedgerWallet.fromSigner(signer);\n * ```\n */\n public static async fromSigner(\n ledgerSigner: LedgerSolanaSigner,\n ): Promise<LedgerWallet> {\n // Get public key from Ledger device\n const publicKeyBytes = await ledgerSigner.publicKey();\n\n if (publicKeyBytes.length !== 32) {\n throw new Error(\n `Invalid public key length from Ledger: ${publicKeyBytes.length} bytes. Expected 32 bytes.`,\n );\n }\n\n // Convert to hex string (without 0x prefix) for Wallet base class\n const publicKey = bytesToHex(publicKeyBytes).replace(/^0x/, \"\");\n\n return new LedgerWallet(publicKey, ledgerSigner);\n }\n\n /**\n * Signs a message using the Ledger device.\n *\n * @param message - The message to sign as a Uint8Array\n * @returns A Promise that resolves to the signature as a Uint8Array\n */\n public async signMessage(message: Uint8Array): Promise<Uint8Array> {\n return this.ledgerSigner.sign(message);\n }\n\n /**\n * Returns the Ledger signer for use with the Sovereign SDK rollup.\n *\n * The returned signer has the `__ledgerSolanaSigner` marker which allows\n * the SDK to auto-detect that it should use the \"solana\" authenticator\n * (with preamble) when `authenticator: \"solanaAuto\"` is specified.\n */\n public getSigner(): LedgerSolanaSigner {\n return this.ledgerSigner;\n }\n\n /**\n * Disconnects from the Ledger device.\n *\n * Call this when you're done using the wallet to properly close\n * the USB/HID transport connection.\n */\n public async disconnect(): Promise<void> {\n await this.ledgerSigner.disconnect();\n }\n}\n",
|
|
26
27
|
"import * as WasmLoader from \"./bullet-wasm/loader\";\n\nconst { BulletWasm, initialize, MarginMode } = WasmLoader;\n\nexport { BulletWasm, initialize, MarginMode };\nexport * from \"./client\";\nexport * from \"./constants\";\nexport * from \"./error\";\nexport * from \"./orderbook\";\nexport * from \"./types\";\nexport * from \"./utils\";\nexport { Wallet } from \"./wallet\";\nexport type { LedgerSolanaSigner } from \"./wallet/ledgerWallet\";\nexport { isLedgerSolanaSigner, LedgerWallet } from \"./wallet/ledgerWallet\";\nexport * from \"./zod-types/rest\";\nexport * from \"./zod-types/wasm\";\nexport * from \"./zod-types/ws\";\n"
|
|
27
28
|
],
|
|
28
|
-
"mappings": "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",
|
|
29
|
-
"debugId": "
|
|
29
|
+
"mappings": "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",
|
|
30
|
+
"debugId": "045195ABCB92FAC864756E2164756E21",
|
|
30
31
|
"names": []
|
|
31
32
|
}
|