@0xobelisk/sui-client 1.0.7 → 1.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../node_modules/.pnpm/ws@8.18.0/node_modules/ws/lib/stream.js","../../../node_modules/.pnpm/ws@8.18.0/node_modules/ws/lib/constants.js","../../../node_modules/.pnpm/ws@8.18.0/node_modules/ws/lib/buffer-util.js","../../../node_modules/.pnpm/ws@8.18.0/node_modules/ws/lib/limiter.js","../../../node_modules/.pnpm/ws@8.18.0/node_modules/ws/lib/permessage-deflate.js","../../../node_modules/.pnpm/ws@8.18.0/node_modules/ws/lib/validation.js","../../../node_modules/.pnpm/ws@8.18.0/node_modules/ws/lib/receiver.js","../../../node_modules/.pnpm/ws@8.18.0/node_modules/ws/lib/sender.js","../../../node_modules/.pnpm/ws@8.18.0/node_modules/ws/lib/event-target.js","../../../node_modules/.pnpm/ws@8.18.0/node_modules/ws/lib/extension.js","../../../node_modules/.pnpm/ws@8.18.0/node_modules/ws/lib/websocket.js","../../../node_modules/.pnpm/ws@8.18.0/node_modules/ws/lib/subprotocol.js","../../../node_modules/.pnpm/ws@8.18.0/node_modules/ws/lib/websocket-server.js","../src/index.ts","../src/dubhe.ts","../src/libs/suiAccountManager/index.ts","../src/libs/suiAccountManager/keypair.ts","../src/libs/suiAccountManager/util.ts","../src/libs/suiAccountManager/crypto.ts","../src/libs/suiTxBuilder/index.ts","../src/libs/suiTxBuilder/util.ts","../src/libs/suiInteractor/suiInteractor.ts","../src/libs/suiModel/suiOwnedObject.ts","../src/libs/suiModel/suiSharedObject.ts","../src/libs/suiInteractor/util.ts","../src/libs/suiInteractor/defaultConfig.ts","../src/libs/suiContractFactory/index.ts","../src/utils/index.ts","../src/errors/index.ts","../src/libs/suiIndexerClient/index.ts","../../../node_modules/.pnpm/ws@8.18.0/node_modules/ws/wrapper.mjs","../src/libs/http/errors.ts","../src/libs/http/http.ts","../src/libs/multiSig/client.ts","../src/libs/multiSig/publickey.ts","../src/metadata/index.ts"],"sourcesContent":["'use strict';\n\nconst { Duplex } = require('stream');\n\n/**\n * Emits the `'close'` event on a stream.\n *\n * @param {Duplex} stream The stream.\n * @private\n */\nfunction emitClose(stream) {\n stream.emit('close');\n}\n\n/**\n * The listener of the `'end'` event.\n *\n * @private\n */\nfunction duplexOnEnd() {\n if (!this.destroyed && this._writableState.finished) {\n this.destroy();\n }\n}\n\n/**\n * The listener of the `'error'` event.\n *\n * @param {Error} err The error\n * @private\n */\nfunction duplexOnError(err) {\n this.removeListener('error', duplexOnError);\n this.destroy();\n if (this.listenerCount('error') === 0) {\n // Do not suppress the throwing behavior.\n this.emit('error', err);\n }\n}\n\n/**\n * Wraps a `WebSocket` in a duplex stream.\n *\n * @param {WebSocket} ws The `WebSocket` to wrap\n * @param {Object} [options] The options for the `Duplex` constructor\n * @return {Duplex} The duplex stream\n * @public\n */\nfunction createWebSocketStream(ws, options) {\n let terminateOnDestroy = true;\n\n const duplex = new Duplex({\n ...options,\n autoDestroy: false,\n emitClose: false,\n objectMode: false,\n writableObjectMode: false\n });\n\n ws.on('message', function message(msg, isBinary) {\n const data =\n !isBinary && duplex._readableState.objectMode ? msg.toString() : msg;\n\n if (!duplex.push(data)) ws.pause();\n });\n\n ws.once('error', function error(err) {\n if (duplex.destroyed) return;\n\n // Prevent `ws.terminate()` from being called by `duplex._destroy()`.\n //\n // - If the `'error'` event is emitted before the `'open'` event, then\n // `ws.terminate()` is a noop as no socket is assigned.\n // - Otherwise, the error is re-emitted by the listener of the `'error'`\n // event of the `Receiver` object. The listener already closes the\n // connection by calling `ws.close()`. This allows a close frame to be\n // sent to the other peer. If `ws.terminate()` is called right after this,\n // then the close frame might not be sent.\n terminateOnDestroy = false;\n duplex.destroy(err);\n });\n\n ws.once('close', function close() {\n if (duplex.destroyed) return;\n\n duplex.push(null);\n });\n\n duplex._destroy = function (err, callback) {\n if (ws.readyState === ws.CLOSED) {\n callback(err);\n process.nextTick(emitClose, duplex);\n return;\n }\n\n let called = false;\n\n ws.once('error', function error(err) {\n called = true;\n callback(err);\n });\n\n ws.once('close', function close() {\n if (!called) callback(err);\n process.nextTick(emitClose, duplex);\n });\n\n if (terminateOnDestroy) ws.terminate();\n };\n\n duplex._final = function (callback) {\n if (ws.readyState === ws.CONNECTING) {\n ws.once('open', function open() {\n duplex._final(callback);\n });\n return;\n }\n\n // If the value of the `_socket` property is `null` it means that `ws` is a\n // client websocket and the handshake failed. In fact, when this happens, a\n // socket is never assigned to the websocket. Wait for the `'error'` event\n // that will be emitted by the websocket.\n if (ws._socket === null) return;\n\n if (ws._socket._writableState.finished) {\n callback();\n if (duplex._readableState.endEmitted) duplex.destroy();\n } else {\n ws._socket.once('finish', function finish() {\n // `duplex` is not destroyed here because the `'end'` event will be\n // emitted on `duplex` after this `'finish'` event. The EOF signaling\n // `null` chunk is, in fact, pushed when the websocket emits `'close'`.\n callback();\n });\n ws.close();\n }\n };\n\n duplex._read = function () {\n if (ws.isPaused) ws.resume();\n };\n\n duplex._write = function (chunk, encoding, callback) {\n if (ws.readyState === ws.CONNECTING) {\n ws.once('open', function open() {\n duplex._write(chunk, encoding, callback);\n });\n return;\n }\n\n ws.send(chunk, callback);\n };\n\n duplex.on('end', duplexOnEnd);\n duplex.on('error', duplexOnError);\n return duplex;\n}\n\nmodule.exports = createWebSocketStream;\n","'use strict';\n\nconst BINARY_TYPES = ['nodebuffer', 'arraybuffer', 'fragments'];\nconst hasBlob = typeof Blob !== 'undefined';\n\nif (hasBlob) BINARY_TYPES.push('blob');\n\nmodule.exports = {\n BINARY_TYPES,\n EMPTY_BUFFER: Buffer.alloc(0),\n GUID: '258EAFA5-E914-47DA-95CA-C5AB0DC85B11',\n hasBlob,\n kForOnEventAttribute: Symbol('kIsForOnEventAttribute'),\n kListener: Symbol('kListener'),\n kStatusCode: Symbol('status-code'),\n kWebSocket: Symbol('websocket'),\n NOOP: () => {}\n};\n","'use strict';\n\nconst { EMPTY_BUFFER } = require('./constants');\n\nconst FastBuffer = Buffer[Symbol.species];\n\n/**\n * Merges an array of buffers into a new buffer.\n *\n * @param {Buffer[]} list The array of buffers to concat\n * @param {Number} totalLength The total length of buffers in the list\n * @return {Buffer} The resulting buffer\n * @public\n */\nfunction concat(list, totalLength) {\n if (list.length === 0) return EMPTY_BUFFER;\n if (list.length === 1) return list[0];\n\n const target = Buffer.allocUnsafe(totalLength);\n let offset = 0;\n\n for (let i = 0; i < list.length; i++) {\n const buf = list[i];\n target.set(buf, offset);\n offset += buf.length;\n }\n\n if (offset < totalLength) {\n return new FastBuffer(target.buffer, target.byteOffset, offset);\n }\n\n return target;\n}\n\n/**\n * Masks a buffer using the given mask.\n *\n * @param {Buffer} source The buffer to mask\n * @param {Buffer} mask The mask to use\n * @param {Buffer} output The buffer where to store the result\n * @param {Number} offset The offset at which to start writing\n * @param {Number} length The number of bytes to mask.\n * @public\n */\nfunction _mask(source, mask, output, offset, length) {\n for (let i = 0; i < length; i++) {\n output[offset + i] = source[i] ^ mask[i & 3];\n }\n}\n\n/**\n * Unmasks a buffer using the given mask.\n *\n * @param {Buffer} buffer The buffer to unmask\n * @param {Buffer} mask The mask to use\n * @public\n */\nfunction _unmask(buffer, mask) {\n for (let i = 0; i < buffer.length; i++) {\n buffer[i] ^= mask[i & 3];\n }\n}\n\n/**\n * Converts a buffer to an `ArrayBuffer`.\n *\n * @param {Buffer} buf The buffer to convert\n * @return {ArrayBuffer} Converted buffer\n * @public\n */\nfunction toArrayBuffer(buf) {\n if (buf.length === buf.buffer.byteLength) {\n return buf.buffer;\n }\n\n return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.length);\n}\n\n/**\n * Converts `data` to a `Buffer`.\n *\n * @param {*} data The data to convert\n * @return {Buffer} The buffer\n * @throws {TypeError}\n * @public\n */\nfunction toBuffer(data) {\n toBuffer.readOnly = true;\n\n if (Buffer.isBuffer(data)) return data;\n\n let buf;\n\n if (data instanceof ArrayBuffer) {\n buf = new FastBuffer(data);\n } else if (ArrayBuffer.isView(data)) {\n buf = new FastBuffer(data.buffer, data.byteOffset, data.byteLength);\n } else {\n buf = Buffer.from(data);\n toBuffer.readOnly = false;\n }\n\n return buf;\n}\n\nmodule.exports = {\n concat,\n mask: _mask,\n toArrayBuffer,\n toBuffer,\n unmask: _unmask\n};\n\n/* istanbul ignore else */\nif (!process.env.WS_NO_BUFFER_UTIL) {\n try {\n const bufferUtil = require('bufferutil');\n\n module.exports.mask = function (source, mask, output, offset, length) {\n if (length < 48) _mask(source, mask, output, offset, length);\n else bufferUtil.mask(source, mask, output, offset, length);\n };\n\n module.exports.unmask = function (buffer, mask) {\n if (buffer.length < 32) _unmask(buffer, mask);\n else bufferUtil.unmask(buffer, mask);\n };\n } catch (e) {\n // Continue regardless of the error.\n }\n}\n","'use strict';\n\nconst kDone = Symbol('kDone');\nconst kRun = Symbol('kRun');\n\n/**\n * A very simple job queue with adjustable concurrency. Adapted from\n * https://github.com/STRML/async-limiter\n */\nclass Limiter {\n /**\n * Creates a new `Limiter`.\n *\n * @param {Number} [concurrency=Infinity] The maximum number of jobs allowed\n * to run concurrently\n */\n constructor(concurrency) {\n this[kDone] = () => {\n this.pending--;\n this[kRun]();\n };\n this.concurrency = concurrency || Infinity;\n this.jobs = [];\n this.pending = 0;\n }\n\n /**\n * Adds a job to the queue.\n *\n * @param {Function} job The job to run\n * @public\n */\n add(job) {\n this.jobs.push(job);\n this[kRun]();\n }\n\n /**\n * Removes a job from the queue and runs it if possible.\n *\n * @private\n */\n [kRun]() {\n if (this.pending === this.concurrency) return;\n\n if (this.jobs.length) {\n const job = this.jobs.shift();\n\n this.pending++;\n job(this[kDone]);\n }\n }\n}\n\nmodule.exports = Limiter;\n","'use strict';\n\nconst zlib = require('zlib');\n\nconst bufferUtil = require('./buffer-util');\nconst Limiter = require('./limiter');\nconst { kStatusCode } = require('./constants');\n\nconst FastBuffer = Buffer[Symbol.species];\nconst TRAILER = Buffer.from([0x00, 0x00, 0xff, 0xff]);\nconst kPerMessageDeflate = Symbol('permessage-deflate');\nconst kTotalLength = Symbol('total-length');\nconst kCallback = Symbol('callback');\nconst kBuffers = Symbol('buffers');\nconst kError = Symbol('error');\n\n//\n// We limit zlib concurrency, which prevents severe memory fragmentation\n// as documented in https://github.com/nodejs/node/issues/8871#issuecomment-250915913\n// and https://github.com/websockets/ws/issues/1202\n//\n// Intentionally global; it's the global thread pool that's an issue.\n//\nlet zlibLimiter;\n\n/**\n * permessage-deflate implementation.\n */\nclass PerMessageDeflate {\n /**\n * Creates a PerMessageDeflate instance.\n *\n * @param {Object} [options] Configuration options\n * @param {(Boolean|Number)} [options.clientMaxWindowBits] Advertise support\n * for, or request, a custom client window size\n * @param {Boolean} [options.clientNoContextTakeover=false] Advertise/\n * acknowledge disabling of client context takeover\n * @param {Number} [options.concurrencyLimit=10] The number of concurrent\n * calls to zlib\n * @param {(Boolean|Number)} [options.serverMaxWindowBits] Request/confirm the\n * use of a custom server window size\n * @param {Boolean} [options.serverNoContextTakeover=false] Request/accept\n * disabling of server context takeover\n * @param {Number} [options.threshold=1024] Size (in bytes) below which\n * messages should not be compressed if context takeover is disabled\n * @param {Object} [options.zlibDeflateOptions] Options to pass to zlib on\n * deflate\n * @param {Object} [options.zlibInflateOptions] Options to pass to zlib on\n * inflate\n * @param {Boolean} [isServer=false] Create the instance in either server or\n * client mode\n * @param {Number} [maxPayload=0] The maximum allowed message length\n */\n constructor(options, isServer, maxPayload) {\n this._maxPayload = maxPayload | 0;\n this._options = options || {};\n this._threshold =\n this._options.threshold !== undefined ? this._options.threshold : 1024;\n this._isServer = !!isServer;\n this._deflate = null;\n this._inflate = null;\n\n this.params = null;\n\n if (!zlibLimiter) {\n const concurrency =\n this._options.concurrencyLimit !== undefined\n ? this._options.concurrencyLimit\n : 10;\n zlibLimiter = new Limiter(concurrency);\n }\n }\n\n /**\n * @type {String}\n */\n static get extensionName() {\n return 'permessage-deflate';\n }\n\n /**\n * Create an extension negotiation offer.\n *\n * @return {Object} Extension parameters\n * @public\n */\n offer() {\n const params = {};\n\n if (this._options.serverNoContextTakeover) {\n params.server_no_context_takeover = true;\n }\n if (this._options.clientNoContextTakeover) {\n params.client_no_context_takeover = true;\n }\n if (this._options.serverMaxWindowBits) {\n params.server_max_window_bits = this._options.serverMaxWindowBits;\n }\n if (this._options.clientMaxWindowBits) {\n params.client_max_window_bits = this._options.clientMaxWindowBits;\n } else if (this._options.clientMaxWindowBits == null) {\n params.client_max_window_bits = true;\n }\n\n return params;\n }\n\n /**\n * Accept an extension negotiation offer/response.\n *\n * @param {Array} configurations The extension negotiation offers/reponse\n * @return {Object} Accepted configuration\n * @public\n */\n accept(configurations) {\n configurations = this.normalizeParams(configurations);\n\n this.params = this._isServer\n ? this.acceptAsServer(configurations)\n : this.acceptAsClient(configurations);\n\n return this.params;\n }\n\n /**\n * Releases all resources used by the extension.\n *\n * @public\n */\n cleanup() {\n if (this._inflate) {\n this._inflate.close();\n this._inflate = null;\n }\n\n if (this._deflate) {\n const callback = this._deflate[kCallback];\n\n this._deflate.close();\n this._deflate = null;\n\n if (callback) {\n callback(\n new Error(\n 'The deflate stream was closed while data was being processed'\n )\n );\n }\n }\n }\n\n /**\n * Accept an extension negotiation offer.\n *\n * @param {Array} offers The extension negotiation offers\n * @return {Object} Accepted configuration\n * @private\n */\n acceptAsServer(offers) {\n const opts = this._options;\n const accepted = offers.find((params) => {\n if (\n (opts.serverNoContextTakeover === false &&\n params.server_no_context_takeover) ||\n (params.server_max_window_bits &&\n (opts.serverMaxWindowBits === false ||\n (typeof opts.serverMaxWindowBits === 'number' &&\n opts.serverMaxWindowBits > params.server_max_window_bits))) ||\n (typeof opts.clientMaxWindowBits === 'number' &&\n !params.client_max_window_bits)\n ) {\n return false;\n }\n\n return true;\n });\n\n if (!accepted) {\n throw new Error('None of the extension offers can be accepted');\n }\n\n if (opts.serverNoContextTakeover) {\n accepted.server_no_context_takeover = true;\n }\n if (opts.clientNoContextTakeover) {\n accepted.client_no_context_takeover = true;\n }\n if (typeof opts.serverMaxWindowBits === 'number') {\n accepted.server_max_window_bits = opts.serverMaxWindowBits;\n }\n if (typeof opts.clientMaxWindowBits === 'number') {\n accepted.client_max_window_bits = opts.clientMaxWindowBits;\n } else if (\n accepted.client_max_window_bits === true ||\n opts.clientMaxWindowBits === false\n ) {\n delete accepted.client_max_window_bits;\n }\n\n return accepted;\n }\n\n /**\n * Accept the extension negotiation response.\n *\n * @param {Array} response The extension negotiation response\n * @return {Object} Accepted configuration\n * @private\n */\n acceptAsClient(response) {\n const params = response[0];\n\n if (\n this._options.clientNoContextTakeover === false &&\n params.client_no_context_takeover\n ) {\n throw new Error('Unexpected parameter \"client_no_context_takeover\"');\n }\n\n if (!params.client_max_window_bits) {\n if (typeof this._options.clientMaxWindowBits === 'number') {\n params.client_max_window_bits = this._options.clientMaxWindowBits;\n }\n } else if (\n this._options.clientMaxWindowBits === false ||\n (typeof this._options.clientMaxWindowBits === 'number' &&\n params.client_max_window_bits > this._options.clientMaxWindowBits)\n ) {\n throw new Error(\n 'Unexpected or invalid parameter \"client_max_window_bits\"'\n );\n }\n\n return params;\n }\n\n /**\n * Normalize parameters.\n *\n * @param {Array} configurations The extension negotiation offers/reponse\n * @return {Array} The offers/response with normalized parameters\n * @private\n */\n normalizeParams(configurations) {\n configurations.forEach((params) => {\n Object.keys(params).forEach((key) => {\n let value = params[key];\n\n if (value.length > 1) {\n throw new Error(`Parameter \"${key}\" must have only a single value`);\n }\n\n value = value[0];\n\n if (key === 'client_max_window_bits') {\n if (value !== true) {\n const num = +value;\n if (!Number.isInteger(num) || num < 8 || num > 15) {\n throw new TypeError(\n `Invalid value for parameter \"${key}\": ${value}`\n );\n }\n value = num;\n } else if (!this._isServer) {\n throw new TypeError(\n `Invalid value for parameter \"${key}\": ${value}`\n );\n }\n } else if (key === 'server_max_window_bits') {\n const num = +value;\n if (!Number.isInteger(num) || num < 8 || num > 15) {\n throw new TypeError(\n `Invalid value for parameter \"${key}\": ${value}`\n );\n }\n value = num;\n } else if (\n key === 'client_no_context_takeover' ||\n key === 'server_no_context_takeover'\n ) {\n if (value !== true) {\n throw new TypeError(\n `Invalid value for parameter \"${key}\": ${value}`\n );\n }\n } else {\n throw new Error(`Unknown parameter \"${key}\"`);\n }\n\n params[key] = value;\n });\n });\n\n return configurations;\n }\n\n /**\n * Decompress data. Concurrency limited.\n *\n * @param {Buffer} data Compressed data\n * @param {Boolean} fin Specifies whether or not this is the last fragment\n * @param {Function} callback Callback\n * @public\n */\n decompress(data, fin, callback) {\n zlibLimiter.add((done) => {\n this._decompress(data, fin, (err, result) => {\n done();\n callback(err, result);\n });\n });\n }\n\n /**\n * Compress data. Concurrency limited.\n *\n * @param {(Buffer|String)} data Data to compress\n * @param {Boolean} fin Specifies whether or not this is the last fragment\n * @param {Function} callback Callback\n * @public\n */\n compress(data, fin, callback) {\n zlibLimiter.add((done) => {\n this._compress(data, fin, (err, result) => {\n done();\n callback(err, result);\n });\n });\n }\n\n /**\n * Decompress data.\n *\n * @param {Buffer} data Compressed data\n * @param {Boolean} fin Specifies whether or not this is the last fragment\n * @param {Function} callback Callback\n * @private\n */\n _decompress(data, fin, callback) {\n const endpoint = this._isServer ? 'client' : 'server';\n\n if (!this._inflate) {\n const key = `${endpoint}_max_window_bits`;\n const windowBits =\n typeof this.params[key] !== 'number'\n ? zlib.Z_DEFAULT_WINDOWBITS\n : this.params[key];\n\n this._inflate = zlib.createInflateRaw({\n ...this._options.zlibInflateOptions,\n windowBits\n });\n this._inflate[kPerMessageDeflate] = this;\n this._inflate[kTotalLength] = 0;\n this._inflate[kBuffers] = [];\n this._inflate.on('error', inflateOnError);\n this._inflate.on('data', inflateOnData);\n }\n\n this._inflate[kCallback] = callback;\n\n this._inflate.write(data);\n if (fin) this._inflate.write(TRAILER);\n\n this._inflate.flush(() => {\n const err = this._inflate[kError];\n\n if (err) {\n this._inflate.close();\n this._inflate = null;\n callback(err);\n return;\n }\n\n const data = bufferUtil.concat(\n this._inflate[kBuffers],\n this._inflate[kTotalLength]\n );\n\n if (this._inflate._readableState.endEmitted) {\n this._inflate.close();\n this._inflate = null;\n } else {\n this._inflate[kTotalLength] = 0;\n this._inflate[kBuffers] = [];\n\n if (fin && this.params[`${endpoint}_no_context_takeover`]) {\n this._inflate.reset();\n }\n }\n\n callback(null, data);\n });\n }\n\n /**\n * Compress data.\n *\n * @param {(Buffer|String)} data Data to compress\n * @param {Boolean} fin Specifies whether or not this is the last fragment\n * @param {Function} callback Callback\n * @private\n */\n _compress(data, fin, callback) {\n const endpoint = this._isServer ? 'server' : 'client';\n\n if (!this._deflate) {\n const key = `${endpoint}_max_window_bits`;\n const windowBits =\n typeof this.params[key] !== 'number'\n ? zlib.Z_DEFAULT_WINDOWBITS\n : this.params[key];\n\n this._deflate = zlib.createDeflateRaw({\n ...this._options.zlibDeflateOptions,\n windowBits\n });\n\n this._deflate[kTotalLength] = 0;\n this._deflate[kBuffers] = [];\n\n this._deflate.on('data', deflateOnData);\n }\n\n this._deflate[kCallback] = callback;\n\n this._deflate.write(data);\n this._deflate.flush(zlib.Z_SYNC_FLUSH, () => {\n if (!this._deflate) {\n //\n // The deflate stream was closed while data was being processed.\n //\n return;\n }\n\n let data = bufferUtil.concat(\n this._deflate[kBuffers],\n this._deflate[kTotalLength]\n );\n\n if (fin) {\n data = new FastBuffer(data.buffer, data.byteOffset, data.length - 4);\n }\n\n //\n // Ensure that the callback will not be called again in\n // `PerMessageDeflate#cleanup()`.\n //\n this._deflate[kCallback] = null;\n\n this._deflate[kTotalLength] = 0;\n this._deflate[kBuffers] = [];\n\n if (fin && this.params[`${endpoint}_no_context_takeover`]) {\n this._deflate.reset();\n }\n\n callback(null, data);\n });\n }\n}\n\nmodule.exports = PerMessageDeflate;\n\n/**\n * The listener of the `zlib.DeflateRaw` stream `'data'` event.\n *\n * @param {Buffer} chunk A chunk of data\n * @private\n */\nfunction deflateOnData(chunk) {\n this[kBuffers].push(chunk);\n this[kTotalLength] += chunk.length;\n}\n\n/**\n * The listener of the `zlib.InflateRaw` stream `'data'` event.\n *\n * @param {Buffer} chunk A chunk of data\n * @private\n */\nfunction inflateOnData(chunk) {\n this[kTotalLength] += chunk.length;\n\n if (\n this[kPerMessageDeflate]._maxPayload < 1 ||\n this[kTotalLength] <= this[kPerMessageDeflate]._maxPayload\n ) {\n this[kBuffers].push(chunk);\n return;\n }\n\n this[kError] = new RangeError('Max payload size exceeded');\n this[kError].code = 'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH';\n this[kError][kStatusCode] = 1009;\n this.removeListener('data', inflateOnData);\n this.reset();\n}\n\n/**\n * The listener of the `zlib.InflateRaw` stream `'error'` event.\n *\n * @param {Error} err The emitted error\n * @private\n */\nfunction inflateOnError(err) {\n //\n // There is no need to call `Zlib#close()` as the handle is automatically\n // closed when an error is emitted.\n //\n this[kPerMessageDeflate]._inflate = null;\n err[kStatusCode] = 1007;\n this[kCallback](err);\n}\n","'use strict';\n\nconst { isUtf8 } = require('buffer');\n\nconst { hasBlob } = require('./constants');\n\n//\n// Allowed token characters:\n//\n// '!', '#', '$', '%', '&', ''', '*', '+', '-',\n// '.', 0-9, A-Z, '^', '_', '`', a-z, '|', '~'\n//\n// tokenChars[32] === 0 // ' '\n// tokenChars[33] === 1 // '!'\n// tokenChars[34] === 0 // '\"'\n// ...\n//\n// prettier-ignore\nconst tokenChars = [\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0 - 15\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 16 - 31\n 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, // 32 - 47\n 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, // 48 - 63\n 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 64 - 79\n 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, // 80 - 95\n 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 96 - 111\n 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0 // 112 - 127\n];\n\n/**\n * Checks if a status code is allowed in a close frame.\n *\n * @param {Number} code The status code\n * @return {Boolean} `true` if the status code is valid, else `false`\n * @public\n */\nfunction isValidStatusCode(code) {\n return (\n (code >= 1000 &&\n code <= 1014 &&\n code !== 1004 &&\n code !== 1005 &&\n code !== 1006) ||\n (code >= 3000 && code <= 4999)\n );\n}\n\n/**\n * Checks if a given buffer contains only correct UTF-8.\n * Ported from https://www.cl.cam.ac.uk/%7Emgk25/ucs/utf8_check.c by\n * Markus Kuhn.\n *\n * @param {Buffer} buf The buffer to check\n * @return {Boolean} `true` if `buf` contains only correct UTF-8, else `false`\n * @public\n */\nfunction _isValidUTF8(buf) {\n const len = buf.length;\n let i = 0;\n\n while (i < len) {\n if ((buf[i] & 0x80) === 0) {\n // 0xxxxxxx\n i++;\n } else if ((buf[i] & 0xe0) === 0xc0) {\n // 110xxxxx 10xxxxxx\n if (\n i + 1 === len ||\n (buf[i + 1] & 0xc0) !== 0x80 ||\n (buf[i] & 0xfe) === 0xc0 // Overlong\n ) {\n return false;\n }\n\n i += 2;\n } else if ((buf[i] & 0xf0) === 0xe0) {\n // 1110xxxx 10xxxxxx 10xxxxxx\n if (\n i + 2 >= len ||\n (buf[i + 1] & 0xc0) !== 0x80 ||\n (buf[i + 2] & 0xc0) !== 0x80 ||\n (buf[i] === 0xe0 && (buf[i + 1] & 0xe0) === 0x80) || // Overlong\n (buf[i] === 0xed && (buf[i + 1] & 0xe0) === 0xa0) // Surrogate (U+D800 - U+DFFF)\n ) {\n return false;\n }\n\n i += 3;\n } else if ((buf[i] & 0xf8) === 0xf0) {\n // 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx\n if (\n i + 3 >= len ||\n (buf[i + 1] & 0xc0) !== 0x80 ||\n (buf[i + 2] & 0xc0) !== 0x80 ||\n (buf[i + 3] & 0xc0) !== 0x80 ||\n (buf[i] === 0xf0 && (buf[i + 1] & 0xf0) === 0x80) || // Overlong\n (buf[i] === 0xf4 && buf[i + 1] > 0x8f) ||\n buf[i] > 0xf4 // > U+10FFFF\n ) {\n return false;\n }\n\n i += 4;\n } else {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Determines whether a value is a `Blob`.\n *\n * @param {*} value The value to be tested\n * @return {Boolean} `true` if `value` is a `Blob`, else `false`\n * @private\n */\nfunction isBlob(value) {\n return (\n hasBlob &&\n typeof value === 'object' &&\n typeof value.arrayBuffer === 'function' &&\n typeof value.type === 'string' &&\n typeof value.stream === 'function' &&\n (value[Symbol.toStringTag] === 'Blob' ||\n value[Symbol.toStringTag] === 'File')\n );\n}\n\nmodule.exports = {\n isBlob,\n isValidStatusCode,\n isValidUTF8: _isValidUTF8,\n tokenChars\n};\n\nif (isUtf8) {\n module.exports.isValidUTF8 = function (buf) {\n return buf.length < 24 ? _isValidUTF8(buf) : isUtf8(buf);\n };\n} /* istanbul ignore else */ else if (!process.env.WS_NO_UTF_8_VALIDATE) {\n try {\n const isValidUTF8 = require('utf-8-validate');\n\n module.exports.isValidUTF8 = function (buf) {\n return buf.length < 32 ? _isValidUTF8(buf) : isValidUTF8(buf);\n };\n } catch (e) {\n // Continue regardless of the error.\n }\n}\n","'use strict';\n\nconst { Writable } = require('stream');\n\nconst PerMessageDeflate = require('./permessage-deflate');\nconst {\n BINARY_TYPES,\n EMPTY_BUFFER,\n kStatusCode,\n kWebSocket\n} = require('./constants');\nconst { concat, toArrayBuffer, unmask } = require('./buffer-util');\nconst { isValidStatusCode, isValidUTF8 } = require('./validation');\n\nconst FastBuffer = Buffer[Symbol.species];\n\nconst GET_INFO = 0;\nconst GET_PAYLOAD_LENGTH_16 = 1;\nconst GET_PAYLOAD_LENGTH_64 = 2;\nconst GET_MASK = 3;\nconst GET_DATA = 4;\nconst INFLATING = 5;\nconst DEFER_EVENT = 6;\n\n/**\n * HyBi Receiver implementation.\n *\n * @extends Writable\n */\nclass Receiver extends Writable {\n /**\n * Creates a Receiver instance.\n *\n * @param {Object} [options] Options object\n * @param {Boolean} [options.allowSynchronousEvents=true] Specifies whether\n * any of the `'message'`, `'ping'`, and `'pong'` events can be emitted\n * multiple times in the same tick\n * @param {String} [options.binaryType=nodebuffer] The type for binary data\n * @param {Object} [options.extensions] An object containing the negotiated\n * extensions\n * @param {Boolean} [options.isServer=false] Specifies whether to operate in\n * client or server mode\n * @param {Number} [options.maxPayload=0] The maximum allowed message length\n * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or\n * not to skip UTF-8 validation for text and close messages\n */\n constructor(options = {}) {\n super();\n\n this._allowSynchronousEvents =\n options.allowSynchronousEvents !== undefined\n ? options.allowSynchronousEvents\n : true;\n this._binaryType = options.binaryType || BINARY_TYPES[0];\n this._extensions = options.extensions || {};\n this._isServer = !!options.isServer;\n this._maxPayload = options.maxPayload | 0;\n this._skipUTF8Validation = !!options.skipUTF8Validation;\n this[kWebSocket] = undefined;\n\n this._bufferedBytes = 0;\n this._buffers = [];\n\n this._compressed = false;\n this._payloadLength = 0;\n this._mask = undefined;\n this._fragmented = 0;\n this._masked = false;\n this._fin = false;\n this._opcode = 0;\n\n this._totalPayloadLength = 0;\n this._messageLength = 0;\n this._fragments = [];\n\n this._errored = false;\n this._loop = false;\n this._state = GET_INFO;\n }\n\n /**\n * Implements `Writable.prototype._write()`.\n *\n * @param {Buffer} chunk The chunk of data to write\n * @param {String} encoding The character encoding of `chunk`\n * @param {Function} cb Callback\n * @private\n */\n _write(chunk, encoding, cb) {\n if (this._opcode === 0x08 && this._state == GET_INFO) return cb();\n\n this._bufferedBytes += chunk.length;\n this._buffers.push(chunk);\n this.startLoop(cb);\n }\n\n /**\n * Consumes `n` bytes from the buffered data.\n *\n * @param {Number} n The number of bytes to consume\n * @return {Buffer} The consumed bytes\n * @private\n */\n consume(n) {\n this._bufferedBytes -= n;\n\n if (n === this._buffers[0].length) return this._buffers.shift();\n\n if (n < this._buffers[0].length) {\n const buf = this._buffers[0];\n this._buffers[0] = new FastBuffer(\n buf.buffer,\n buf.byteOffset + n,\n buf.length - n\n );\n\n return new FastBuffer(buf.buffer, buf.byteOffset, n);\n }\n\n const dst = Buffer.allocUnsafe(n);\n\n do {\n const buf = this._buffers[0];\n const offset = dst.length - n;\n\n if (n >= buf.length) {\n dst.set(this._buffers.shift(), offset);\n } else {\n dst.set(new Uint8Array(buf.buffer, buf.byteOffset, n), offset);\n this._buffers[0] = new FastBuffer(\n buf.buffer,\n buf.byteOffset + n,\n buf.length - n\n );\n }\n\n n -= buf.length;\n } while (n > 0);\n\n return dst;\n }\n\n /**\n * Starts the parsing loop.\n *\n * @param {Function} cb Callback\n * @private\n */\n startLoop(cb) {\n this._loop = true;\n\n do {\n switch (this._state) {\n case GET_INFO:\n this.getInfo(cb);\n break;\n case GET_PAYLOAD_LENGTH_16:\n this.getPayloadLength16(cb);\n break;\n case GET_PAYLOAD_LENGTH_64:\n this.getPayloadLength64(cb);\n break;\n case GET_MASK:\n this.getMask();\n break;\n case GET_DATA:\n this.getData(cb);\n break;\n case INFLATING:\n case DEFER_EVENT:\n this._loop = false;\n return;\n }\n } while (this._loop);\n\n if (!this._errored) cb();\n }\n\n /**\n * Reads the first two bytes of a frame.\n *\n * @param {Function} cb Callback\n * @private\n */\n getInfo(cb) {\n if (this._bufferedBytes < 2) {\n this._loop = false;\n return;\n }\n\n const buf = this.consume(2);\n\n if ((buf[0] & 0x30) !== 0x00) {\n const error = this.createError(\n RangeError,\n 'RSV2 and RSV3 must be clear',\n true,\n 1002,\n 'WS_ERR_UNEXPECTED_RSV_2_3'\n );\n\n cb(error);\n return;\n }\n\n const compressed = (buf[0] & 0x40) === 0x40;\n\n if (compressed && !this._extensions[PerMessageDeflate.extensionName]) {\n const error = this.createError(\n RangeError,\n 'RSV1 must be clear',\n true,\n 1002,\n 'WS_ERR_UNEXPECTED_RSV_1'\n );\n\n cb(error);\n return;\n }\n\n this._fin = (buf[0] & 0x80) === 0x80;\n this._opcode = buf[0] & 0x0f;\n this._payloadLength = buf[1] & 0x7f;\n\n if (this._opcode === 0x00) {\n if (compressed) {\n const error = this.createError(\n RangeError,\n 'RSV1 must be clear',\n true,\n 1002,\n 'WS_ERR_UNEXPECTED_RSV_1'\n );\n\n cb(error);\n return;\n }\n\n if (!this._fragmented) {\n const error = this.createError(\n RangeError,\n 'invalid opcode 0',\n true,\n 1002,\n 'WS_ERR_INVALID_OPCODE'\n );\n\n cb(error);\n return;\n }\n\n this._opcode = this._fragmented;\n } else if (this._opcode === 0x01 || this._opcode === 0x02) {\n if (this._fragmented) {\n const error = this.createError(\n RangeError,\n `invalid opcode ${this._opcode}`,\n true,\n 1002,\n 'WS_ERR_INVALID_OPCODE'\n );\n\n cb(error);\n return;\n }\n\n this._compressed = compressed;\n } else if (this._opcode > 0x07 && this._opcode < 0x0b) {\n if (!this._fin) {\n const error = this.createError(\n RangeError,\n 'FIN must be set',\n true,\n 1002,\n 'WS_ERR_EXPECTED_FIN'\n );\n\n cb(error);\n return;\n }\n\n if (compressed) {\n const error = this.createError(\n RangeError,\n 'RSV1 must be clear',\n true,\n 1002,\n 'WS_ERR_UNEXPECTED_RSV_1'\n );\n\n cb(error);\n return;\n }\n\n if (\n this._payloadLength > 0x7d ||\n (this._opcode === 0x08 && this._payloadLength === 1)\n ) {\n const error = this.createError(\n RangeError,\n `invalid payload length ${this._payloadLength}`,\n true,\n 1002,\n 'WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH'\n );\n\n cb(error);\n return;\n }\n } else {\n const error = this.createError(\n RangeError,\n `invalid opcode ${this._opcode}`,\n true,\n 1002,\n 'WS_ERR_INVALID_OPCODE'\n );\n\n cb(error);\n return;\n }\n\n if (!this._fin && !this._fragmented) this._fragmented = this._opcode;\n this._masked = (buf[1] & 0x80) === 0x80;\n\n if (this._isServer) {\n if (!this._masked) {\n const error = this.createError(\n RangeError,\n 'MASK must be set',\n true,\n 1002,\n 'WS_ERR_EXPECTED_MASK'\n );\n\n cb(error);\n return;\n }\n } else if (this._masked) {\n const error = this.createError(\n RangeError,\n 'MASK must be clear',\n true,\n 1002,\n 'WS_ERR_UNEXPECTED_MASK'\n );\n\n cb(error);\n return;\n }\n\n if (this._payloadLength === 126) this._state = GET_PAYLOAD_LENGTH_16;\n else if (this._payloadLength === 127) this._state = GET_PAYLOAD_LENGTH_64;\n else this.haveLength(cb);\n }\n\n /**\n * Gets extended payload length (7+16).\n *\n * @param {Function} cb Callback\n * @private\n */\n getPayloadLength16(cb) {\n if (this._bufferedBytes < 2) {\n this._loop = false;\n return;\n }\n\n this._payloadLength = this.consume(2).readUInt16BE(0);\n this.haveLength(cb);\n }\n\n /**\n * Gets extended payload length (7+64).\n *\n * @param {Function} cb Callback\n * @private\n */\n getPayloadLength64(cb) {\n if (this._bufferedBytes < 8) {\n this._loop = false;\n return;\n }\n\n const buf = this.consume(8);\n const num = buf.readUInt32BE(0);\n\n //\n // The maximum safe integer in JavaScript is 2^53 - 1. An error is returned\n // if payload length is greater than this number.\n //\n if (num > Math.pow(2, 53 - 32) - 1) {\n const error = this.createError(\n RangeError,\n 'Unsupported WebSocket frame: payload length > 2^53 - 1',\n false,\n 1009,\n 'WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH'\n );\n\n cb(error);\n return;\n }\n\n this._payloadLength = num * Math.pow(2, 32) + buf.readUInt32BE(4);\n this.haveLength(cb);\n }\n\n /**\n * Payload length has been read.\n *\n * @param {Function} cb Callback\n * @private\n */\n haveLength(cb) {\n if (this._payloadLength && this._opcode < 0x08) {\n this._totalPayloadLength += this._payloadLength;\n if (this._totalPayloadLength > this._maxPayload && this._maxPayload > 0) {\n const error = this.createError(\n RangeError,\n 'Max payload size exceeded',\n false,\n 1009,\n 'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH'\n );\n\n cb(error);\n return;\n }\n }\n\n if (this._masked) this._state = GET_MASK;\n else this._state = GET_DATA;\n }\n\n /**\n * Reads mask bytes.\n *\n * @private\n */\n getMask() {\n if (this._bufferedBytes < 4) {\n this._loop = false;\n return;\n }\n\n this._mask = this.consume(4);\n this._state = GET_DATA;\n }\n\n /**\n * Reads data bytes.\n *\n * @param {Function} cb Callback\n * @private\n */\n getData(cb) {\n let data = EMPTY_BUFFER;\n\n if (this._payloadLength) {\n if (this._bufferedBytes < this._payloadLength) {\n this._loop = false;\n return;\n }\n\n data = this.consume(this._payloadLength);\n\n if (\n this._masked &&\n (this._mask[0] | this._mask[1] | this._mask[2] | this._mask[3]) !== 0\n ) {\n unmask(data, this._mask);\n }\n }\n\n if (this._opcode > 0x07) {\n this.controlMessage(data, cb);\n return;\n }\n\n if (this._compressed) {\n this._state = INFLATING;\n this.decompress(data, cb);\n return;\n }\n\n if (data.length) {\n //\n // This message is not compressed so its length is the sum of the payload\n // length of all fragments.\n //\n this._messageLength = this._totalPayloadLength;\n this._fragments.push(data);\n }\n\n this.dataMessage(cb);\n }\n\n /**\n * Decompresses data.\n *\n * @param {Buffer} data Compressed data\n * @param {Function} cb Callback\n * @private\n */\n decompress(data, cb) {\n const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];\n\n perMessageDeflate.decompress(data, this._fin, (err, buf) => {\n if (err) return cb(err);\n\n if (buf.length) {\n this._messageLength += buf.length;\n if (this._messageLength > this._maxPayload && this._maxPayload > 0) {\n const error = this.createError(\n RangeError,\n 'Max payload size exceeded',\n false,\n 1009,\n 'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH'\n );\n\n cb(error);\n return;\n }\n\n this._fragments.push(buf);\n }\n\n this.dataMessage(cb);\n if (this._state === GET_INFO) this.startLoop(cb);\n });\n }\n\n /**\n * Handles a data message.\n *\n * @param {Function} cb Callback\n * @private\n */\n dataMessage(cb) {\n if (!this._fin) {\n this._state = GET_INFO;\n return;\n }\n\n const messageLength = this._messageLength;\n const fragments = this._fragments;\n\n this._totalPayloadLength = 0;\n this._messageLength = 0;\n this._fragmented = 0;\n this._fragments = [];\n\n if (this._opcode === 2) {\n let data;\n\n if (this._binaryType === 'nodebuffer') {\n data = concat(fragments, messageLength);\n } else if (this._binaryType === 'arraybuffer') {\n data = toArrayBuffer(concat(fragments, messageLength));\n } else if (this._binaryType === 'blob') {\n data = new Blob(fragments);\n } else {\n data = fragments;\n }\n\n if (this._allowSynchronousEvents) {\n this.emit('message', data, true);\n this._state = GET_INFO;\n } else {\n this._state = DEFER_EVENT;\n setImmediate(() => {\n this.emit('message', data, true);\n this._state = GET_INFO;\n this.startLoop(cb);\n });\n }\n } else {\n const buf = concat(fragments, messageLength);\n\n if (!this._skipUTF8Validation && !isValidUTF8(buf)) {\n const error = this.createError(\n Error,\n 'invalid UTF-8 sequence',\n true,\n 1007,\n 'WS_ERR_INVALID_UTF8'\n );\n\n cb(error);\n return;\n }\n\n if (this._state === INFLATING || this._allowSynchronousEvents) {\n this.emit('message', buf, false);\n this._state = GET_INFO;\n } else {\n this._state = DEFER_EVENT;\n setImmediate(() => {\n this.emit('message', buf, false);\n this._state = GET_INFO;\n this.startLoop(cb);\n });\n }\n }\n }\n\n /**\n * Handles a control message.\n *\n * @param {Buffer} data Data to handle\n * @return {(Error|RangeError|undefined)} A possible error\n * @private\n */\n controlMessage(data, cb) {\n if (this._opcode === 0x08) {\n if (data.length === 0) {\n this._loop = false;\n this.emit('conclude', 1005, EMPTY_BUFFER);\n this.end();\n } else {\n const code = data.readUInt16BE(0);\n\n if (!isValidStatusCode(code)) {\n const error = this.createError(\n RangeError,\n `invalid status code ${code}`,\n true,\n 1002,\n 'WS_ERR_INVALID_CLOSE_CODE'\n );\n\n cb(error);\n return;\n }\n\n const buf = new FastBuffer(\n data.buffer,\n data.byteOffset + 2,\n data.length - 2\n );\n\n if (!this._skipUTF8Validation && !isValidUTF8(buf)) {\n const error = this.createError(\n Error,\n 'invalid UTF-8 sequence',\n true,\n 1007,\n 'WS_ERR_INVALID_UTF8'\n );\n\n cb(error);\n return;\n }\n\n this._loop = false;\n this.emit('conclude', code, buf);\n this.end();\n }\n\n this._state = GET_INFO;\n return;\n }\n\n if (this._allowSynchronousEvents) {\n this.emit(this._opcode === 0x09 ? 'ping' : 'pong', data);\n this._state = GET_INFO;\n } else {\n this._state = DEFER_EVENT;\n setImmediate(() => {\n this.emit(this._opcode === 0x09 ? 'ping' : 'pong', data);\n this._state = GET_INFO;\n this.startLoop(cb);\n });\n }\n }\n\n /**\n * Builds an error object.\n *\n * @param {function(new:Error|RangeError)} ErrorCtor The error constructor\n * @param {String} message The error message\n * @param {Boolean} prefix Specifies whether or not to add a default prefix to\n * `message`\n * @param {Number} statusCode The status code\n * @param {String} errorCode The exposed error code\n * @return {(Error|RangeError)} The error\n * @private\n */\n createError(ErrorCtor, message, prefix, statusCode, errorCode) {\n this._loop = false;\n this._errored = true;\n\n const err = new ErrorCtor(\n prefix ? `Invalid WebSocket frame: ${message}` : message\n );\n\n Error.captureStackTrace(err, this.createError);\n err.code = errorCode;\n err[kStatusCode] = statusCode;\n return err;\n }\n}\n\nmodule.exports = Receiver;\n","/* eslint no-unused-vars: [\"error\", { \"varsIgnorePattern\": \"^Duplex\" }] */\n\n'use strict';\n\nconst { Duplex } = require('stream');\nconst { randomFillSync } = require('crypto');\n\nconst PerMessageDeflate = require('./permessage-deflate');\nconst { EMPTY_BUFFER, kWebSocket, NOOP } = require('./constants');\nconst { isBlob, isValidStatusCode } = require('./validation');\nconst { mask: applyMask, toBuffer } = require('./buffer-util');\n\nconst kByteLength = Symbol('kByteLength');\nconst maskBuffer = Buffer.alloc(4);\nconst RANDOM_POOL_SIZE = 8 * 1024;\nlet randomPool;\nlet randomPoolPointer = RANDOM_POOL_SIZE;\n\nconst DEFAULT = 0;\nconst DEFLATING = 1;\nconst GET_BLOB_DATA = 2;\n\n/**\n * HyBi Sender implementation.\n */\nclass Sender {\n /**\n * Creates a Sender instance.\n *\n * @param {Duplex} socket The connection socket\n * @param {Object} [extensions] An object containing the negotiated extensions\n * @param {Function} [generateMask] The function used to generate the masking\n * key\n */\n constructor(socket, extensions, generateMask) {\n this._extensions = extensions || {};\n\n if (generateMask) {\n this._generateMask = generateMask;\n this._maskBuffer = Buffer.alloc(4);\n }\n\n this._socket = socket;\n\n this._firstFragment = true;\n this._compress = false;\n\n this._bufferedBytes = 0;\n this._queue = [];\n this._state = DEFAULT;\n this.onerror = NOOP;\n this[kWebSocket] = undefined;\n }\n\n /**\n * Frames a piece of data according to the HyBi WebSocket protocol.\n *\n * @param {(Buffer|String)} data The data to frame\n * @param {Object} options Options object\n * @param {Boolean} [options.fin=false] Specifies whether or not to set the\n * FIN bit\n * @param {Function} [options.generateMask] The function used to generate the\n * masking key\n * @param {Boolean} [options.mask=false] Specifies whether or not to mask\n * `data`\n * @param {Buffer} [options.maskBuffer] The buffer used to store the masking\n * key\n * @param {Number} options.opcode The opcode\n * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be\n * modified\n * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the\n * RSV1 bit\n * @return {(Buffer|String)[]} The framed data\n * @public\n */\n static frame(data, options) {\n let mask;\n let merge = false;\n let offset = 2;\n let skipMasking = false;\n\n if (options.mask) {\n mask = options.maskBuffer || maskBuffer;\n\n if (options.generateMask) {\n options.generateMask(mask);\n } else {\n if (randomPoolPointer === RANDOM_POOL_SIZE) {\n /* istanbul ignore else */\n if (randomPool === undefined) {\n //\n // This is lazily initialized because server-sent frames must not\n // be masked so it may never be used.\n //\n randomPool = Buffer.alloc(RANDOM_POOL_SIZE);\n }\n\n randomFillSync(randomPool, 0, RANDOM_POOL_SIZE);\n randomPoolPointer = 0;\n }\n\n mask[0] = randomPool[randomPoolPointer++];\n mask[1] = randomPool[randomPoolPointer++];\n mask[2] = randomPool[randomPoolPointer++];\n mask[3] = randomPool[randomPoolPointer++];\n }\n\n skipMasking = (mask[0] | mask[1] | mask[2] | mask[3]) === 0;\n offset = 6;\n }\n\n let dataLength;\n\n if (typeof data === 'string') {\n if (\n (!options.mask || skipMasking) &&\n options[kByteLength] !== undefined\n ) {\n dataLength = options[kByteLength];\n } else {\n data = Buffer.from(data);\n dataLength = data.length;\n }\n } else {\n dataLength = data.length;\n merge = options.mask && options.readOnly && !skipMasking;\n }\n\n let payloadLength = dataLength;\n\n if (dataLength >= 65536) {\n offset += 8;\n payloadLength = 127;\n } else if (dataLength > 125) {\n offset += 2;\n payloadLength = 126;\n }\n\n const target = Buffer.allocUnsafe(merge ? dataLength + offset : offset);\n\n target[0] = options.fin ? options.opcode | 0x80 : options.opcode;\n if (options.rsv1) target[0] |= 0x40;\n\n target[1] = payloadLength;\n\n if (payloadLength === 126) {\n target.writeUInt16BE(dataLength, 2);\n } else if (payloadLength === 127) {\n target[2] = target[3] = 0;\n target.writeUIntBE(dataLength, 4, 6);\n }\n\n if (!options.mask) return [target, data];\n\n target[1] |= 0x80;\n target[offset - 4] = mask[0];\n target[offset - 3] = mask[1];\n target[offset - 2] = mask[2];\n target[offset - 1] = mask[3];\n\n if (skipMasking) return [target, data];\n\n if (merge) {\n applyMask(data, mask, target, offset, dataLength);\n return [target];\n }\n\n applyMask(data, mask, data, 0, dataLength);\n return [target, data];\n }\n\n /**\n * Sends a close message to the other peer.\n *\n * @param {Number} [code] The status code component of the body\n * @param {(String|Buffer)} [data] The message component of the body\n * @param {Boolean} [mask=false] Specifies whether or not to mask the message\n * @param {Function} [cb] Callback\n * @public\n */\n close(code, data, mask, cb) {\n let buf;\n\n if (code === undefined) {\n buf = EMPTY_BUFFER;\n } else if (typeof code !== 'number' || !isValidStatusCode(code)) {\n throw new TypeError('First argument must be a valid error code number');\n } else if (data === undefined || !data.length) {\n buf = Buffer.allocUnsafe(2);\n buf.writeUInt16BE(code, 0);\n } else {\n const length = Buffer.byteLength(data);\n\n if (length > 123) {\n throw new RangeError('The message must not be greater than 123 bytes');\n }\n\n buf = Buffer.allocUnsafe(2 + length);\n buf.writeUInt16BE(code, 0);\n\n if (typeof data === 'string') {\n buf.write(data, 2);\n } else {\n buf.set(data, 2);\n }\n }\n\n const options = {\n [kByteLength]: buf.length,\n fin: true,\n generateMask: this._generateMask,\n mask,\n maskBuffer: this._maskBuffer,\n opcode: 0x08,\n readOnly: false,\n rsv1: false\n };\n\n if (this._state !== DEFAULT) {\n this.enqueue([this.dispatch, buf, false, options, cb]);\n } else {\n this.sendFrame(Sender.frame(buf, options), cb);\n }\n }\n\n /**\n * Sends a ping message to the other peer.\n *\n * @param {*} data The message to send\n * @param {Boolean} [mask=false] Specifies whether or not to mask `data`\n * @param {Function} [cb] Callback\n * @public\n */\n ping(data, mask, cb) {\n let byteLength;\n let readOnly;\n\n if (typeof data === 'string') {\n byteLength = Buffer.byteLength(data);\n readOnly = false;\n } else if (isBlob(data)) {\n byteLength = data.size;\n readOnly = false;\n } else {\n data = toBuffer(data);\n byteLength = data.length;\n readOnly = toBuffer.readOnly;\n }\n\n if (byteLength > 125) {\n throw new RangeError('The data size must not be greater than 125 bytes');\n }\n\n const options = {\n [kByteLength]: byteLength,\n fin: true,\n generateMask: this._generateMask,\n mask,\n maskBuffer: this._maskBuffer,\n opcode: 0x09,\n readOnly,\n rsv1: false\n };\n\n if (isBlob(data)) {\n if (this._state !== DEFAULT) {\n this.enqueue([this.getBlobData, data, false, options, cb]);\n } else {\n this.getBlobData(data, false, options, cb);\n }\n } else if (this._state !== DEFAULT) {\n this.enqueue([this.dispatch, data, false, options, cb]);\n } else {\n this.sendFrame(Sender.frame(data, options), cb);\n }\n }\n\n /**\n * Sends a pong message to the other peer.\n *\n * @param {*} data The message to send\n * @param {Boolean} [mask=false] Specifies whether or not to mask `data`\n * @param {Function} [cb] Callback\n * @public\n */\n pong(data, mask, cb) {\n let byteLength;\n let readOnly;\n\n if (typeof data === 'string') {\n byteLength = Buffer.byteLength(data);\n readOnly = false;\n } else if (isBlob(data)) {\n byteLength = data.size;\n readOnly = false;\n } else {\n data = toBuffer(data);\n byteLength = data.length;\n readOnly = toBuffer.readOnly;\n }\n\n if (byteLength > 125) {\n throw new RangeError('The data size must not be greater than 125 bytes');\n }\n\n const options = {\n [kByteLength]: byteLength,\n fin: true,\n generateMask: this._generateMask,\n mask,\n maskBuffer: this._maskBuffer,\n opcode: 0x0a,\n readOnly,\n rsv1: false\n };\n\n if (isBlob(data)) {\n if (this._state !== DEFAULT) {\n this.enqueue([this.getBlobData, data, false, options, cb]);\n } else {\n this.getBlobData(data, false, options, cb);\n }\n } else if (this._state !== DEFAULT) {\n this.enqueue([this.dispatch, data, false, options, cb]);\n } else {\n this.sendFrame(Sender.frame(data, options), cb);\n }\n }\n\n /**\n * Sends a data message to the other peer.\n *\n * @param {*} data The message to send\n * @param {Object} options Options object\n * @param {Boolean} [options.binary=false] Specifies whether `data` is binary\n * or text\n * @param {Boolean} [options.compress=false] Specifies whether or not to\n * compress `data`\n * @param {Boolean} [options.fin=false] Specifies whether the fragment is the\n * last one\n * @param {Boolean} [options.mask=false] Specifies whether or not to mask\n * `data`\n * @param {Function} [cb] Callback\n * @public\n */\n send(data, options, cb) {\n const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];\n let opcode = options.binary ? 2 : 1;\n let rsv1 = options.compress;\n\n let byteLength;\n let readOnly;\n\n if (typeof data === 'string') {\n byteLength = Buffer.byteLength(data);\n readOnly = false;\n } else if (isBlob(data)) {\n byteLength = data.size;\n readOnly = false;\n } else {\n data = toBuffer(data);\n byteLength = data.length;\n readOnly = toBuffer.readOnly;\n }\n\n if (this._firstFragment) {\n this._firstFragment = false;\n if (\n rsv1 &&\n perMessageDeflate &&\n perMessageDeflate.params[\n perMessageDeflate._isServer\n ? 'server_no_context_takeover'\n : 'client_no_context_takeover'\n ]\n ) {\n rsv1 = byteLength >= perMessageDeflate._threshold;\n }\n this._compress = rsv1;\n } else {\n rsv1 = false;\n opcode = 0;\n }\n\n if (options.fin) this._firstFragment = true;\n\n const opts = {\n [kByteLength]: byteLength,\n fin: options.fin,\n generateMask: this._generateMask,\n mask: options.mask,\n maskBuffer: this._maskBuffer,\n opcode,\n readOnly,\n rsv1\n };\n\n if (isBlob(data)) {\n if (this._state !== DEFAULT) {\n this.enqueue([this.getBlobData, data, this._compress, opts, cb]);\n } else {\n this.getBlobData(data, this._compress, opts, cb);\n }\n } else if (this._state !== DEFAULT) {\n this.enqueue([this.dispatch, data, this._compress, opts, cb]);\n } else {\n this.dispatch(data, this._compress, opts, cb);\n }\n }\n\n /**\n * Gets the contents of a blob as binary data.\n *\n * @param {Blob} blob The blob\n * @param {Boolean} [compress=false] Specifies whether or not to compress\n * the data\n * @param {Object} options Options object\n * @param {Boolean} [options.fin=false] Specifies whether or not to set the\n * FIN bit\n * @param {Function} [options.generateMask] The function used to generate the\n * masking key\n * @param {Boolean} [options.mask=false] Specifies whether or not to mask\n * `data`\n * @param {Buffer} [options.maskBuffer] The buffer used to store the masking\n * key\n * @param {Number} options.opcode The opcode\n * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be\n * modified\n * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the\n * RSV1 bit\n * @param {Function} [cb] Callback\n * @private\n */\n getBlobData(blob, compress, options, cb) {\n this._bufferedBytes += options[kByteLength];\n this._state = GET_BLOB_DATA;\n\n blob\n .arrayBuffer()\n .then((arrayBuffer) => {\n if (this._socket.destroyed) {\n const err = new Error(\n 'The socket was closed while the blob was being read'\n );\n\n //\n // `callCallbacks` is called in the next tick to ensure that errors\n // that might be thrown in the callbacks behave like errors thrown\n // outside the promise chain.\n //\n process.nextTick(callCallbacks, this, err, cb);\n return;\n }\n\n this._bufferedBytes -= options[kByteLength];\n const data = toBuffer(arrayBuffer);\n\n if (!compress) {\n this._state = DEFAULT;\n this.sendFrame(Sender.frame(data, options), cb);\n this.dequeue();\n } else {\n this.dispatch(data, compress, options, cb);\n }\n })\n .catch((err) => {\n //\n // `onError` is called in the next tick for the same reason that\n // `callCallbacks` above is.\n //\n process.nextTick(onError, this, err, cb);\n });\n }\n\n /**\n * Dispatches a message.\n *\n * @param {(Buffer|String)} data The message to send\n * @param {Boolean} [compress=false] Specifies whether or not to compress\n * `data`\n * @param {Object} options Options object\n * @param {Boolean} [options.fin=false] Specifies whether or not to set the\n * FIN bit\n * @param {Function} [options.generateMask] The function used to generate the\n * masking key\n * @param {Boolean} [options.mask=false] Specifies whether or not to mask\n * `data`\n * @param {Buffer} [options.maskBuffer] The buffer used to store the masking\n * key\n * @param {Number} options.opcode The opcode\n * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be\n * modified\n * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the\n * RSV1 bit\n * @param {Function} [cb] Callback\n * @private\n */\n dispatch(data, compress, options, cb) {\n if (!compress) {\n this.sendFrame(Sender.frame(data, options), cb);\n return;\n }\n\n const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];\n\n this._bufferedBytes += options[kByteLength];\n this._state = DEFLATING;\n perMessageDeflate.compress(data, options.fin, (_, buf) => {\n if (this._socket.destroyed) {\n const err = new Error(\n 'The socket was closed while data was being compressed'\n );\n\n callCallbacks(this, err, cb);\n return;\n }\n\n this._bufferedBytes -= options[kByteLength];\n this._state = DEFAULT;\n options.readOnly = false;\n this.sendFrame(Sender.frame(buf, options), cb);\n this.dequeue();\n });\n }\n\n /**\n * Executes queued send operations.\n *\n * @private\n */\n dequeue() {\n while (this._state === DEFAULT && this._queue.length) {\n const params = this._queue.shift();\n\n this._bufferedBytes -= params[3][kByteLength];\n Reflect.apply(params[0], this, params.slice(1));\n }\n }\n\n /**\n * Enqueues a send operation.\n *\n * @param {Array} params Send operation parameters.\n * @private\n */\n enqueue(params) {\n this._bufferedBytes += params[3][kByteLength];\n this._queue.push(params);\n }\n\n /**\n * Sends a frame.\n *\n * @param {Buffer[]} list The frame to send\n * @param {Function} [cb] Callback\n * @private\n */\n sendFrame(list, cb) {\n if (list.length === 2) {\n this._socket.cork();\n this._socket.write(list[0]);\n this._socket.write(list[1], cb);\n this._socket.uncork();\n } else {\n this._socket.write(list[0], cb);\n }\n }\n}\n\nmodule.exports = Sender;\n\n/**\n * Calls queued callbacks with an error.\n *\n * @param {Sender} sender The `Sender` instance\n * @param {Error} err The error to call the callbacks with\n * @param {Function} [cb] The first callback\n * @private\n */\nfunction callCallbacks(sender, err, cb) {\n if (typeof cb === 'function') cb(err);\n\n for (let i = 0; i < sender._queue.length; i++) {\n const params = sender._queue[i];\n const callback = params[params.length - 1];\n\n if (typeof callback === 'function') callback(err);\n }\n}\n\n/**\n * Handles a `Sender` error.\n *\n * @param {Sender} sender The `Sender` instance\n * @param {Error} err The error\n * @param {Function} [cb] The first pending callback\n * @private\n */\nfunction onError(sender, err, cb) {\n callCallbacks(sender, err, cb);\n sender.onerror(err);\n}\n","'use strict';\n\nconst { kForOnEventAttribute, kListener } = require('./constants');\n\nconst kCode = Symbol('kCode');\nconst kData = Symbol('kData');\nconst kError = Symbol('kError');\nconst kMessage = Symbol('kMessage');\nconst kReason = Symbol('kReason');\nconst kTarget = Symbol('kTarget');\nconst kType = Symbol('kType');\nconst kWasClean = Symbol('kWasClean');\n\n/**\n * Class representing an event.\n */\nclass Event {\n /**\n * Create a new `Event`.\n *\n * @param {String} type The name of the event\n * @throws {TypeError} If the `type` argument is not specified\n */\n constructor(type) {\n this[kTarget] = null;\n this[kType] = type;\n }\n\n /**\n * @type {*}\n */\n get target() {\n return this[kTarget];\n }\n\n /**\n * @type {String}\n */\n get type() {\n return this[kType];\n }\n}\n\nObject.defineProperty(Event.prototype, 'target', { enumerable: true });\nObject.defineProperty(Event.prototype, 'type', { enumerable: true });\n\n/**\n * Class representing a close event.\n *\n * @extends Event\n */\nclass CloseEvent extends Event {\n /**\n * Create a new `CloseEvent`.\n *\n * @param {String} type The name of the event\n * @param {Object} [options] A dictionary object that allows for setting\n * attributes via object members of the same name\n * @param {Number} [options.code=0] The status code explaining why the\n * connection was closed\n * @param {String} [options.reason=''] A human-readable string explaining why\n * the connection was closed\n * @param {Boolean} [options.wasClean=false] Indicates whether or not the\n * connection was cleanly closed\n */\n constructor(type, options = {}) {\n super(type);\n\n this[kCode] = options.code === undefined ? 0 : options.code;\n this[kReason] = options.reason === undefined ? '' : options.reason;\n this[kWasClean] = options.wasClean === undefined ? false : options.wasClean;\n }\n\n /**\n * @type {Number}\n */\n get code() {\n return this[kCode];\n }\n\n /**\n * @type {String}\n */\n get reason() {\n return this[kReason];\n }\n\n /**\n * @type {Boolean}\n */\n get wasClean() {\n return this[kWasClean];\n }\n}\n\nObject.defineProperty(CloseEvent.prototype, 'code', { enumerable: true });\nObject.defineProperty(CloseEvent.prototype, 'reason', { enumerable: true });\nObject.defineProperty(CloseEvent.prototype, 'wasClean', { enumerable: true });\n\n/**\n * Class representing an error event.\n *\n * @extends Event\n */\nclass ErrorEvent extends Event {\n /**\n * Create a new `ErrorEvent`.\n *\n * @param {String} type The name of the event\n * @param {Object} [options] A dictionary object that allows for setting\n * attributes via object members of the same name\n * @param {*} [options.error=null] The error that generated this event\n * @param {String} [options.message=''] The error message\n */\n constructor(type, options = {}) {\n super(type);\n\n this[kError] = options.error === undefined ? null : options.error;\n this[kMessage] = options.message === undefined ? '' : options.message;\n }\n\n /**\n * @type {*}\n */\n get error() {\n return this[kError];\n }\n\n /**\n * @type {String}\n */\n get message() {\n return this[kMessage];\n }\n}\n\nObject.defineProperty(ErrorEvent.prototype, 'error', { enumerable: true });\nObject.defineProperty(ErrorEvent.prototype, 'message', { enumerable: true });\n\n/**\n * Class representing a message event.\n *\n * @extends Event\n */\nclass MessageEvent extends Event {\n /**\n * Create a new `MessageEvent`.\n *\n * @param {String} type The name of the event\n * @param {Object} [options] A dictionary object that allows for setting\n * attributes via object members of the same name\n * @param {*} [options.data=null] The message content\n */\n constructor(type, options = {}) {\n super(type);\n\n this[kData] = options.data === undefined ? null : options.data;\n }\n\n /**\n * @type {*}\n */\n get data() {\n return this[kData];\n }\n}\n\nObject.defineProperty(MessageEvent.prototype, 'data', { enumerable: true });\n\n/**\n * This provides methods for emulating the `EventTarget` interface. It's not\n * meant to be used directly.\n *\n * @mixin\n */\nconst EventTarget = {\n /**\n * Register an event listener.\n *\n * @param {String} type A string representing the event type to listen for\n * @param {(Function|Object)} handler The listener to add\n * @param {Object} [options] An options object specifies characteristics about\n * the event listener\n * @param {Boolean} [options.once=false] A `Boolean` indicating that the\n * listener should be invoked at most once after being added. If `true`,\n * the listener would be automatically removed when invoked.\n * @public\n */\n addEventListener(type, handler, options = {}) {\n for (const listener of this.listeners(type)) {\n if (\n !options[kForOnEventAttribute] &&\n listener[kListener] === handler &&\n !listener[kForOnEventAttribute]\n ) {\n return;\n }\n }\n\n let wrapper;\n\n if (type === 'message') {\n wrapper = function onMessage(data, isBinary) {\n const event = new MessageEvent('message', {\n data: isBinary ? data : data.toString()\n });\n\n event[kTarget] = this;\n callListener(handler, this, event);\n };\n } else if (type === 'close') {\n wrapper = function onClose(code, message) {\n const event = new CloseEvent('close', {\n code,\n reason: message.toString(),\n wasClean: this._closeFrameReceived && this._closeFrameSent\n });\n\n event[kTarget] = this;\n callListener(handler, this, event);\n };\n } else if (type === 'error') {\n wrapper = function onError(error) {\n const event = new ErrorEvent('error', {\n error,\n message: error.message\n });\n\n event[kTarget] = this;\n callListener(handler, this, event);\n };\n } else if (type === 'open') {\n wrapper = function onOpen() {\n const event = new Event('open');\n\n event[kTarget] = this;\n callListener(handler, this, event);\n };\n } else {\n return;\n }\n\n wrapper[kForOnEventAttribute] = !!options[kForOnEventAttribute];\n wrapper[kListener] = handler;\n\n if (options.once) {\n this.once(type, wrapper);\n } else {\n this.on(type, wrapper);\n }\n },\n\n /**\n * Remove an event listener.\n *\n * @param {String} type A string representing the event type to remove\n * @param {(Function|Object)} handler The listener to remove\n * @public\n */\n removeEventListener(type, handler) {\n for (const listener of this.listeners(type)) {\n if (listener[kListener] === handler && !listener[kForOnEventAttribute]) {\n this.removeListener(type, listener);\n break;\n }\n }\n }\n};\n\nmodule.exports = {\n CloseEvent,\n ErrorEvent,\n Event,\n EventTarget,\n MessageEvent\n};\n\n/**\n * Call an event listener\n *\n * @param {(Function|Object)} listener The listener to call\n * @param {*} thisArg The value to use as `this`` when calling the listener\n * @param {Event} event The event to pass to the listener\n * @private\n */\nfunction callListener(listener, thisArg, event) {\n if (typeof listener === 'object' && listener.handleEvent) {\n listener.handleEvent.call(listener, event);\n } else {\n listener.call(thisArg, event);\n }\n}\n","'use strict';\n\nconst { tokenChars } = require('./validation');\n\n/**\n * Adds an offer to the map of extension offers or a parameter to the map of\n * parameters.\n *\n * @param {Object} dest The map of extension offers or parameters\n * @param {String} name The extension or parameter name\n * @param {(Object|Boolean|String)} elem The extension parameters or the\n * parameter value\n * @private\n */\nfunction push(dest, name, elem) {\n if (dest[name] === undefined) dest[name] = [elem];\n else dest[name].push(elem);\n}\n\n/**\n * Parses the `Sec-WebSocket-Extensions` header into an object.\n *\n * @param {String} header The field value of the header\n * @return {Object} The parsed object\n * @public\n */\nfunction parse(header) {\n const offers = Object.create(null);\n let params = Object.create(null);\n let mustUnescape = false;\n let isEscaping = false;\n let inQuotes = false;\n let extensionName;\n let paramName;\n let start = -1;\n let code = -1;\n let end = -1;\n let i = 0;\n\n for (; i < header.length; i++) {\n code = header.charCodeAt(i);\n\n if (extensionName === undefined) {\n if (end === -1 && tokenChars[code] === 1) {\n if (start === -1) start = i;\n } else if (\n i !== 0 &&\n (code === 0x20 /* ' ' */ || code === 0x09) /* '\\t' */\n ) {\n if (end === -1 && start !== -1) end = i;\n } else if (code === 0x3b /* ';' */ || code === 0x2c /* ',' */) {\n if (start === -1) {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n\n if (end === -1) end = i;\n const name = header.slice(start, end);\n if (code === 0x2c) {\n push(offers, name, params);\n params = Object.create(null);\n } else {\n extensionName = name;\n }\n\n start = end = -1;\n } else {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n } else if (paramName === undefined) {\n if (end === -1 && tokenChars[code] === 1) {\n if (start === -1) start = i;\n } else if (code === 0x20 || code === 0x09) {\n if (end === -1 && start !== -1) end = i;\n } else if (code === 0x3b || code === 0x2c) {\n if (start === -1) {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n\n if (end === -1) end = i;\n push(params, header.slice(start, end), true);\n if (code === 0x2c) {\n push(offers, extensionName, params);\n params = Object.create(null);\n extensionName = undefined;\n }\n\n start = end = -1;\n } else if (code === 0x3d /* '=' */ && start !== -1 && end === -1) {\n paramName = header.slice(start, i);\n start = end = -1;\n } else {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n } else {\n //\n // The value of a quoted-string after unescaping must conform to the\n // token ABNF, so only token characters are valid.\n // Ref: https://tools.ietf.org/html/rfc6455#section-9.1\n //\n if (isEscaping) {\n if (tokenChars[code] !== 1) {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n if (start === -1) start = i;\n else if (!mustUnescape) mustUnescape = true;\n isEscaping = false;\n } else if (inQuotes) {\n if (tokenChars[code] === 1) {\n if (start === -1) start = i;\n } else if (code === 0x22 /* '\"' */ && start !== -1) {\n inQuotes = false;\n end = i;\n } else if (code === 0x5c /* '\\' */) {\n isEscaping = true;\n } else {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n } else if (code === 0x22 && header.charCodeAt(i - 1) === 0x3d) {\n inQuotes = true;\n } else if (end === -1 && tokenChars[code] === 1) {\n if (start === -1) start = i;\n } else if (start !== -1 && (code === 0x20 || code === 0x09)) {\n if (end === -1) end = i;\n } else if (code === 0x3b || code === 0x2c) {\n if (start === -1) {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n\n if (end === -1) end = i;\n let value = header.slice(start, end);\n if (mustUnescape) {\n value = value.replace(/\\\\/g, '');\n mustUnescape = false;\n }\n push(params, paramName, value);\n if (code === 0x2c) {\n push(offers, extensionName, params);\n params = Object.create(null);\n extensionName = undefined;\n }\n\n paramName = undefined;\n start = end = -1;\n } else {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n }\n }\n\n if (start === -1 || inQuotes || code === 0x20 || code === 0x09) {\n throw new SyntaxError('Unexpected end of input');\n }\n\n if (end === -1) end = i;\n const token = header.slice(start, end);\n if (extensionName === undefined) {\n push(offers, token, params);\n } else {\n if (paramName === undefined) {\n push(params, token, true);\n } else if (mustUnescape) {\n push(params, paramName, token.replace(/\\\\/g, ''));\n } else {\n push(params, paramName, token);\n }\n push(offers, extensionName, params);\n }\n\n return offers;\n}\n\n/**\n * Builds the `Sec-WebSocket-Extensions` header field value.\n *\n * @param {Object} extensions The map of extensions and parameters to format\n * @return {String} A string representing the given object\n * @public\n */\nfunction format(extensions) {\n return Object.keys(extensions)\n .map((extension) => {\n let configurations = extensions[extension];\n if (!Array.isArray(configurations)) configurations = [configurations];\n return configurations\n .map((params) => {\n return [extension]\n .concat(\n Object.keys(params).map((k) => {\n let values = params[k];\n if (!Array.isArray(values)) values = [values];\n return values\n .map((v) => (v === true ? k : `${k}=${v}`))\n .join('; ');\n })\n )\n .join('; ');\n })\n .join(', ');\n })\n .join(', ');\n}\n\nmodule.exports = { format, parse };\n","/* eslint no-unused-vars: [\"error\", { \"varsIgnorePattern\": \"^Duplex|Readable$\", \"caughtErrors\": \"none\" }] */\n\n'use strict';\n\nconst EventEmitter = require('events');\nconst https = require('https');\nconst http = require('http');\nconst net = require('net');\nconst tls = require('tls');\nconst { randomBytes, createHash } = require('crypto');\nconst { Duplex, Readable } = require('stream');\nconst { URL } = require('url');\n\nconst PerMessageDeflate = require('./permessage-deflate');\nconst Receiver = require('./receiver');\nconst Sender = require('./sender');\nconst { isBlob } = require('./validation');\n\nconst {\n BINARY_TYPES,\n EMPTY_BUFFER,\n GUID,\n kForOnEventAttribute,\n kListener,\n kStatusCode,\n kWebSocket,\n NOOP\n} = require('./constants');\nconst {\n EventTarget: { addEventListener, removeEventListener }\n} = require('./event-target');\nconst { format, parse } = require('./extension');\nconst { toBuffer } = require('./buffer-util');\n\nconst closeTimeout = 30 * 1000;\nconst kAborted = Symbol('kAborted');\nconst protocolVersions = [8, 13];\nconst readyStates = ['CONNECTING', 'OPEN', 'CLOSING', 'CLOSED'];\nconst subprotocolRegex = /^[!#$%&'*+\\-.0-9A-Z^_`|a-z~]+$/;\n\n/**\n * Class representing a WebSocket.\n *\n * @extends EventEmitter\n */\nclass WebSocket extends EventEmitter {\n /**\n * Create a new `WebSocket`.\n *\n * @param {(String|URL)} address The URL to which to connect\n * @param {(String|String[])} [protocols] The subprotocols\n * @param {Object} [options] Connection options\n */\n constructor(address, protocols, options) {\n super();\n\n this._binaryType = BINARY_TYPES[0];\n this._closeCode = 1006;\n this._closeFrameReceived = false;\n this._closeFrameSent = false;\n this._closeMessage = EMPTY_BUFFER;\n this._closeTimer = null;\n this._errorEmitted = false;\n this._extensions = {};\n this._paused = false;\n this._protocol = '';\n this._readyState = WebSocket.CONNECTING;\n this._receiver = null;\n this._sender = null;\n this._socket = null;\n\n if (address !== null) {\n this._bufferedAmount = 0;\n this._isServer = false;\n this._redirects = 0;\n\n if (protocols === undefined) {\n protocols = [];\n } else if (!Array.isArray(protocols)) {\n if (typeof protocols === 'object' && protocols !== null) {\n options = protocols;\n protocols = [];\n } else {\n protocols = [protocols];\n }\n }\n\n initAsClient(this, address, protocols, options);\n } else {\n this._autoPong = options.autoPong;\n this._isServer = true;\n }\n }\n\n /**\n * For historical reasons, the custom \"nodebuffer\" type is used by the default\n * instead of \"blob\".\n *\n * @type {String}\n */\n get binaryType() {\n return this._binaryType;\n }\n\n set binaryType(type) {\n if (!BINARY_TYPES.includes(type)) return;\n\n this._binaryType = type;\n\n //\n // Allow to change `binaryType` on the fly.\n //\n if (this._receiver) this._receiver._binaryType = type;\n }\n\n /**\n * @type {Number}\n */\n get bufferedAmount() {\n if (!this._socket) return this._bufferedAmount;\n\n return this._socket._writableState.length + this._sender._bufferedBytes;\n }\n\n /**\n * @type {String}\n */\n get extensions() {\n return Object.keys(this._extensions).join();\n }\n\n /**\n * @type {Boolean}\n */\n get isPaused() {\n return this._paused;\n }\n\n /**\n * @type {Function}\n */\n /* istanbul ignore next */\n get onclose() {\n return null;\n }\n\n /**\n * @type {Function}\n */\n /* istanbul ignore next */\n get onerror() {\n return null;\n }\n\n /**\n * @type {Function}\n */\n /* istanbul ignore next */\n get onopen() {\n return null;\n }\n\n /**\n * @type {Function}\n */\n /* istanbul ignore next */\n get onmessage() {\n return null;\n }\n\n /**\n * @type {String}\n */\n get protocol() {\n return this._protocol;\n }\n\n /**\n * @type {Number}\n */\n get readyState() {\n return this._readyState;\n }\n\n /**\n * @type {String}\n */\n get url() {\n return this._url;\n }\n\n /**\n * Set up the socket and the internal resources.\n *\n * @param {Duplex} socket The network socket between the server and client\n * @param {Buffer} head The first packet of the upgraded stream\n * @param {Object} options Options object\n * @param {Boolean} [options.allowSynchronousEvents=false] Specifies whether\n * any of the `'message'`, `'ping'`, and `'pong'` events can be emitted\n * multiple times in the same tick\n * @param {Function} [options.generateMask] The function used to generate the\n * masking key\n * @param {Number} [options.maxPayload=0] The maximum allowed message size\n * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or\n * not to skip UTF-8 validation for text and close messages\n * @private\n */\n setSocket(socket, head, options) {\n const receiver = new Receiver({\n allowSynchronousEvents: options.allowSynchronousEvents,\n binaryType: this.binaryType,\n extensions: this._extensions,\n isServer: this._isServer,\n maxPayload: options.maxPayload,\n skipUTF8Validation: options.skipUTF8Validation\n });\n\n const sender = new Sender(socket, this._extensions, options.generateMask);\n\n this._receiver = receiver;\n this._sender = sender;\n this._socket = socket;\n\n receiver[kWebSocket] = this;\n sender[kWebSocket] = this;\n socket[kWebSocket] = this;\n\n receiver.on('conclude', receiverOnConclude);\n receiver.on('drain', receiverOnDrain);\n receiver.on('error', receiverOnError);\n receiver.on('message', receiverOnMessage);\n receiver.on('ping', receiverOnPing);\n receiver.on('pong', receiverOnPong);\n\n sender.onerror = senderOnError;\n\n //\n // These methods may not be available if `socket` is just a `Duplex`.\n //\n if (socket.setTimeout) socket.setTimeout(0);\n if (socket.setNoDelay) socket.setNoDelay();\n\n if (head.length > 0) socket.unshift(head);\n\n socket.on('close', socketOnClose);\n socket.on('data', socketOnData);\n socket.on('end', socketOnEnd);\n socket.on('error', socketOnError);\n\n this._readyState = WebSocket.OPEN;\n this.emit('open');\n }\n\n /**\n * Emit the `'close'` event.\n *\n * @private\n */\n emitClose() {\n if (!this._socket) {\n this._readyState = WebSocket.CLOSED;\n this.emit('close', this._closeCode, this._closeMessage);\n return;\n }\n\n if (this._extensions[PerMessageDeflate.extensionName]) {\n this._extensions[PerMessageDeflate.extensionName].cleanup();\n }\n\n this._receiver.removeAllListeners();\n this._readyState = WebSocket.CLOSED;\n this.emit('close', this._closeCode, this._closeMessage);\n }\n\n /**\n * Start a closing handshake.\n *\n * +----------+ +-----------+ +----------+\n * - - -|ws.close()|-->|close frame|-->|ws.close()|- - -\n * | +----------+ +-----------+ +----------+ |\n * +----------+ +-----------+ |\n * CLOSING |ws.close()|<--|close frame|<--+-----+ CLOSING\n * +----------+ +-----------+ |\n * | | | +---+ |\n * +------------------------+-->|fin| - - - -\n * | +---+ | +---+\n * - - - - -|fin|<---------------------+\n * +---+\n *\n * @param {Number} [code] Status code explaining why the connection is closing\n * @param {(String|Buffer)} [data] The reason why the connection is\n * closing\n * @public\n */\n close(code, data) {\n if (this.readyState === WebSocket.CLOSED) return;\n if (this.readyState === WebSocket.CONNECTING) {\n const msg = 'WebSocket was closed before the connection was established';\n abortHandshake(this, this._req, msg);\n return;\n }\n\n if (this.readyState === WebSocket.CLOSING) {\n if (\n this._closeFrameSent &&\n (this._closeFrameReceived || this._receiver._writableState.errorEmitted)\n ) {\n this._socket.end();\n }\n\n return;\n }\n\n this._readyState = WebSocket.CLOSING;\n this._sender.close(code, data, !this._isServer, (err) => {\n //\n // This error is handled by the `'error'` listener on the socket. We only\n // want to know if the close frame has been sent here.\n //\n if (err) return;\n\n this._closeFrameSent = true;\n\n if (\n this._closeFrameReceived ||\n this._receiver._writableState.errorEmitted\n ) {\n this._socket.end();\n }\n });\n\n setCloseTimer(this);\n }\n\n /**\n * Pause the socket.\n *\n * @public\n */\n pause() {\n if (\n this.readyState === WebSocket.CONNECTING ||\n this.readyState === WebSocket.CLOSED\n ) {\n return;\n }\n\n this._paused = true;\n this._socket.pause();\n }\n\n /**\n * Send a ping.\n *\n * @param {*} [data] The data to send\n * @param {Boolean} [mask] Indicates whether or not to mask `data`\n * @param {Function} [cb] Callback which is executed when the ping is sent\n * @public\n */\n ping(data, mask, cb) {\n if (this.readyState === WebSocket.CONNECTING) {\n throw new Error('WebSocket is not open: readyState 0 (CONNECTING)');\n }\n\n if (typeof data === 'function') {\n cb = data;\n data = mask = undefined;\n } else if (typeof mask === 'function') {\n cb = mask;\n mask = undefined;\n }\n\n if (typeof data === 'number') data = data.toString();\n\n if (this.readyState !== WebSocket.OPEN) {\n sendAfterClose(this, data, cb);\n return;\n }\n\n if (mask === undefined) mask = !this._isServer;\n this._sender.ping(data || EMPTY_BUFFER, mask, cb);\n }\n\n /**\n * Send a pong.\n *\n * @param {*} [data] The data to send\n * @param {Boolean} [mask] Indicates whether or not to mask `data`\n * @param {Function} [cb] Callback which is executed when the pong is sent\n * @public\n */\n pong(data, mask, cb) {\n if (this.readyState === WebSocket.CONNECTING) {\n throw new Error('WebSocket is not open: readyState 0 (CONNECTING)');\n }\n\n if (typeof data === 'function') {\n cb = data;\n data = mask = undefined;\n } else if (typeof mask === 'function') {\n cb = mask;\n mask = undefined;\n }\n\n if (typeof data === 'number') data = data.toString();\n\n if (this.readyState !== WebSocket.OPEN) {\n sendAfterClose(this, data, cb);\n return;\n }\n\n if (mask === undefined) mask = !this._isServer;\n this._sender.pong(data || EMPTY_BUFFER, mask, cb);\n }\n\n /**\n * Resume the socket.\n *\n * @public\n */\n resume() {\n if (\n this.readyState === WebSocket.CONNECTING ||\n this.readyState === WebSocket.CLOSED\n ) {\n return;\n }\n\n this._paused = false;\n if (!this._receiver._writableState.needDrain) this._socket.resume();\n }\n\n /**\n * Send a data message.\n *\n * @param {*} data The message to send\n * @param {Object} [options] Options object\n * @param {Boolean} [options.binary] Specifies whether `data` is binary or\n * text\n * @param {Boolean} [options.compress] Specifies whether or not to compress\n * `data`\n * @param {Boolean} [options.fin=true] Specifies whether the fragment is the\n * last one\n * @param {Boolean} [options.mask] Specifies whether or not to mask `data`\n * @param {Function} [cb] Callback which is executed when data is written out\n * @public\n */\n send(data, options, cb) {\n if (this.readyState === WebSocket.CONNECTING) {\n throw new Error('WebSocket is not open: readyState 0 (CONNECTING)');\n }\n\n if (typeof options === 'function') {\n cb = options;\n options = {};\n }\n\n if (typeof data === 'number') data = data.toString();\n\n if (this.readyState !== WebSocket.OPEN) {\n sendAfterClose(this, data, cb);\n return;\n }\n\n const opts = {\n binary: typeof data !== 'string',\n mask: !this._isServer,\n compress: true,\n fin: true,\n ...options\n };\n\n if (!this._extensions[PerMessageDeflate.extensionName]) {\n opts.compress = false;\n }\n\n this._sender.send(data || EMPTY_BUFFER, opts, cb);\n }\n\n /**\n * Forcibly close the connection.\n *\n * @public\n */\n terminate() {\n if (this.readyState === WebSocket.CLOSED) return;\n if (this.readyState === WebSocket.CONNECTING) {\n const msg = 'WebSocket was closed before the connection was established';\n abortHandshake(this, this._req, msg);\n return;\n }\n\n if (this._socket) {\n this._readyState = WebSocket.CLOSING;\n this._socket.destroy();\n }\n }\n}\n\n/**\n * @constant {Number} CONNECTING\n * @memberof WebSocket\n */\nObject.defineProperty(WebSocket, 'CONNECTING', {\n enumerable: true,\n value: readyStates.indexOf('CONNECTING')\n});\n\n/**\n * @constant {Number} CONNECTING\n * @memberof WebSocket.prototype\n */\nObject.defineProperty(WebSocket.prototype, 'CONNECTING', {\n enumerable: true,\n value: readyStates.indexOf('CONNECTING')\n});\n\n/**\n * @constant {Number} OPEN\n * @memberof WebSocket\n */\nObject.defineProperty(WebSocket, 'OPEN', {\n enumerable: true,\n value: readyStates.indexOf('OPEN')\n});\n\n/**\n * @constant {Number} OPEN\n * @memberof WebSocket.prototype\n */\nObject.defineProperty(WebSocket.prototype, 'OPEN', {\n enumerable: true,\n value: readyStates.indexOf('OPEN')\n});\n\n/**\n * @constant {Number} CLOSING\n * @memberof WebSocket\n */\nObject.defineProperty(WebSocket, 'CLOSING', {\n enumerable: true,\n value: readyStates.indexOf('CLOSING')\n});\n\n/**\n * @constant {Number} CLOSING\n * @memberof WebSocket.prototype\n */\nObject.defineProperty(WebSocket.prototype, 'CLOSING', {\n enumerable: true,\n value: readyStates.indexOf('CLOSING')\n});\n\n/**\n * @constant {Number} CLOSED\n * @memberof WebSocket\n */\nObject.defineProperty(WebSocket, 'CLOSED', {\n enumerable: true,\n value: readyStates.indexOf('CLOSED')\n});\n\n/**\n * @constant {Number} CLOSED\n * @memberof WebSocket.prototype\n */\nObject.defineProperty(WebSocket.prototype, 'CLOSED', {\n enumerable: true,\n value: readyStates.indexOf('CLOSED')\n});\n\n[\n 'binaryType',\n 'bufferedAmount',\n 'extensions',\n 'isPaused',\n 'protocol',\n 'readyState',\n 'url'\n].forEach((property) => {\n Object.defineProperty(WebSocket.prototype, property, { enumerable: true });\n});\n\n//\n// Add the `onopen`, `onerror`, `onclose`, and `onmessage` attributes.\n// See https://html.spec.whatwg.org/multipage/comms.html#the-websocket-interface\n//\n['open', 'error', 'close', 'message'].forEach((method) => {\n Object.defineProperty(WebSocket.prototype, `on${method}`, {\n enumerable: true,\n get() {\n for (const listener of this.listeners(method)) {\n if (listener[kForOnEventAttribute]) return listener[kListener];\n }\n\n return null;\n },\n set(handler) {\n for (const listener of this.listeners(method)) {\n if (listener[kForOnEventAttribute]) {\n this.removeListener(method, listener);\n break;\n }\n }\n\n if (typeof handler !== 'function') return;\n\n this.addEventListener(method, handler, {\n [kForOnEventAttribute]: true\n });\n }\n });\n});\n\nWebSocket.prototype.addEventListener = addEventListener;\nWebSocket.prototype.removeEventListener = removeEventListener;\n\nmodule.exports = WebSocket;\n\n/**\n * Initialize a WebSocket client.\n *\n * @param {WebSocket} websocket The client to initialize\n * @param {(String|URL)} address The URL to which to connect\n * @param {Array} protocols The subprotocols\n * @param {Object} [options] Connection options\n * @param {Boolean} [options.allowSynchronousEvents=true] Specifies whether any\n * of the `'message'`, `'ping'`, and `'pong'` events can be emitted multiple\n * times in the same tick\n * @param {Boolean} [options.autoPong=true] Specifies whether or not to\n * automatically send a pong in response to a ping\n * @param {Function} [options.finishRequest] A function which can be used to\n * customize the headers of each http request before it is sent\n * @param {Boolean} [options.followRedirects=false] Whether or not to follow\n * redirects\n * @param {Function} [options.generateMask] The function used to generate the\n * masking key\n * @param {Number} [options.handshakeTimeout] Timeout in milliseconds for the\n * handshake request\n * @param {Number} [options.maxPayload=104857600] The maximum allowed message\n * size\n * @param {Number} [options.maxRedirects=10] The maximum number of redirects\n * allowed\n * @param {String} [options.origin] Value of the `Origin` or\n * `Sec-WebSocket-Origin` header\n * @param {(Boolean|Object)} [options.perMessageDeflate=true] Enable/disable\n * permessage-deflate\n * @param {Number} [options.protocolVersion=13] Value of the\n * `Sec-WebSocket-Version` header\n * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or\n * not to skip UTF-8 validation for text and close messages\n * @private\n */\nfunction initAsClient(websocket, address, protocols, options) {\n const opts = {\n allowSynchronousEvents: true,\n autoPong: true,\n protocolVersion: protocolVersions[1],\n maxPayload: 100 * 1024 * 1024,\n skipUTF8Validation: false,\n perMessageDeflate: true,\n followRedirects: false,\n maxRedirects: 10,\n ...options,\n socketPath: undefined,\n hostname: undefined,\n protocol: undefined,\n timeout: undefined,\n method: 'GET',\n host: undefined,\n path: undefined,\n port: undefined\n };\n\n websocket._autoPong = opts.autoPong;\n\n if (!protocolVersions.includes(opts.protocolVersion)) {\n throw new RangeError(\n `Unsupported protocol version: ${opts.protocolVersion} ` +\n `(supported versions: ${protocolVersions.join(', ')})`\n );\n }\n\n let parsedUrl;\n\n if (address instanceof URL) {\n parsedUrl = address;\n } else {\n try {\n parsedUrl = new URL(address);\n } catch (e) {\n throw new SyntaxError(`Invalid URL: ${address}`);\n }\n }\n\n if (parsedUrl.protocol === 'http:') {\n parsedUrl.protocol = 'ws:';\n } else if (parsedUrl.protocol === 'https:') {\n parsedUrl.protocol = 'wss:';\n }\n\n websocket._url = parsedUrl.href;\n\n const isSecure = parsedUrl.protocol === 'wss:';\n const isIpcUrl = parsedUrl.protocol === 'ws+unix:';\n let invalidUrlMessage;\n\n if (parsedUrl.protocol !== 'ws:' && !isSecure && !isIpcUrl) {\n invalidUrlMessage =\n 'The URL\\'s protocol must be one of \"ws:\", \"wss:\", ' +\n '\"http:\", \"https\", or \"ws+unix:\"';\n } else if (isIpcUrl && !parsedUrl.pathname) {\n invalidUrlMessage = \"The URL's pathname is empty\";\n } else if (parsedUrl.hash) {\n invalidUrlMessage = 'The URL contains a fragment identifier';\n }\n\n if (invalidUrlMessage) {\n const err = new SyntaxError(invalidUrlMessage);\n\n if (websocket._redirects === 0) {\n throw err;\n } else {\n emitErrorAndClose(websocket, err);\n return;\n }\n }\n\n const defaultPort = isSecure ? 443 : 80;\n const key = randomBytes(16).toString('base64');\n const request = isSecure ? https.request : http.request;\n const protocolSet = new Set();\n let perMessageDeflate;\n\n opts.createConnection =\n opts.createConnection || (isSecure ? tlsConnect : netConnect);\n opts.defaultPort = opts.defaultPort || defaultPort;\n opts.port = parsedUrl.port || defaultPort;\n opts.host = parsedUrl.hostname.startsWith('[')\n ? parsedUrl.hostname.slice(1, -1)\n : parsedUrl.hostname;\n opts.headers = {\n ...opts.headers,\n 'Sec-WebSocket-Version': opts.protocolVersion,\n 'Sec-WebSocket-Key': key,\n Connection: 'Upgrade',\n Upgrade: 'websocket'\n };\n opts.path = parsedUrl.pathname + parsedUrl.search;\n opts.timeout = opts.handshakeTimeout;\n\n if (opts.perMessageDeflate) {\n perMessageDeflate = new PerMessageDeflate(\n opts.perMessageDeflate !== true ? opts.perMessageDeflate : {},\n false,\n opts.maxPayload\n );\n opts.headers['Sec-WebSocket-Extensions'] = format({\n [PerMessageDeflate.extensionName]: perMessageDeflate.offer()\n });\n }\n if (protocols.length) {\n for (const protocol of protocols) {\n if (\n typeof protocol !== 'string' ||\n !subprotocolRegex.test(protocol) ||\n protocolSet.has(protocol)\n ) {\n throw new SyntaxError(\n 'An invalid or duplicated subprotocol was specified'\n );\n }\n\n protocolSet.add(protocol);\n }\n\n opts.headers['Sec-WebSocket-Protocol'] = protocols.join(',');\n }\n if (opts.origin) {\n if (opts.protocolVersion < 13) {\n opts.headers['Sec-WebSocket-Origin'] = opts.origin;\n } else {\n opts.headers.Origin = opts.origin;\n }\n }\n if (parsedUrl.username || parsedUrl.password) {\n opts.auth = `${parsedUrl.username}:${parsedUrl.password}`;\n }\n\n if (isIpcUrl) {\n const parts = opts.path.split(':');\n\n opts.socketPath = parts[0];\n opts.path = parts[1];\n }\n\n let req;\n\n if (opts.followRedirects) {\n if (websocket._redirects === 0) {\n websocket._originalIpc = isIpcUrl;\n websocket._originalSecure = isSecure;\n websocket._originalHostOrSocketPath = isIpcUrl\n ? opts.socketPath\n : parsedUrl.host;\n\n const headers = options && options.headers;\n\n //\n // Shallow copy the user provided options so that headers can be changed\n // without mutating the original object.\n //\n options = { ...options, headers: {} };\n\n if (headers) {\n for (const [key, value] of Object.entries(headers)) {\n options.headers[key.toLowerCase()] = value;\n }\n }\n } else if (websocket.listenerCount('redirect') === 0) {\n const isSameHost = isIpcUrl\n ? websocket._originalIpc\n ? opts.socketPath === websocket._originalHostOrSocketPath\n : false\n : websocket._originalIpc\n ? false\n : parsedUrl.host === websocket._originalHostOrSocketPath;\n\n if (!isSameHost || (websocket._originalSecure && !isSecure)) {\n //\n // Match curl 7.77.0 behavior and drop the following headers. These\n // headers are also dropped when following a redirect to a subdomain.\n //\n delete opts.headers.authorization;\n delete opts.headers.cookie;\n\n if (!isSameHost) delete opts.headers.host;\n\n opts.auth = undefined;\n }\n }\n\n //\n // Match curl 7.77.0 behavior and make the first `Authorization` header win.\n // If the `Authorization` header is set, then there is nothing to do as it\n // will take precedence.\n //\n if (opts.auth && !options.headers.authorization) {\n options.headers.authorization =\n 'Basic ' + Buffer.from(opts.auth).toString('base64');\n }\n\n req = websocket._req = request(opts);\n\n if (websocket._redirects) {\n //\n // Unlike what is done for the `'upgrade'` event, no early exit is\n // triggered here if the user calls `websocket.close()` or\n // `websocket.terminate()` from a listener of the `'redirect'` event. This\n // is because the user can also call `request.destroy()` with an error\n // before calling `websocket.close()` or `websocket.terminate()` and this\n // would result in an error being emitted on the `request` object with no\n // `'error'` event listeners attached.\n //\n websocket.emit('redirect', websocket.url, req);\n }\n } else {\n req = websocket._req = request(opts);\n }\n\n if (opts.timeout) {\n req.on('timeout', () => {\n abortHandshake(websocket, req, 'Opening handshake has timed out');\n });\n }\n\n req.on('error', (err) => {\n if (req === null || req[kAborted]) return;\n\n req = websocket._req = null;\n emitErrorAndClose(websocket, err);\n });\n\n req.on('response', (res) => {\n const location = res.headers.location;\n const statusCode = res.statusCode;\n\n if (\n location &&\n opts.followRedirects &&\n statusCode >= 300 &&\n statusCode < 400\n ) {\n if (++websocket._redirects > opts.maxRedirects) {\n abortHandshake(websocket, req, 'Maximum redirects exceeded');\n return;\n }\n\n req.abort();\n\n let addr;\n\n try {\n addr = new URL(location, address);\n } catch (e) {\n const err = new SyntaxError(`Invalid URL: ${location}`);\n emitErrorAndClose(websocket, err);\n return;\n }\n\n initAsClient(websocket, addr, protocols, options);\n } else if (!websocket.emit('unexpected-response', req, res)) {\n abortHandshake(\n websocket,\n req,\n `Unexpected server response: ${res.statusCode}`\n );\n }\n });\n\n req.on('upgrade', (res, socket, head) => {\n websocket.emit('upgrade', res);\n\n //\n // The user may have closed the connection from a listener of the\n // `'upgrade'` event.\n //\n if (websocket.readyState !== WebSocket.CONNECTING) return;\n\n req = websocket._req = null;\n\n const upgrade = res.headers.upgrade;\n\n if (upgrade === undefined || upgrade.toLowerCase() !== 'websocket') {\n abortHandshake(websocket, socket, 'Invalid Upgrade header');\n return;\n }\n\n const digest = createHash('sha1')\n .update(key + GUID)\n .digest('base64');\n\n if (res.headers['sec-websocket-accept'] !== digest) {\n abortHandshake(websocket, socket, 'Invalid Sec-WebSocket-Accept header');\n return;\n }\n\n const serverProt = res.headers['sec-websocket-protocol'];\n let protError;\n\n if (serverProt !== undefined) {\n if (!protocolSet.size) {\n protError = 'Server sent a subprotocol but none was requested';\n } else if (!protocolSet.has(serverProt)) {\n protError = 'Server sent an invalid subprotocol';\n }\n } else if (protocolSet.size) {\n protError = 'Server sent no subprotocol';\n }\n\n if (protError) {\n abortHandshake(websocket, socket, protError);\n return;\n }\n\n if (serverProt) websocket._protocol = serverProt;\n\n const secWebSocketExtensions = res.headers['sec-websocket-extensions'];\n\n if (secWebSocketExtensions !== undefined) {\n if (!perMessageDeflate) {\n const message =\n 'Server sent a Sec-WebSocket-Extensions header but no extension ' +\n 'was requested';\n abortHandshake(websocket, socket, message);\n return;\n }\n\n let extensions;\n\n try {\n extensions = parse(secWebSocketExtensions);\n } catch (err) {\n const message = 'Invalid Sec-WebSocket-Extensions header';\n abortHandshake(websocket, socket, message);\n return;\n }\n\n const extensionNames = Object.keys(extensions);\n\n if (\n extensionNames.length !== 1 ||\n extensionNames[0] !== PerMessageDeflate.extensionName\n ) {\n const message = 'Server indicated an extension that was not requested';\n abortHandshake(websocket, socket, message);\n return;\n }\n\n try {\n perMessageDeflate.accept(extensions[PerMessageDeflate.extensionName]);\n } catch (err) {\n const message = 'Invalid Sec-WebSocket-Extensions header';\n abortHandshake(websocket, socket, message);\n return;\n }\n\n websocket._extensions[PerMessageDeflate.extensionName] =\n perMessageDeflate;\n }\n\n websocket.setSocket(socket, head, {\n allowSynchronousEvents: opts.allowSynchronousEvents,\n generateMask: opts.generateMask,\n maxPayload: opts.maxPayload,\n skipUTF8Validation: opts.skipUTF8Validation\n });\n });\n\n if (opts.finishRequest) {\n opts.finishRequest(req, websocket);\n } else {\n req.end();\n }\n}\n\n/**\n * Emit the `'error'` and `'close'` events.\n *\n * @param {WebSocket} websocket The WebSocket instance\n * @param {Error} The error to emit\n * @private\n */\nfunction emitErrorAndClose(websocket, err) {\n websocket._readyState = WebSocket.CLOSING;\n //\n // The following assignment is practically useless and is done only for\n // consistency.\n //\n websocket._errorEmitted = true;\n websocket.emit('error', err);\n websocket.emitClose();\n}\n\n/**\n * Create a `net.Socket` and initiate a connection.\n *\n * @param {Object} options Connection options\n * @return {net.Socket} The newly created socket used to start the connection\n * @private\n */\nfunction netConnect(options) {\n options.path = options.socketPath;\n return net.connect(options);\n}\n\n/**\n * Create a `tls.TLSSocket` and initiate a connection.\n *\n * @param {Object} options Connection options\n * @return {tls.TLSSocket} The newly created socket used to start the connection\n * @private\n */\nfunction tlsConnect(options) {\n options.path = undefined;\n\n if (!options.servername && options.servername !== '') {\n options.servername = net.isIP(options.host) ? '' : options.host;\n }\n\n return tls.connect(options);\n}\n\n/**\n * Abort the handshake and emit an error.\n *\n * @param {WebSocket} websocket The WebSocket instance\n * @param {(http.ClientRequest|net.Socket|tls.Socket)} stream The request to\n * abort or the socket to destroy\n * @param {String} message The error message\n * @private\n */\nfunction abortHandshake(websocket, stream, message) {\n websocket._readyState = WebSocket.CLOSING;\n\n const err = new Error(message);\n Error.captureStackTrace(err, abortHandshake);\n\n if (stream.setHeader) {\n stream[kAborted] = true;\n stream.abort();\n\n if (stream.socket && !stream.socket.destroyed) {\n //\n // On Node.js >= 14.3.0 `request.abort()` does not destroy the socket if\n // called after the request completed. See\n // https://github.com/websockets/ws/issues/1869.\n //\n stream.socket.destroy();\n }\n\n process.nextTick(emitErrorAndClose, websocket, err);\n } else {\n stream.destroy(err);\n stream.once('error', websocket.emit.bind(websocket, 'error'));\n stream.once('close', websocket.emitClose.bind(websocket));\n }\n}\n\n/**\n * Handle cases where the `ping()`, `pong()`, or `send()` methods are called\n * when the `readyState` attribute is `CLOSING` or `CLOSED`.\n *\n * @param {WebSocket} websocket The WebSocket instance\n * @param {*} [data] The data to send\n * @param {Function} [cb] Callback\n * @private\n */\nfunction sendAfterClose(websocket, data, cb) {\n if (data) {\n const length = isBlob(data) ? data.size : toBuffer(data).length;\n\n //\n // The `_bufferedAmount` property is used only when the peer is a client and\n // the opening handshake fails. Under these circumstances, in fact, the\n // `setSocket()` method is not called, so the `_socket` and `_sender`\n // properties are set to `null`.\n //\n if (websocket._socket) websocket._sender._bufferedBytes += length;\n else websocket._bufferedAmount += length;\n }\n\n if (cb) {\n const err = new Error(\n `WebSocket is not open: readyState ${websocket.readyState} ` +\n `(${readyStates[websocket.readyState]})`\n );\n process.nextTick(cb, err);\n }\n}\n\n/**\n * The listener of the `Receiver` `'conclude'` event.\n *\n * @param {Number} code The status code\n * @param {Buffer} reason The reason for closing\n * @private\n */\nfunction receiverOnConclude(code, reason) {\n const websocket = this[kWebSocket];\n\n websocket._closeFrameReceived = true;\n websocket._closeMessage = reason;\n websocket._closeCode = code;\n\n if (websocket._socket[kWebSocket] === undefined) return;\n\n websocket._socket.removeListener('data', socketOnData);\n process.nextTick(resume, websocket._socket);\n\n if (code === 1005) websocket.close();\n else websocket.close(code, reason);\n}\n\n/**\n * The listener of the `Receiver` `'drain'` event.\n *\n * @private\n */\nfunction receiverOnDrain() {\n const websocket = this[kWebSocket];\n\n if (!websocket.isPaused) websocket._socket.resume();\n}\n\n/**\n * The listener of the `Receiver` `'error'` event.\n *\n * @param {(RangeError|Error)} err The emitted error\n * @private\n */\nfunction receiverOnError(err) {\n const websocket = this[kWebSocket];\n\n if (websocket._socket[kWebSocket] !== undefined) {\n websocket._socket.removeListener('data', socketOnData);\n\n //\n // On Node.js < 14.0.0 the `'error'` event is emitted synchronously. See\n // https://github.com/websockets/ws/issues/1940.\n //\n process.nextTick(resume, websocket._socket);\n\n websocket.close(err[kStatusCode]);\n }\n\n if (!websocket._errorEmitted) {\n websocket._errorEmitted = true;\n websocket.emit('error', err);\n }\n}\n\n/**\n * The listener of the `Receiver` `'finish'` event.\n *\n * @private\n */\nfunction receiverOnFinish() {\n this[kWebSocket].emitClose();\n}\n\n/**\n * The listener of the `Receiver` `'message'` event.\n *\n * @param {Buffer|ArrayBuffer|Buffer[])} data The message\n * @param {Boolean} isBinary Specifies whether the message is binary or not\n * @private\n */\nfunction receiverOnMessage(data, isBinary) {\n this[kWebSocket].emit('message', data, isBinary);\n}\n\n/**\n * The listener of the `Receiver` `'ping'` event.\n *\n * @param {Buffer} data The data included in the ping frame\n * @private\n */\nfunction receiverOnPing(data) {\n const websocket = this[kWebSocket];\n\n if (websocket._autoPong) websocket.pong(data, !this._isServer, NOOP);\n websocket.emit('ping', data);\n}\n\n/**\n * The listener of the `Receiver` `'pong'` event.\n *\n * @param {Buffer} data The data included in the pong frame\n * @private\n */\nfunction receiverOnPong(data) {\n this[kWebSocket].emit('pong', data);\n}\n\n/**\n * Resume a readable stream\n *\n * @param {Readable} stream The readable stream\n * @private\n */\nfunction resume(stream) {\n stream.resume();\n}\n\n/**\n * The `Sender` error event handler.\n *\n * @param {Error} The error\n * @private\n */\nfunction senderOnError(err) {\n const websocket = this[kWebSocket];\n\n if (websocket.readyState === WebSocket.CLOSED) return;\n if (websocket.readyState === WebSocket.OPEN) {\n websocket._readyState = WebSocket.CLOSING;\n setCloseTimer(websocket);\n }\n\n //\n // `socket.end()` is used instead of `socket.destroy()` to allow the other\n // peer to finish sending queued data. There is no need to set a timer here\n // because `CLOSING` means that it is already set or not needed.\n //\n this._socket.end();\n\n if (!websocket._errorEmitted) {\n websocket._errorEmitted = true;\n websocket.emit('error', err);\n }\n}\n\n/**\n * Set a timer to destroy the underlying raw socket of a WebSocket.\n *\n * @param {WebSocket} websocket The WebSocket instance\n * @private\n */\nfunction setCloseTimer(websocket) {\n websocket._closeTimer = setTimeout(\n websocket._socket.destroy.bind(websocket._socket),\n closeTimeout\n );\n}\n\n/**\n * The listener of the socket `'close'` event.\n *\n * @private\n */\nfunction socketOnClose() {\n const websocket = this[kWebSocket];\n\n this.removeListener('close', socketOnClose);\n this.removeListener('data', socketOnData);\n this.removeListener('end', socketOnEnd);\n\n websocket._readyState = WebSocket.CLOSING;\n\n let chunk;\n\n //\n // The close frame might not have been received or the `'end'` event emitted,\n // for example, if the socket was destroyed due to an error. Ensure that the\n // `receiver` stream is closed after writing any remaining buffered data to\n // it. If the readable side of the socket is in flowing mode then there is no\n // buffered data as everything has been already written and `readable.read()`\n // will return `null`. If instead, the socket is paused, any possible buffered\n // data will be read as a single chunk.\n //\n if (\n !this._readableState.endEmitted &&\n !websocket._closeFrameReceived &&\n !websocket._receiver._writableState.errorEmitted &&\n (chunk = websocket._socket.read()) !== null\n ) {\n websocket._receiver.write(chunk);\n }\n\n websocket._receiver.end();\n\n this[kWebSocket] = undefined;\n\n clearTimeout(websocket._closeTimer);\n\n if (\n websocket._receiver._writableState.finished ||\n websocket._receiver._writableState.errorEmitted\n ) {\n websocket.emitClose();\n } else {\n websocket._receiver.on('error', receiverOnFinish);\n websocket._receiver.on('finish', receiverOnFinish);\n }\n}\n\n/**\n * The listener of the socket `'data'` event.\n *\n * @param {Buffer} chunk A chunk of data\n * @private\n */\nfunction socketOnData(chunk) {\n if (!this[kWebSocket]._receiver.write(chunk)) {\n this.pause();\n }\n}\n\n/**\n * The listener of the socket `'end'` event.\n *\n * @private\n */\nfunction socketOnEnd() {\n const websocket = this[kWebSocket];\n\n websocket._readyState = WebSocket.CLOSING;\n websocket._receiver.end();\n this.end();\n}\n\n/**\n * The listener of the socket `'error'` event.\n *\n * @private\n */\nfunction socketOnError() {\n const websocket = this[kWebSocket];\n\n this.removeListener('error', socketOnError);\n this.on('error', NOOP);\n\n if (websocket) {\n websocket._readyState = WebSocket.CLOSING;\n this.destroy();\n }\n}\n","'use strict';\n\nconst { tokenChars } = require('./validation');\n\n/**\n * Parses the `Sec-WebSocket-Protocol` header into a set of subprotocol names.\n *\n * @param {String} header The field value of the header\n * @return {Set} The subprotocol names\n * @public\n */\nfunction parse(header) {\n const protocols = new Set();\n let start = -1;\n let end = -1;\n let i = 0;\n\n for (i; i < header.length; i++) {\n const code = header.charCodeAt(i);\n\n if (end === -1 && tokenChars[code] === 1) {\n if (start === -1) start = i;\n } else if (\n i !== 0 &&\n (code === 0x20 /* ' ' */ || code === 0x09) /* '\\t' */\n ) {\n if (end === -1 && start !== -1) end = i;\n } else if (code === 0x2c /* ',' */) {\n if (start === -1) {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n\n if (end === -1) end = i;\n\n const protocol = header.slice(start, end);\n\n if (protocols.has(protocol)) {\n throw new SyntaxError(`The \"${protocol}\" subprotocol is duplicated`);\n }\n\n protocols.add(protocol);\n start = end = -1;\n } else {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n }\n\n if (start === -1 || end !== -1) {\n throw new SyntaxError('Unexpected end of input');\n }\n\n const protocol = header.slice(start, i);\n\n if (protocols.has(protocol)) {\n throw new SyntaxError(`The \"${protocol}\" subprotocol is duplicated`);\n }\n\n protocols.add(protocol);\n return protocols;\n}\n\nmodule.exports = { parse };\n","/* eslint no-unused-vars: [\"error\", { \"varsIgnorePattern\": \"^Duplex$\", \"caughtErrors\": \"none\" }] */\n\n'use strict';\n\nconst EventEmitter = require('events');\nconst http = require('http');\nconst { Duplex } = require('stream');\nconst { createHash } = require('crypto');\n\nconst extension = require('./extension');\nconst PerMessageDeflate = require('./permessage-deflate');\nconst subprotocol = require('./subprotocol');\nconst WebSocket = require('./websocket');\nconst { GUID, kWebSocket } = require('./constants');\n\nconst keyRegex = /^[+/0-9A-Za-z]{22}==$/;\n\nconst RUNNING = 0;\nconst CLOSING = 1;\nconst CLOSED = 2;\n\n/**\n * Class representing a WebSocket server.\n *\n * @extends EventEmitter\n */\nclass WebSocketServer extends EventEmitter {\n /**\n * Create a `WebSocketServer` instance.\n *\n * @param {Object} options Configuration options\n * @param {Boolean} [options.allowSynchronousEvents=true] Specifies whether\n * any of the `'message'`, `'ping'`, and `'pong'` events can be emitted\n * multiple times in the same tick\n * @param {Boolean} [options.autoPong=true] Specifies whether or not to\n * automatically send a pong in response to a ping\n * @param {Number} [options.backlog=511] The maximum length of the queue of\n * pending connections\n * @param {Boolean} [options.clientTracking=true] Specifies whether or not to\n * track clients\n * @param {Function} [options.handleProtocols] A hook to handle protocols\n * @param {String} [options.host] The hostname where to bind the server\n * @param {Number} [options.maxPayload=104857600] The maximum allowed message\n * size\n * @param {Boolean} [options.noServer=false] Enable no server mode\n * @param {String} [options.path] Accept only connections matching this path\n * @param {(Boolean|Object)} [options.perMessageDeflate=false] Enable/disable\n * permessage-deflate\n * @param {Number} [options.port] The port where to bind the server\n * @param {(http.Server|https.Server)} [options.server] A pre-created HTTP/S\n * server to use\n * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or\n * not to skip UTF-8 validation for text and close messages\n * @param {Function} [options.verifyClient] A hook to reject connections\n * @param {Function} [options.WebSocket=WebSocket] Specifies the `WebSocket`\n * class to use. It must be the `WebSocket` class or class that extends it\n * @param {Function} [callback] A listener for the `listening` event\n */\n constructor(options, callback) {\n super();\n\n options = {\n allowSynchronousEvents: true,\n autoPong: true,\n maxPayload: 100 * 1024 * 1024,\n skipUTF8Validation: false,\n perMessageDeflate: false,\n handleProtocols: null,\n clientTracking: true,\n verifyClient: null,\n noServer: false,\n backlog: null, // use default (511 as implemented in net.js)\n server: null,\n host: null,\n path: null,\n port: null,\n WebSocket,\n ...options\n };\n\n if (\n (options.port == null && !options.server && !options.noServer) ||\n (options.port != null && (options.server || options.noServer)) ||\n (options.server && options.noServer)\n ) {\n throw new TypeError(\n 'One and only one of the \"port\", \"server\", or \"noServer\" options ' +\n 'must be specified'\n );\n }\n\n if (options.port != null) {\n this._server = http.createServer((req, res) => {\n const body = http.STATUS_CODES[426];\n\n res.writeHead(426, {\n 'Content-Length': body.length,\n 'Content-Type': 'text/plain'\n });\n res.end(body);\n });\n this._server.listen(\n options.port,\n options.host,\n options.backlog,\n callback\n );\n } else if (options.server) {\n this._server = options.server;\n }\n\n if (this._server) {\n const emitConnection = this.emit.bind(this, 'connection');\n\n this._removeListeners = addListeners(this._server, {\n listening: this.emit.bind(this, 'listening'),\n error: this.emit.bind(this, 'error'),\n upgrade: (req, socket, head) => {\n this.handleUpgrade(req, socket, head, emitConnection);\n }\n });\n }\n\n if (options.perMessageDeflate === true) options.perMessageDeflate = {};\n if (options.clientTracking) {\n this.clients = new Set();\n this._shouldEmitClose = false;\n }\n\n this.options = options;\n this._state = RUNNING;\n }\n\n /**\n * Returns the bound address, the address family name, and port of the server\n * as reported by the operating system if listening on an IP socket.\n * If the server is listening on a pipe or UNIX domain socket, the name is\n * returned as a string.\n *\n * @return {(Object|String|null)} The address of the server\n * @public\n */\n address() {\n if (this.options.noServer) {\n throw new Error('The server is operating in \"noServer\" mode');\n }\n\n if (!this._server) return null;\n return this._server.address();\n }\n\n /**\n * Stop the server from accepting new connections and emit the `'close'` event\n * when all existing connections are closed.\n *\n * @param {Function} [cb] A one-time listener for the `'close'` event\n * @public\n */\n close(cb) {\n if (this._state === CLOSED) {\n if (cb) {\n this.once('close', () => {\n cb(new Error('The server is not running'));\n });\n }\n\n process.nextTick(emitClose, this);\n return;\n }\n\n if (cb) this.once('close', cb);\n\n if (this._state === CLOSING) return;\n this._state = CLOSING;\n\n if (this.options.noServer || this.options.server) {\n if (this._server) {\n this._removeListeners();\n this._removeListeners = this._server = null;\n }\n\n if (this.clients) {\n if (!this.clients.size) {\n process.nextTick(emitClose, this);\n } else {\n this._shouldEmitClose = true;\n }\n } else {\n process.nextTick(emitClose, this);\n }\n } else {\n const server = this._server;\n\n this._removeListeners();\n this._removeListeners = this._server = null;\n\n //\n // The HTTP/S server was created internally. Close it, and rely on its\n // `'close'` event.\n //\n server.close(() => {\n emitClose(this);\n });\n }\n }\n\n /**\n * See if a given request should be handled by this server instance.\n *\n * @param {http.IncomingMessage} req Request object to inspect\n * @return {Boolean} `true` if the request is valid, else `false`\n * @public\n */\n shouldHandle(req) {\n if (this.options.path) {\n const index = req.url.indexOf('?');\n const pathname = index !== -1 ? req.url.slice(0, index) : req.url;\n\n if (pathname !== this.options.path) return false;\n }\n\n return true;\n }\n\n /**\n * Handle a HTTP Upgrade request.\n *\n * @param {http.IncomingMessage} req The request object\n * @param {Duplex} socket The network socket between the server and client\n * @param {Buffer} head The first packet of the upgraded stream\n * @param {Function} cb Callback\n * @public\n */\n handleUpgrade(req, socket, head, cb) {\n socket.on('error', socketOnError);\n\n const key = req.headers['sec-websocket-key'];\n const upgrade = req.headers.upgrade;\n const version = +req.headers['sec-websocket-version'];\n\n if (req.method !== 'GET') {\n const message = 'Invalid HTTP method';\n abortHandshakeOrEmitwsClientError(this, req, socket, 405, message);\n return;\n }\n\n if (upgrade === undefined || upgrade.toLowerCase() !== 'websocket') {\n const message = 'Invalid Upgrade header';\n abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);\n return;\n }\n\n if (key === undefined || !keyRegex.test(key)) {\n const message = 'Missing or invalid Sec-WebSocket-Key header';\n abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);\n return;\n }\n\n if (version !== 8 && version !== 13) {\n const message = 'Missing or invalid Sec-WebSocket-Version header';\n abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);\n return;\n }\n\n if (!this.shouldHandle(req)) {\n abortHandshake(socket, 400);\n return;\n }\n\n const secWebSocketProtocol = req.headers['sec-websocket-protocol'];\n let protocols = new Set();\n\n if (secWebSocketProtocol !== undefined) {\n try {\n protocols = subprotocol.parse(secWebSocketProtocol);\n } catch (err) {\n const message = 'Invalid Sec-WebSocket-Protocol header';\n abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);\n return;\n }\n }\n\n const secWebSocketExtensions = req.headers['sec-websocket-extensions'];\n const extensions = {};\n\n if (\n this.options.perMessageDeflate &&\n secWebSocketExtensions !== undefined\n ) {\n const perMessageDeflate = new PerMessageDeflate(\n this.options.perMessageDeflate,\n true,\n this.options.maxPayload\n );\n\n try {\n const offers = extension.parse(secWebSocketExtensions);\n\n if (offers[PerMessageDeflate.extensionName]) {\n perMessageDeflate.accept(offers[PerMessageDeflate.extensionName]);\n extensions[PerMessageDeflate.extensionName] = perMessageDeflate;\n }\n } catch (err) {\n const message =\n 'Invalid or unacceptable Sec-WebSocket-Extensions header';\n abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);\n return;\n }\n }\n\n //\n // Optionally call external client verification handler.\n //\n if (this.options.verifyClient) {\n const info = {\n origin:\n req.headers[`${version === 8 ? 'sec-websocket-origin' : 'origin'}`],\n secure: !!(req.socket.authorized || req.socket.encrypted),\n req\n };\n\n if (this.options.verifyClient.length === 2) {\n this.options.verifyClient(info, (verified, code, message, headers) => {\n if (!verified) {\n return abortHandshake(socket, code || 401, message, headers);\n }\n\n this.completeUpgrade(\n extensions,\n key,\n protocols,\n req,\n socket,\n head,\n cb\n );\n });\n return;\n }\n\n if (!this.options.verifyClient(info)) return abortHandshake(socket, 401);\n }\n\n this.completeUpgrade(extensions, key, protocols, req, socket, head, cb);\n }\n\n /**\n * Upgrade the connection to WebSocket.\n *\n * @param {Object} extensions The accepted extensions\n * @param {String} key The value of the `Sec-WebSocket-Key` header\n * @param {Set} protocols The subprotocols\n * @param {http.IncomingMessage} req The request object\n * @param {Duplex} socket The network socket between the server and client\n * @param {Buffer} head The first packet of the upgraded stream\n * @param {Function} cb Callback\n * @throws {Error} If called more than once with the same socket\n * @private\n */\n completeUpgrade(extensions, key, protocols, req, socket, head, cb) {\n //\n // Destroy the socket if the client has already sent a FIN packet.\n //\n if (!socket.readable || !socket.writable) return socket.destroy();\n\n if (socket[kWebSocket]) {\n throw new Error(\n 'server.handleUpgrade() was called more than once with the same ' +\n 'socket, possibly due to a misconfiguration'\n );\n }\n\n if (this._state > RUNNING) return abortHandshake(socket, 503);\n\n const digest = createHash('sha1')\n .update(key + GUID)\n .digest('base64');\n\n const headers = [\n 'HTTP/1.1 101 Switching Protocols',\n 'Upgrade: websocket',\n 'Connection: Upgrade',\n `Sec-WebSocket-Accept: ${digest}`\n ];\n\n const ws = new this.options.WebSocket(null, undefined, this.options);\n\n if (protocols.size) {\n //\n // Optionally call external protocol selection handler.\n //\n const protocol = this.options.handleProtocols\n ? this.options.handleProtocols(protocols, req)\n : protocols.values().next().value;\n\n if (protocol) {\n headers.push(`Sec-WebSocket-Protocol: ${protocol}`);\n ws._protocol = protocol;\n }\n }\n\n if (extensions[PerMessageDeflate.extensionName]) {\n const params = extensions[PerMessageDeflate.extensionName].params;\n const value = extension.format({\n [PerMessageDeflate.extensionName]: [params]\n });\n headers.push(`Sec-WebSocket-Extensions: ${value}`);\n ws._extensions = extensions;\n }\n\n //\n // Allow external modification/inspection of handshake headers.\n //\n this.emit('headers', headers, req);\n\n socket.write(headers.concat('\\r\\n').join('\\r\\n'));\n socket.removeListener('error', socketOnError);\n\n ws.setSocket(socket, head, {\n allowSynchronousEvents: this.options.allowSynchronousEvents,\n maxPayload: this.options.maxPayload,\n skipUTF8Validation: this.options.skipUTF8Validation\n });\n\n if (this.clients) {\n this.clients.add(ws);\n ws.on('close', () => {\n this.clients.delete(ws);\n\n if (this._shouldEmitClose && !this.clients.size) {\n process.nextTick(emitClose, this);\n }\n });\n }\n\n cb(ws, req);\n }\n}\n\nmodule.exports = WebSocketServer;\n\n/**\n * Add event listeners on an `EventEmitter` using a map of <event, listener>\n * pairs.\n *\n * @param {EventEmitter} server The event emitter\n * @param {Object.<String, Function>} map The listeners to add\n * @return {Function} A function that will remove the added listeners when\n * called\n * @private\n */\nfunction addListeners(server, map) {\n for (const event of Object.keys(map)) server.on(event, map[event]);\n\n return function removeListeners() {\n for (const event of Object.keys(map)) {\n server.removeListener(event, map[event]);\n }\n };\n}\n\n/**\n * Emit a `'close'` event on an `EventEmitter`.\n *\n * @param {EventEmitter} server The event emitter\n * @private\n */\nfunction emitClose(server) {\n server._state = CLOSED;\n server.emit('close');\n}\n\n/**\n * Handle socket errors.\n *\n * @private\n */\nfunction socketOnError() {\n this.destroy();\n}\n\n/**\n * Close the connection when preconditions are not fulfilled.\n *\n * @param {Duplex} socket The socket of the upgrade request\n * @param {Number} code The HTTP response status code\n * @param {String} [message] The HTTP response body\n * @param {Object} [headers] Additional HTTP response headers\n * @private\n */\nfunction abortHandshake(socket, code, message, headers) {\n //\n // The socket is writable unless the user destroyed or ended it before calling\n // `server.handleUpgrade()` or in the `verifyClient` function, which is a user\n // error. Handling this does not make much sense as the worst that can happen\n // is that some of the data written by the user might be discarded due to the\n // call to `socket.end()` below, which triggers an `'error'` event that in\n // turn causes the socket to be destroyed.\n //\n message = message || http.STATUS_CODES[code];\n headers = {\n Connection: 'close',\n 'Content-Type': 'text/html',\n 'Content-Length': Buffer.byteLength(message),\n ...headers\n };\n\n socket.once('finish', socket.destroy);\n\n socket.end(\n `HTTP/1.1 ${code} ${http.STATUS_CODES[code]}\\r\\n` +\n Object.keys(headers)\n .map((h) => `${h}: ${headers[h]}`)\n .join('\\r\\n') +\n '\\r\\n\\r\\n' +\n message\n );\n}\n\n/**\n * Emit a `'wsClientError'` event on a `WebSocketServer` if there is at least\n * one listener for it, otherwise call `abortHandshake()`.\n *\n * @param {WebSocketServer} server The WebSocket server\n * @param {http.IncomingMessage} req The request object\n * @param {Duplex} socket The socket of the upgrade request\n * @param {Number} code The HTTP response status code\n * @param {String} message The HTTP response body\n * @private\n */\nfunction abortHandshakeOrEmitwsClientError(server, req, socket, code, message) {\n if (server.listenerCount('wsClientError')) {\n const err = new Error(message);\n Error.captureStackTrace(err, abortHandshakeOrEmitwsClientError);\n\n server.emit('wsClientError', err, socket, req);\n } else {\n abortHandshake(socket, code, message);\n }\n}\n","export * from '@mysten/sui/client';\nexport * from '@mysten/sui/utils';\nexport * from '@mysten/sui/transactions';\nexport * from '@mysten/sui/bcs';\nexport * from '@mysten/sui/keypairs/ed25519';\nexport * from '@mysten/sui/keypairs/secp256k1';\nexport * from '@mysten/sui/keypairs/secp256r1';\nexport { bcs, BcsType } from '@mysten/bcs';\nexport { Dubhe } from './dubhe';\nexport { SuiAccountManager } from './libs/suiAccountManager';\nexport { SuiTx } from './libs/suiTxBuilder';\nexport { MultiSigClient } from './libs/multiSig';\nexport { SuiContractFactory } from './libs/suiContractFactory';\nexport { loadMetadata } from './metadata';\nexport type * from './types';\n","import keccak256 from 'keccak256';\nimport { getFullnodeUrl } from '@mysten/sui/client';\nimport { Transaction, TransactionResult } from '@mysten/sui/transactions';\nimport { BcsType, fromHex, SerializedBcs, toHex } from '@mysten/bcs';\nimport type { TransactionArgument } from '@mysten/sui/transactions';\nimport type {\n SuiTransactionBlockResponse,\n DevInspectResults,\n SuiMoveNormalizedModules,\n SuiMoveNormalizedType,\n SuiObjectData,\n SuiMoveNormalizedModule,\n} from '@mysten/sui/client';\nimport { SuiAccountManager } from './libs/suiAccountManager';\nimport { SuiTx } from './libs/suiTxBuilder';\nimport { SuiInteractor } from './libs/suiInteractor';\nimport {\n MapObjectStruct,\n MoveStructType,\n DubheObjectContent,\n SuiDubheReturnType,\n MoveEnumType,\n} from './types';\nimport { SuiContractFactory } from './libs/suiContractFactory';\nimport {\n SuiMoveMoudleFuncType,\n SuiMoveMoudleValueType,\n} from './libs/suiContractFactory/types';\nimport { getDefaultURL, NetworkConfig } from './libs/suiInteractor';\nimport {\n ContractQuery,\n ContractTx,\n DerivePathParams,\n FaucetNetworkType,\n MapMoudleFuncQuery,\n MapMoudleFuncTx,\n DubheParams,\n SuiTxArg,\n // SuiTxArgument,\n SuiObjectArg,\n SuiVecTxArg,\n} from './types';\nimport {\n convertHttpToWebSocket,\n normalizeHexAddress,\n normalizePackageId,\n numberToAddressHex,\n} from './utils';\nimport { bcs, fromHEX, toHEX } from '@mysten/bcs';\nimport { ContractDataParsingError } from './errors';\nimport {\n ConnectionResponse,\n OrderBy,\n Schema,\n SuiIndexerClient,\n} from './libs/suiIndexerClient';\nimport { Http } from './libs/http';\nimport { WebSocket } from 'ws';\n\nexport function isUndefined(value?: unknown): value is undefined {\n return value === undefined;\n}\n\nexport function withMeta<T extends { meta: SuiMoveMoudleFuncType }>(\n meta: SuiMoveMoudleFuncType,\n creator: Omit<T, 'meta'>\n): T {\n (creator as T).meta = meta;\n\n return creator as T;\n}\n\nfunction createQuery(\n meta: SuiMoveMoudleFuncType,\n fn: (\n tx: Transaction,\n params?: (TransactionArgument | SerializedBcs<any>)[],\n typeArguments?: string[],\n isRaw?: boolean\n ) => Promise<DevInspectResults | TransactionResult>\n): ContractQuery {\n return withMeta(\n meta,\n async ({\n tx,\n params,\n typeArguments,\n isRaw,\n }: {\n tx: Transaction;\n params?: (TransactionArgument | SerializedBcs<any>)[];\n typeArguments?: string[];\n isRaw?: boolean;\n }): Promise<DevInspectResults | TransactionResult> => {\n const result = await fn(tx, params, typeArguments, isRaw);\n return result;\n }\n );\n}\n\nfunction createTx(\n meta: SuiMoveMoudleFuncType,\n fn: (\n tx: Transaction,\n params?: (TransactionArgument | SerializedBcs<any>)[],\n typeArguments?: string[],\n isRaw?: boolean\n ) => Promise<SuiTransactionBlockResponse | TransactionResult>\n): ContractTx {\n return withMeta(\n meta,\n async ({\n tx,\n params,\n typeArguments,\n isRaw,\n }: {\n tx: Transaction;\n params?: (TransactionArgument | SerializedBcs<any>)[];\n typeArguments?: string[];\n isRaw?: boolean;\n }): Promise<SuiTransactionBlockResponse | TransactionResult> => {\n return await fn(tx, params, typeArguments, isRaw);\n }\n );\n}\n\n/**\n * @class Dubhe\n * @description This class is used to aggregate the tools that used to interact with SUI network.\n */\nexport class Dubhe {\n public http: Http;\n public accountManager: SuiAccountManager;\n public suiInteractor: SuiInteractor;\n public suiIndexerClient: SuiIndexerClient;\n public contractFactory: SuiContractFactory;\n public packageId: string | undefined;\n public metadata: SuiMoveNormalizedModules | undefined;\n\n readonly #query: MapMoudleFuncQuery = {};\n readonly #tx: MapMoudleFuncTx = {};\n readonly #object: MapObjectStruct = {\n address: bcs.bytes(32).transform({\n // To change the input type, you need to provide a type definition for the input\n input: (val: string) => fromHEX(val),\n output: (val) => toHEX(val),\n }),\n u8: bcs.u8(),\n u16: bcs.u16(),\n u32: bcs.u32(),\n u64: bcs.u64(),\n u128: bcs.u128(),\n u256: bcs.u256(),\n bool: bcs.bool(),\n '0x1::ascii::String': bcs.string(),\n '0x1::string::String': bcs.string(),\n '0x1::option::Option<address>': bcs.option(\n bcs.bytes(32).transform({\n // To change the input type, you need to provide a type definition for the input\n input: (val: string) => fromHEX(val),\n output: (val) => toHEX(val),\n })\n ),\n '0x1::option::Option<u8>': bcs.option(bcs.u8()),\n '0x1::option::Option<u16>': bcs.option(bcs.u16()),\n '0x1::option::Option<u32>': bcs.option(bcs.u32()),\n '0x1::option::Option<u64>': bcs.option(bcs.u64()),\n '0x1::option::Option<u128>': bcs.option(bcs.u128()),\n '0x1::option::Option<u256>': bcs.option(bcs.u256()),\n '0x1::option::Option<bool>': bcs.option(bcs.bool()),\n '0x1::option::Option<vector<address>>': bcs.option(\n bcs.vector(\n bcs.bytes(32).transform({\n // To change the input type, you need to provide a type definition for the input\n input: (val: string) => fromHex(val),\n output: (val) => toHex(val),\n })\n )\n ),\n '0x1::option::Option<vector<u8>>': bcs.option(bcs.vector(bcs.u8())),\n '0x1::option::Option<vector<u16>>': bcs.option(bcs.vector(bcs.u16())),\n '0x1::option::Option<vector<u32>>': bcs.option(bcs.vector(bcs.u32())),\n '0x1::option::Option<vector<u64>>': bcs.option(bcs.vector(bcs.u64())),\n '0x1::option::Option<vector<u128>>': bcs.option(bcs.vector(bcs.u128())),\n '0x1::option::Option<vector<u256>>': bcs.option(bcs.vector(bcs.u256())),\n '0x1::option::Option<vector<bool>>': bcs.option(bcs.vector(bcs.bool())),\n 'vector<address>': bcs.vector(\n bcs.bytes(32).transform({\n // To change the input type, you need to provide a type definition for the input\n input: (val: string) => fromHex(val),\n output: (val) => toHex(val),\n })\n ),\n 'vector<u8>': bcs.vector(bcs.u8()),\n 'vector<u16>': bcs.vector(bcs.u16()),\n 'vector<u32>': bcs.vector(bcs.u32()),\n 'vector<u64>': bcs.vector(bcs.u64()),\n 'vector<u128>': bcs.vector(bcs.u128()),\n 'vector<u256>': bcs.vector(bcs.u256()),\n 'vector<bool>': bcs.vector(bcs.bool()),\n 'vector<vector<address>>': bcs.vector(\n bcs.vector(\n bcs.bytes(32).transform({\n // To change the input type, you need to provide a type definition for the input\n input: (val: string) => fromHex(val),\n output: (val) => toHex(val),\n })\n )\n ),\n 'vector<vector<u8>>': bcs.vector(bcs.vector(bcs.u8())),\n 'vector<vector<u16>>': bcs.vector(bcs.vector(bcs.u16())),\n 'vector<vector<u32>>': bcs.vector(bcs.vector(bcs.u32())),\n 'vector<vector<u64>>': bcs.vector(bcs.vector(bcs.u64())),\n 'vector<vector<u128>>': bcs.vector(bcs.vector(bcs.u128())),\n 'vector<vector<u256>>': bcs.vector(bcs.vector(bcs.u256())),\n 'vector<vector<bool>>': bcs.vector(bcs.vector(bcs.bool())),\n '0x2::coin::Coin<T>': bcs.struct('Coin', {\n id: bcs.fixedArray(32, bcs.u8()).transform({\n input: (id: string) => fromHex(id),\n output: (id) => toHex(Uint8Array.from(id)),\n }),\n balance: bcs.struct('Balance', {\n value: bcs.u64(),\n }),\n }),\n '0x2::balance::Balance<T>': bcs.struct('Balance', {\n value: bcs.u64(),\n }),\n };\n\n /**\n * Support the following ways to init the DubheClient:\n * 1. mnemonics\n * 2. secretKey (base64 or hex)\n * If none of them is provided, will generate a random mnemonics with 24 words.\n *\n * @param mnemonics, 12 or 24 mnemonics words, separated by space\n * @param secretKey, base64 or hex string or bech32, when mnemonics is provided, secretKey will be ignored\n * @param networkType, 'testnet' | 'mainnet' | 'devnet' | 'localnet', default is 'devnet'\n * @param fullnodeUrl, the fullnode url, default is the preconfig fullnode url for the given network type\n * @param packageId\n */\n constructor({\n mnemonics,\n secretKey,\n networkType,\n fullnodeUrls,\n packageId,\n metadata,\n customFetch,\n defaultOptions,\n indexerUrl,\n indexerWsUrl,\n }: DubheParams = {}) {\n networkType = networkType ?? 'mainnet';\n\n const defaultParams = getDefaultURL(networkType);\n\n // Init the account manager\n this.accountManager = new SuiAccountManager({ mnemonics, secretKey });\n // Init the rpc provider\n fullnodeUrls = fullnodeUrls || [defaultParams.fullNode];\n this.suiInteractor = new SuiInteractor(fullnodeUrls, networkType);\n\n indexerUrl = indexerUrl || defaultParams.indexerUrl;\n indexerWsUrl = indexerWsUrl || convertHttpToWebSocket(indexerUrl);\n this.http = new Http(indexerUrl, indexerWsUrl, customFetch, defaultOptions);\n\n this.suiIndexerClient = new SuiIndexerClient(this.http);\n\n this.packageId = packageId ? normalizePackageId(packageId) : undefined;\n if (metadata !== undefined) {\n this.metadata = metadata as SuiMoveNormalizedModules;\n\n const maxLoopNum = 5;\n let loopNum = 0;\n let stillNeedFormat = true;\n while (stillNeedFormat === true && loopNum <= maxLoopNum) {\n let loopFlag = false;\n Object.values(metadata as SuiMoveNormalizedModules).forEach(\n (moudlevalue) => {\n const data = moudlevalue as SuiMoveNormalizedModule;\n const moduleName = data.name;\n const objMoudleId = `${packageId}::${moduleName}`;\n\n if (data.enums) {\n Object.entries(data.enums).forEach(([enumName, enumType]) => {\n const objectId = `${objMoudleId}::${enumName}`;\n const bcsmeta: MoveEnumType = {\n objectId,\n objectName: enumName,\n objectType: enumType,\n };\n // console.log('--------');\n // console.log(JSON.stringify(bcsmeta, null, 2));\n // if (isUndefined(this.#object[objectId])) {\n let bcsObj = this.#bcsenum(bcsmeta);\n if (bcsObj.loopFlag === true) {\n loopFlag = bcsObj.loopFlag;\n }\n if (this.#object[objectId] === undefined) {\n this.#object[objectId] = bcsObj.bcs;\n this.#object[`vector<${objectId}>`] = bcs.vector(bcsObj.bcs);\n this.#object[`vector<vector<${objectId}>>`] = bcs.vector(\n bcs.vector(bcsObj.bcs)\n );\n this.#object[`0x1::option::Option<${objectId}>`] = bcs.option(\n bcsObj.bcs\n );\n }\n });\n }\n\n Object.entries(data.structs).forEach(([objectName, objectType]) => {\n const objectId = `${objMoudleId}::${objectName}`;\n const bcsmeta: MoveStructType = {\n objectId,\n objectName,\n objectType,\n };\n // if (isUndefined(this.#object[objectId])) {\n let bcsObj = this.#bcs(bcsmeta);\n if (bcsObj.loopFlag === true) {\n loopFlag = bcsObj.loopFlag;\n }\n\n this.#object[objectId] = bcsObj.bcs;\n\n this.#object[`vector<${objectId}>`] = bcs.vector(bcsObj.bcs);\n this.#object[`0x1::option::Option<${objectId}>`] = bcs.option(\n bcsObj.bcs\n );\n });\n\n Object.entries(data.exposedFunctions).forEach(\n ([funcName, funcvalue]) => {\n const meta = funcvalue as SuiMoveMoudleFuncType;\n meta.moduleName = moduleName;\n meta.funcName = funcName;\n if (isUndefined(this.#query[moduleName])) {\n this.#query[moduleName] = {};\n }\n if (isUndefined(this.#query[moduleName][funcName])) {\n this.#query[moduleName][funcName] = createQuery(\n meta,\n (tx, p, typeArguments, isRaw) =>\n this.#read(meta, tx, p, typeArguments, isRaw)\n );\n }\n\n if (isUndefined(this.#tx[moduleName])) {\n this.#tx[moduleName] = {};\n }\n if (isUndefined(this.#tx[moduleName][funcName])) {\n this.#tx[moduleName][funcName] = createTx(\n meta,\n (tx, p, typeArguments, isRaw) =>\n this.#exec(meta, tx, p, typeArguments, isRaw)\n );\n }\n }\n );\n }\n );\n\n stillNeedFormat = loopFlag;\n loopNum++;\n }\n }\n this.contractFactory = new SuiContractFactory({\n packageId,\n metadata,\n });\n }\n\n public get query(): MapMoudleFuncQuery {\n return this.#query;\n }\n\n public get tx(): MapMoudleFuncTx {\n return this.#tx;\n }\n\n public get object(): MapObjectStruct {\n return this.#object;\n }\n\n #exec = async (\n meta: SuiMoveMoudleFuncType,\n tx: Transaction,\n params?: (TransactionArgument | SerializedBcs<any>)[],\n typeArguments?: string[],\n isRaw?: boolean\n ) => {\n if (isRaw === true) {\n return tx.moveCall({\n target: `${this.contractFactory.packageId}::${meta.moduleName}::${meta.funcName}`,\n arguments: params,\n typeArguments,\n });\n }\n\n tx.moveCall({\n target: `${this.contractFactory.packageId}::${meta.moduleName}::${meta.funcName}`,\n arguments: params,\n typeArguments,\n });\n return await this.signAndSendTxn(tx);\n };\n\n #read = async (\n meta: SuiMoveMoudleFuncType,\n tx: Transaction,\n params?: (TransactionArgument | SerializedBcs<any>)[],\n typeArguments?: string[],\n isRaw?: boolean\n ) => {\n if (isRaw === true) {\n return tx.moveCall({\n target: `${this.contractFactory.packageId}::${meta.moduleName}::${meta.funcName}`,\n arguments: params,\n typeArguments,\n });\n }\n\n tx.moveCall({\n target: `${this.contractFactory.packageId}::${meta.moduleName}::${meta.funcName}`,\n arguments: params,\n typeArguments,\n });\n\n return await this.inspectTxn(tx);\n };\n\n #getVectorDepth = (field: SuiMoveNormalizedType): number => {\n if (typeof field === 'object' && 'Vector' in field) {\n return 1 + this.#getVectorDepth(field.Vector);\n }\n return 0;\n };\n\n #bcs = (bcsmeta: MoveStructType) => {\n let loopFlag = false;\n const bcsJson: Record<string, BcsType<any, any>> = {};\n Object.entries(bcsmeta.objectType.fields).forEach(([index, type]) => {\n const objName = type.name;\n const objType: SuiMoveNormalizedType = type.type;\n switch (typeof objType) {\n case 'object':\n for (const [key, value] of Object.entries(objType)) {\n switch (key) {\n case 'Struct':\n const structType = value as {\n address: string;\n module: string;\n name: string;\n typeArguments: SuiMoveNormalizedType[];\n };\n if (\n structType.address === '0x1' &&\n structType.module === 'ascii' &&\n structType.name === 'String'\n ) {\n bcsJson[objName] = bcs.string();\n return;\n } else if (\n structType.address === '0x2' &&\n structType.module === 'object' &&\n structType.name === 'UID'\n ) {\n bcsJson[objName] = bcs.fixedArray(32, bcs.u8()).transform({\n input: (id: string) => fromHEX(id),\n output: (id) => toHEX(Uint8Array.from(id)),\n });\n return;\n } else if (\n structType.address === '0x2' &&\n structType.module === 'object' &&\n structType.name === 'ID'\n ) {\n bcsJson[objName] = bcs.fixedArray(32, bcs.u8()).transform({\n input: (id: string) => fromHEX(id),\n output: (id) => toHEX(Uint8Array.from(id)),\n });\n return;\n } else if (\n structType.address === '0x2' &&\n structType.module === 'bag' &&\n structType.name === 'Bag'\n ) {\n bcsJson[objName] = bcs.fixedArray(32, bcs.u8()).transform({\n input: (id: string) => fromHEX(id),\n output: (id) => toHEX(Uint8Array.from(id)),\n });\n return;\n } else if (\n structType.address === '0x1' &&\n structType.module === 'option' &&\n structType.name === 'Option'\n ) {\n switch (structType.typeArguments[0]) {\n case 'U8':\n bcsJson[objName] = bcs.option(bcs.u8());\n return;\n case 'U16':\n bcsJson[objName] = bcs.option(bcs.u16());\n return;\n case 'U32':\n bcsJson[objName] = bcs.option(bcs.u32());\n return;\n case 'U64':\n bcsJson[objName] = bcs.option(bcs.u64());\n return;\n case 'U128':\n bcsJson[objName] = bcs.option(bcs.u128());\n return;\n case 'U256':\n bcsJson[objName] = bcs.option(bcs.u256());\n return;\n case 'Bool':\n bcsJson[objName] = bcs.option(bcs.bool());\n return;\n case 'Address':\n bcsJson[objName] = bcs.option(\n bcs.bytes(32).transform({\n // To change the input type, you need to provide a type definition for the input\n input: (val: string) => fromHEX(val),\n output: (val) => toHEX(val),\n })\n );\n return;\n default:\n // throw new Error('Unsupported type');\n }\n } else {\n if (\n this.object[\n `${structType.address}::${structType.module}::${structType.name}`\n ] === undefined\n ) {\n loopFlag = true;\n } else {\n bcsJson[objName] =\n this.object[\n `${structType.address}::${structType.module}::${structType.name}`\n ];\n return;\n }\n }\n return;\n case 'Vector':\n if (typeof value === 'string') {\n switch (value) {\n case 'U8':\n bcsJson[objName] = bcs.vector(bcs.u8());\n return;\n case 'U16':\n bcsJson[objName] = bcs.vector(bcs.u16());\n return;\n case 'U32':\n bcsJson[objName] = bcs.vector(bcs.u32());\n return;\n case 'U64':\n bcsJson[objName] = bcs.vector(bcs.u64());\n return;\n case 'U128':\n bcsJson[objName] = bcs.vector(bcs.u128());\n return;\n case 'U256':\n bcsJson[objName] = bcs.vector(bcs.u256());\n return;\n case 'Bool':\n bcsJson[objName] = bcs.vector(bcs.bool());\n return;\n case 'Address':\n bcsJson[objName] = bcs.vector(\n bcs.bytes(32).transform({\n // To change the input type, you need to provide a type definition for the input\n input: (val: string) => fromHEX(val),\n output: (val) => toHEX(val),\n })\n );\n return;\n default:\n // throw new Error('Unsupported type');\n }\n }\n if (typeof value === 'object') {\n const vectorDepth = this.#getVectorDepth(value);\n let innerType = value;\n for (let i = 0; i < vectorDepth; i++) {\n innerType = innerType.Vector;\n }\n\n if ('Struct' in innerType) {\n const structType = innerType.Struct;\n const structId = `${structType.address}::${structType.module}::${structType.name}`;\n\n let bcsType = this.#object[structId];\n if (!bcsType) {\n loopFlag = true;\n return;\n }\n let baseType = bcsType;\n for (let i = 0; i <= vectorDepth; i++) {\n baseType = bcs.vector(baseType);\n }\n\n bcsJson[objName] = baseType;\n return;\n }\n }\n return;\n case 'TypeParameter':\n bcsJson[objName] = bcs.u128();\n return;\n // case 'Reference':\n\n // case 'MutableReference':\n\n default:\n throw new Error('Unsupported type');\n }\n }\n return;\n case 'string':\n switch (objType) {\n case 'U8':\n bcsJson[objName] = bcs.u8();\n return;\n case 'U16':\n bcsJson[objName] = bcs.u16();\n return;\n case 'U32':\n bcsJson[objName] = bcs.u32();\n return;\n case 'U64':\n bcsJson[objName] = bcs.u64();\n return;\n case 'U128':\n bcsJson[objName] = bcs.u128();\n return;\n case 'U256':\n bcsJson[objName] = bcs.u256();\n return;\n case 'Bool':\n bcsJson[objName] = bcs.bool();\n return;\n case 'Address':\n bcsJson[objName] = bcs.bytes(32).transform({\n // To change the input type, you need to provide a type definition for the input\n input: (val: string) => fromHEX(val),\n output: (val) => toHEX(val),\n });\n return;\n default:\n return;\n }\n default:\n throw new Error('Unsupported type');\n }\n });\n\n return {\n bcs: bcs.struct(bcsmeta.objectName, bcsJson),\n loopFlag,\n };\n };\n\n #bcsenum = (bcsmeta: MoveEnumType) => {\n let loopFlag = false;\n const variantJson: Record<string, BcsType<any, any> | null> = {};\n\n // const databcs = bcs.vector(\n // bcs.struct('Account', {\n // balance: bcs.u64(),\n // status: bcs.enum('AccountStatus', {\n // Liquid: null,\n // Frozen: null,\n // Blocked: null,\n // }),\n // })\n // );\n\n Object.entries(bcsmeta.objectType.variants).forEach(([name, type]) => {\n if (type.length > 0) {\n Object.entries(type).forEach(([index, value]) => {\n const objType: SuiMoveNormalizedType = value.type;\n const objName = value.name;\n switch (typeof objType) {\n case 'object':\n for (const [key, value] of Object.entries(objType)) {\n switch (key) {\n case 'Struct':\n const structType = value as {\n address: string;\n module: string;\n name: string;\n typeArguments: SuiMoveNormalizedType[];\n };\n if (\n structType.address === '0x1' &&\n structType.module === 'ascii' &&\n structType.name === 'String'\n ) {\n variantJson[objName] = bcs.string();\n return;\n } else if (\n structType.address === '0x2' &&\n structType.module === 'object' &&\n structType.name === 'UID'\n ) {\n variantJson[objName] = bcs\n .fixedArray(32, bcs.u8())\n .transform({\n input: (id: string) => fromHEX(id),\n output: (id) => toHEX(Uint8Array.from(id)),\n });\n return;\n } else if (\n structType.address === '0x2' &&\n structType.module === 'object' &&\n structType.name === 'ID'\n ) {\n variantJson[objName] = bcs\n .fixedArray(32, bcs.u8())\n .transform({\n input: (id: string) => fromHEX(id),\n output: (id) => toHEX(Uint8Array.from(id)),\n });\n return;\n } else if (\n structType.address === '0x2' &&\n structType.module === 'bag' &&\n structType.name === 'Bag'\n ) {\n variantJson[objName] = bcs\n .fixedArray(32, bcs.u8())\n .transform({\n input: (id: string) => fromHEX(id),\n output: (id) => toHEX(Uint8Array.from(id)),\n });\n return;\n } else if (\n structType.address === '0x1' &&\n structType.module === 'option' &&\n structType.name === 'Option'\n ) {\n switch (structType.typeArguments[0]) {\n case 'U8':\n variantJson[objName] = bcs.option(bcs.u8());\n return;\n case 'U16':\n variantJson[objName] = bcs.option(bcs.u16());\n return;\n case 'U32':\n variantJson[objName] = bcs.option(bcs.u32());\n return;\n case 'U64':\n variantJson[objName] = bcs.option(bcs.u64());\n return;\n case 'U128':\n variantJson[objName] = bcs.option(bcs.u128());\n return;\n case 'U256':\n variantJson[objName] = bcs.option(bcs.u256());\n return;\n case 'Bool':\n variantJson[objName] = bcs.option(bcs.bool());\n return;\n case 'Address':\n variantJson[objName] = bcs.option(\n bcs.bytes(32).transform({\n // To change the input type, you need to provide a type definition for the input\n input: (val: string) => fromHEX(val),\n output: (val) => toHEX(val),\n })\n );\n return;\n default:\n // throw new Error('Unsupported type');\n }\n } else {\n if (\n this.object[\n `${structType.address}::${structType.module}::${structType.name}`\n ] === undefined\n ) {\n loopFlag = true;\n } else {\n variantJson[objName] =\n this.object[\n `${structType.address}::${structType.module}::${structType.name}`\n ];\n return;\n }\n }\n return;\n case 'Vector':\n if (typeof value === 'string') {\n switch (value) {\n case 'U8':\n variantJson[objName] = bcs.vector(bcs.u8());\n return;\n case 'U16':\n variantJson[objName] = bcs.vector(bcs.u16());\n return;\n case 'U32':\n variantJson[objName] = bcs.vector(bcs.u32());\n return;\n case 'U64':\n variantJson[objName] = bcs.vector(bcs.u64());\n return;\n case 'U128':\n variantJson[objName] = bcs.vector(bcs.u128());\n return;\n case 'U256':\n variantJson[objName] = bcs.vector(bcs.u256());\n return;\n case 'Bool':\n variantJson[objName] = bcs.vector(bcs.bool());\n return;\n case 'Address':\n variantJson[objName] = bcs.vector(\n bcs.bytes(32).transform({\n // To change the input type, you need to provide a type definition for the input\n input: (val: string) => fromHEX(val),\n output: (val) => toHEX(val),\n })\n );\n return;\n default:\n // throw new Error('Unsupported type');\n }\n }\n // if (typeof value === 'object') {\n // }\n case 'TypeParameter':\n variantJson[objName] = bcs.u128();\n return;\n // case 'Reference':\n\n // case 'MutableReference':\n\n default:\n throw new Error('Unsupported type');\n }\n }\n return;\n case 'string':\n switch (objType) {\n case 'U8':\n variantJson[objName] = bcs.u8();\n return;\n case 'U16':\n variantJson[objName] = bcs.u16();\n return;\n case 'U32':\n variantJson[objName] = bcs.u32();\n return;\n case 'U64':\n variantJson[objName] = bcs.u64();\n return;\n case 'U128':\n variantJson[objName] = bcs.u128();\n return;\n case 'U256':\n variantJson[objName] = bcs.u256();\n return;\n case 'Bool':\n variantJson[objName] = bcs.bool();\n return;\n case 'Address':\n variantJson[objName] = bcs.bytes(32).transform({\n // To change the input type, you need to provide a type definition for the input\n input: (val: string) => fromHEX(val),\n output: (val) => toHEX(val),\n });\n return;\n default:\n return;\n }\n default:\n throw new Error('Unsupported type');\n }\n });\n } else {\n variantJson[name] = null;\n }\n });\n return {\n bcs: bcs.enum(bcsmeta.objectName, variantJson),\n loopFlag,\n };\n };\n\n view(dryResult: DevInspectResults) {\n let returnValues = [];\n\n if (dryResult.effects.status.status === 'success') {\n const resultList = dryResult.results![0].returnValues!;\n\n for (const res of resultList) {\n let baseValue = res[0];\n let baseType = res[1];\n const value = Uint8Array.from(baseValue);\n\n const storageValueMatch = baseType.match(\n /^.*::storage_value::StorageValue<(.+)>$/\n );\n if (storageValueMatch) {\n const innerType = storageValueMatch[1];\n if (this.#object[innerType]) {\n const storageValueBcs = bcs.struct('StorageValue', {\n contents: bcs.vector(\n bcs.struct('Entry', {\n value: this.#object[innerType],\n })\n ),\n });\n returnValues.push(storageValueBcs.parse(value));\n continue;\n }\n }\n\n const storageMapMatch = baseType.match(\n /^.*::storage_map::StorageMap<(.+)>$/\n );\n if (storageMapMatch) {\n const innerType = storageMapMatch[1];\n const [keyType, valueType] = innerType\n .split(',')\n .map((type) => type.trim());\n if (this.#object[keyType] && this.#object[valueType]) {\n const storageMapBcs = bcs.struct('StorageMap', {\n contents: bcs.vector(\n bcs.struct('Entry', {\n key: this.#object[keyType],\n value: this.#object[valueType],\n })\n ),\n });\n returnValues.push(storageMapBcs.parse(value));\n continue;\n }\n }\n\n const storageDoubleMapMatch = baseType.match(\n /^.*::storage_double_map::StorageDoubleMap<(.+)>$/\n );\n if (storageDoubleMapMatch) {\n const innerType = storageDoubleMapMatch[1];\n const [key1, key2, valueType] = innerType\n .split(',')\n .map((type) => type.trim());\n if (\n this.#object[key1] &&\n this.#object[key2] &&\n this.#object[valueType]\n ) {\n const storageDoubleMapBcs = bcs.struct('StorageDoubleMap', {\n contents: bcs.vector(\n bcs.struct('Entry', {\n key1: this.#object[key1],\n key2: this.#object[key2],\n value: this.#object[valueType],\n })\n ),\n });\n returnValues.push(storageDoubleMapBcs.parse(value));\n continue;\n }\n }\n\n if (this.#object[baseType]) {\n // console.log('=========== here');\n // console.log(baseType);\n // console.log(JSON.stringify(this.#object[baseType], null, 2));\n // console.log('-------------');\n returnValues.push(this.#object[baseType].parse(value));\n continue;\n }\n\n const genericMatch = baseType.match(/^([^<]+)<(.+)>$/);\n if (genericMatch) {\n const [_, genericBase, _genericParam] = genericMatch;\n const genericKey = `${genericBase}<T>`;\n\n if (this.#object[genericKey]) {\n returnValues.push(this.#object[genericKey].parse(value));\n continue;\n }\n }\n\n console.log(\n '\\n\\x1b[41m\\x1b[37m ERROR \\x1b[0m \\x1b[31mUnsupported Type\\x1b[0m'\n );\n console.log('\\x1b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\\x1b[0m');\n console.log(`\\x1b[95m•\\x1b[0m Type: \\x1b[33m\"${baseType}\"\\x1b[0m`);\n if (genericMatch) {\n console.log(\n `\\x1b[95m•\\x1b[0m Generic Base Type: \\x1b[33m\"${genericMatch[1]}<T>\"\\x1b[0m`\n );\n }\n console.log('\\x1b[95m\\n✨ Available Types:\\x1b[0m');\n Object.keys(this.#object).forEach((type) => {\n console.log(` \\x1b[36m◆\\x1b[0m ${type}`);\n });\n console.log('\\n\\x1b[34m💡 How to Add Custom Type:\\x1b[0m');\n console.log(\n ` You can add custom type by extending the #object map in your code:`\n );\n console.log(\n ` \\x1b[32mdubhe.object[\"${baseType}\"] = bcs.struct(\"YourTypeName\", {\\n field1: bcs.string(),\\n field2: bcs.u64(),\\n // ... other fields\\n });\\x1b[0m`\n );\n console.log('\\x1b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\\x1b[0m\\n');\n throw new Error(`Unsupported type: ${baseType}`);\n }\n return returnValues;\n } else {\n throw new ContractDataParsingError(dryResult);\n }\n }\n\n async state({\n tx,\n schema,\n params,\n }: {\n tx: Transaction;\n schema: string;\n params: any[];\n }): Promise<any[] | undefined> {\n const moduleName = `schema`;\n const functionName = `get_${schema}`;\n\n let queryResponse = undefined;\n try {\n queryResponse = (await this.query[moduleName][functionName]({\n tx,\n params,\n })) as DevInspectResults;\n\n if (queryResponse.effects.status.status !== 'success') {\n return undefined;\n }\n } catch {\n return undefined;\n }\n return this.view(queryResponse);\n }\n\n async parseState({\n schema,\n objectId,\n storageType,\n params,\n }: {\n schema: string;\n objectId: string;\n storageType: string; // 'StorageValue<V>' | 'StorageMap<K, V>' | 'StorageDoubleMap<K1, K2, V>'\n params: any[];\n }): Promise<any[] | undefined> {\n const tx = new Transaction();\n const schemaObject = tx.object(objectId);\n // Parse storage type\n const storageValueMatch = storageType.match(/^StorageValue<(.+)>$/);\n const storageMapMatch = storageType.match(/^StorageMap<(.+),\\s*(.+)>$/);\n const storageDoubleMapMatch = storageType.match(\n /^StorageDoubleMap<(.+),\\s*(.+),\\s*(.+)>$/\n );\n\n let processedParams: (TransactionArgument | SerializedBcs<any>)[] = [\n schemaObject,\n ];\n\n if (storageValueMatch) {\n // StorageValue only needs the object ID\n if (params.length > 0) {\n console.warn(\n 'StorageValue does not require additional parameters. Extra parameters will be ignored.'\n );\n }\n } else if (storageMapMatch) {\n // StorageMap needs one key\n if (params.length !== 1) {\n throw new Error('StorageMap requires exactly one key parameter');\n }\n const keyType = storageMapMatch[1].trim();\n processedParams.push(this.#processKeyParameter(tx, keyType, params[0]));\n } else if (storageDoubleMapMatch) {\n // StorageDoubleMap needs two keys\n if (params.length !== 2) {\n throw new Error('StorageDoubleMap requires exactly two key parameters');\n }\n const key1Type = storageDoubleMapMatch[1].trim();\n const key2Type = storageDoubleMapMatch[2].trim();\n processedParams.push(this.#processKeyParameter(tx, key1Type, params[0]));\n processedParams.push(this.#processKeyParameter(tx, key2Type, params[1]));\n } else {\n throw new Error(\n `Invalid storage type: ${storageType}. Must be StorageValue<V>, StorageMap<K,V>, or StorageDoubleMap<K1,K2,V>`\n );\n }\n return this.state({\n tx,\n schema,\n params: processedParams,\n });\n }\n\n async getStorage({\n name,\n key1,\n key2,\n first,\n after,\n last,\n before,\n orderBy,\n distinct,\n }: {\n name: string;\n key1?: string;\n key2?: string;\n first?: number;\n after?: string;\n last?: number;\n before?: string;\n orderBy?: OrderBy;\n distinct?: boolean;\n }): Promise<ConnectionResponse<Schema>> {\n return await this.suiIndexerClient.getStorage({\n name,\n key1,\n key2,\n first,\n after,\n last,\n before,\n orderBy,\n distinct,\n });\n }\n\n async subscribe(\n names: string[],\n handleData: (data: any) => void\n ): Promise<WebSocket> {\n return this.suiIndexerClient.subscribe(names, handleData);\n }\n\n #processKeyParameter(tx: Transaction, keyType: string, value: any) {\n // Handle basic types\n switch (keyType.toLowerCase()) {\n case 'u8':\n return tx.pure.u8(value);\n case 'u16':\n return tx.pure.u16(value);\n case 'u32':\n return tx.pure.u32(value);\n case 'u64':\n return tx.pure.u64(value);\n case 'u128':\n return tx.pure.u128(value);\n case 'u256':\n return tx.pure.u256(value);\n case 'bool':\n return tx.pure.bool(value);\n case 'address':\n return tx.pure.address(value);\n default:\n // Check if it's an object type\n if (keyType.includes('::')) {\n // Assuming it's an object ID if the type contains '::'\n return tx.object(value);\n }\n\n // If we reach here, the key type is not supported\n console.log(\n '\\n\\x1b[41m\\x1b[37m ERROR \\x1b[0m \\x1b[31mUnsupported Key Type\\x1b[0m'\n );\n console.log('\\x1b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\\x1b[0m');\n console.log(`\\x1b[95m•\\x1b[0m Type: \\x1b[33m\"${keyType}\"\\x1b[0m`);\n console.log('\\x1b[95m•\\x1b[0m Supported Types:\\x1b[0m');\n console.log(' \\x1b[36m◆\\x1b[0m u8, u16, u32, u64, u128, u256');\n console.log(' \\x1b[36m◆\\x1b[0m bool');\n console.log(' \\x1b[36m◆\\x1b[0m address');\n console.log(\n ' \\x1b[36m◆\\x1b[0m object (format: package::module::type)'\n );\n console.log('\\x1b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\\x1b[0m\\n');\n throw new Error(`Unsupported key type: ${keyType}`);\n }\n }\n\n /**\n * else:\n * it will generate signer from the mnemonic with the given derivePathParams.\n * @param derivePathParams, such as { accountIndex: 2, isExternal: false, addressIndex: 10 }, comply with the BIP44 standard\n */\n getSigner(derivePathParams?: DerivePathParams) {\n return this.accountManager.getKeyPair(derivePathParams);\n }\n\n /**\n * @description Switch the current account with the given derivePathParams\n * @param derivePathParams, such as { accountIndex: 2, isExternal: false, addressIndex: 10 }, comply with the BIP44 standard\n */\n switchAccount(derivePathParams: DerivePathParams) {\n this.accountManager.switchAccount(derivePathParams);\n }\n\n /**\n * @description Get the address of the account for the given derivePathParams\n * @param derivePathParams, such as { accountIndex: 2, isExternal: false, addressIndex: 10 }, comply with the BIP44 standard\n */\n getAddress(derivePathParams?: DerivePathParams) {\n return this.accountManager.getAddress(derivePathParams);\n }\n\n currentAddress() {\n return this.accountManager.currentAddress;\n }\n\n getPackageId() {\n return this.contractFactory.packageId;\n }\n\n getMetadata() {\n return this.contractFactory.metadata;\n }\n\n getNetwork() {\n return this.suiInteractor.network;\n }\n\n getNetworkConfig(): NetworkConfig {\n return getDefaultURL(this.getNetwork());\n }\n\n getTxExplorerUrl(txHash: string) {\n return this.getNetworkConfig().txExplorer.replace(':txHash', txHash);\n }\n\n getAccountExplorerUrl(address: string) {\n return this.getNetworkConfig().accountExplorer.replace(':address', address);\n }\n\n getExplorerUrl() {\n return this.getNetworkConfig().explorer;\n }\n\n /**\n * Request some SUI from faucet\n * @Returns {Promise<boolean>}, true if the request is successful, false otherwise.\n */\n async requestFaucet(\n address?: string,\n network?: FaucetNetworkType,\n derivePathParams?: DerivePathParams\n ) {\n if (address === undefined) {\n address = this.accountManager.getAddress(derivePathParams);\n }\n if (network === undefined) {\n network = this.getNetwork() as\n | FaucetNetworkType\n | 'devnet' as FaucetNetworkType;\n }\n // const addr = this.accountManager.getAddress(derivePathParams);\n return this.suiInteractor.requestFaucet(address, network);\n }\n\n async getBalance(coinType?: string, derivePathParams?: DerivePathParams) {\n const owner = this.accountManager.getAddress(derivePathParams);\n return this.suiInteractor.currentClient.getBalance({ owner, coinType });\n }\n\n async balanceOf(\n accountAddress?: string,\n coinType?: string,\n derivePathParams?: DerivePathParams\n ) {\n if (accountAddress === undefined) {\n accountAddress = this.accountManager.getAddress(derivePathParams);\n }\n const owner = accountAddress;\n return this.suiInteractor.currentClient.getBalance({ owner, coinType });\n }\n\n client() {\n return this.suiInteractor.currentClient;\n }\n\n indexerClient() {\n return this.suiIndexerClient;\n }\n\n async getObject(objectId: string) {\n return this.suiInteractor.getObject(objectId);\n }\n\n async getObjects(objectIds: string[]) {\n return this.suiInteractor.getObjects(objectIds);\n }\n\n async signTxn(\n tx: Uint8Array | Transaction | SuiTx,\n derivePathParams?: DerivePathParams\n ) {\n if (tx instanceof SuiTx || tx instanceof Transaction) {\n tx.setSender(this.getAddress(derivePathParams));\n }\n const txBlock = tx instanceof SuiTx ? tx.tx : tx;\n const txBytes =\n txBlock instanceof Transaction\n ? await txBlock.build({ client: this.client() })\n : txBlock;\n const keyPair = this.getSigner(derivePathParams);\n return await keyPair.signTransaction(txBytes);\n }\n\n async signAndSendTxn(\n tx: Uint8Array | Transaction | SuiTx,\n derivePathParams?: DerivePathParams\n ): Promise<SuiTransactionBlockResponse> {\n const { bytes, signature } = await this.signTxn(tx, derivePathParams);\n return this.sendTx(bytes, signature);\n }\n\n async sendTx(\n transaction: Uint8Array | string,\n signature: string | string[]\n ): Promise<SuiTransactionBlockResponse> {\n return this.suiInteractor.sendTx(transaction, signature);\n }\n\n async waitForTransaction(digest: string) {\n return this.suiInteractor.waitForTransaction({ digest });\n }\n\n /**\n * Transfer the given amount of SUI to the recipient\n * @param recipient\n * @param amount\n * @param derivePathParams\n */\n async transferSui(\n recipient: string,\n amount: number,\n derivePathParams?: DerivePathParams\n ) {\n const tx = new SuiTx();\n tx.transferSui(recipient, amount);\n return this.signAndSendTxn(tx, derivePathParams);\n }\n\n /**\n * Transfer to mutliple recipients\n * @param recipients the recipients addresses\n * @param amounts the amounts of SUI to transfer to each recipient, the length of amounts should be the same as the length of recipients\n * @param derivePathParams\n */\n async transferSuiToMany(\n recipients: string[],\n amounts: number[],\n derivePathParams?: DerivePathParams\n ) {\n const tx = new SuiTx();\n tx.transferSuiToMany(recipients, amounts);\n return this.signAndSendTxn(tx, derivePathParams);\n }\n\n /**\n * Transfer the given amounts of coin to multiple recipients\n * @param recipients the list of recipient address\n * @param amounts the amounts to transfer for each recipient\n * @param coinType any custom coin type but not SUI\n * @param derivePathParams the derive path params for the current signer\n */\n async transferCoinToMany(\n recipients: string[],\n amounts: number[],\n coinType: string,\n derivePathParams?: DerivePathParams\n ) {\n const tx = new SuiTx();\n const owner = this.accountManager.getAddress(derivePathParams);\n const totalAmount = amounts.reduce((a, b) => a + b, 0);\n const coins = await this.suiInteractor.selectCoins(\n owner,\n totalAmount,\n coinType\n );\n tx.transferCoinToMany(\n coins.map((c) => c.objectId),\n owner,\n recipients,\n amounts\n );\n return this.signAndSendTxn(tx, derivePathParams);\n }\n\n async transferCoin(\n recipient: string,\n amount: number,\n coinType: string,\n derivePathParams?: DerivePathParams\n ) {\n return this.transferCoinToMany(\n [recipient],\n [amount],\n coinType,\n derivePathParams\n );\n }\n\n async transferObjects(\n objects: SuiObjectArg[],\n recipient: string,\n derivePathParams?: DerivePathParams\n ) {\n const tx = new SuiTx();\n tx.transferObjects(objects, recipient);\n return this.signAndSendTxn(tx, derivePathParams);\n }\n\n async moveCall(callParams: {\n target: string;\n arguments?: (SuiTxArg | SuiVecTxArg)[];\n typeArguments?: string[];\n derivePathParams?: DerivePathParams;\n }) {\n const {\n target,\n arguments: args = [],\n typeArguments = [],\n derivePathParams,\n } = callParams;\n const tx = new SuiTx();\n tx.moveCall(target, args, typeArguments);\n return this.signAndSendTxn(tx, derivePathParams);\n }\n\n /**\n * Select coins with the given amount and coin type, the total amount is greater than or equal to the given amount\n * @param amount\n * @param coinType\n * @param owner\n */\n async selectCoinsWithAmount(\n amount: number,\n coinType: string,\n owner?: string\n ) {\n owner = owner || this.accountManager.currentAddress;\n const coins = await this.suiInteractor.selectCoins(owner, amount, coinType);\n return coins.map((c) => c.objectId);\n }\n\n async selectObjectsWithType(objectType: string, owner?: string) {\n owner = owner || this.accountManager.currentAddress;\n const objects = await this.suiInteractor.selectObjects(owner, objectType);\n return objects.map((c) => c.objectId);\n }\n\n /**\n * stake the given amount of SUI to the validator\n * @param amount the amount of SUI to stake\n * @param validatorAddr the validator address\n * @param derivePathParams the derive path params for the current signer\n */\n async stakeSui(\n amount: number,\n validatorAddr: string,\n derivePathParams?: DerivePathParams\n ) {\n const tx = new SuiTx();\n tx.stakeSui(amount, validatorAddr);\n return this.signAndSendTxn(tx, derivePathParams);\n }\n\n /**\n * Execute the transaction with on-chain data but without really submitting. Useful for querying the effects of a transaction.\n * Since the transaction is not submitted, its gas cost is not charged.\n * @param tx the transaction to execute\n * @param derivePathParams the derive path params\n * @returns the effects and events of the transaction, such as object changes, gas cost, event emitted.\n */\n async inspectTxn(\n tx: Uint8Array | Transaction | SuiTx,\n derivePathParams?: DerivePathParams\n ): Promise<DevInspectResults> {\n const txBlock = tx instanceof SuiTx ? tx.tx : tx;\n return this.suiInteractor.currentClient.devInspectTransactionBlock({\n transactionBlock: txBlock,\n sender: this.getAddress(derivePathParams),\n });\n }\n\n async getOwnedObjects(owner: string, cursor?: string, limit?: number) {\n const ownedObjects = await this.suiInteractor.getOwnedObjects(\n owner,\n cursor,\n limit\n );\n const ownedObjectsRes: SuiObjectData[] = [];\n\n for (const object of ownedObjects.data) {\n const objectDetail = await this.getObject(object.data!.objectId);\n if (\n objectDetail.type!.split('::')[0] === this.contractFactory.packageId\n ) {\n ownedObjectsRes.push(objectDetail);\n }\n }\n\n return ownedObjectsRes;\n }\n\n async entity_key_from_object(objectId: string) {\n const checkObjectId = normalizeHexAddress(objectId);\n if (checkObjectId !== null) {\n objectId = checkObjectId;\n return objectId;\n } else {\n return undefined;\n }\n }\n\n async entity_key_from_bytes(bytes: Uint8Array | Buffer | string) {\n const hashBytes = keccak256(bytes);\n const hashU8Array: number[] = Array.from(hashBytes);\n const value = Uint8Array.from(hashU8Array);\n const Address = bcs.bytes(32).transform({\n // To change the input type, you need to provide a type definition for the input\n input: (val: string) => fromHEX(val),\n output: (val) => toHEX(val),\n });\n const data = Address.parse(value);\n return '0x' + data;\n }\n\n async entity_key_from_address_with_seed(objectId: string, seed: string) {\n const checkObjectId = normalizeHexAddress(objectId);\n if (checkObjectId !== null) {\n objectId = checkObjectId;\n const bytes = Buffer.from(objectId.slice(2), 'hex');\n const newBuffer = Buffer.concat([bytes, Buffer.from(seed, 'utf-8')]);\n return this.entity_key_from_bytes(newBuffer);\n } else {\n return undefined;\n }\n }\n\n async entity_key_from_address_with_u256(objectId: string, x: number) {\n const checkObjectId = normalizeHexAddress(objectId);\n if (checkObjectId !== null) {\n objectId = checkObjectId;\n const bytes = Buffer.from(objectId.slice(2), 'hex');\n\n const numberBytes = bcs.u256().serialize(x).toBytes();\n\n return this.entity_key_from_bytes(Buffer.concat([bytes, numberBytes]));\n } else {\n return undefined;\n }\n }\n\n async entity_key_from_u256(x: number) {\n return numberToAddressHex(x);\n }\n\n // async formatData(type: string, value: Buffer | number[] | Uint8Array) {\n // const u8Value = Uint8Array.from(value);\n // return bcs.de(type, u8Value);\n // }\n}\n","import { Ed25519Keypair } from '@mysten/sui/keypairs/ed25519';\nimport { getKeyPair } from './keypair';\nimport { hexOrBase64ToUint8Array, normalizePrivateKey } from './util';\nimport { generateMnemonic } from './crypto';\nimport type { AccountMangerParams, DerivePathParams } from 'src/types';\nimport {\n SUI_PRIVATE_KEY_PREFIX,\n decodeSuiPrivateKey,\n} from '@mysten/sui/cryptography';\n\nexport class SuiAccountManager {\n private mnemonics: string;\n private secretKey: string;\n public currentKeyPair: Ed25519Keypair;\n public currentAddress: string;\n\n /**\n * Support the following ways to init the SuiToolkit:\n * 1. mnemonics\n * 2. secretKey (base64 or hex)\n * If none of them is provided, will generate a random mnemonics with 24 words.\n *\n * @param mnemonics, 12 or 24 mnemonics words, separated by space\n * @param secretKey, base64 or hex string or Bech32 string, when mnemonics is provided, secretKey will be ignored\n */\n constructor({ mnemonics, secretKey }: AccountMangerParams = {}) {\n // If the mnemonics or secretKey is provided, use it\n // Otherwise, generate a random mnemonics with 24 words\n this.mnemonics = mnemonics || '';\n this.secretKey = secretKey || '';\n if (!this.mnemonics && !this.secretKey) {\n this.mnemonics = generateMnemonic(24);\n }\n\n // Init the current account\n this.currentKeyPair = this.secretKey\n ? this.parseSecretKey(this.secretKey)\n : getKeyPair(this.mnemonics);\n this.currentAddress = this.currentKeyPair.getPublicKey().toSuiAddress();\n }\n\n /**\n * Check if the secretKey starts with bench32 format\n */\n parseSecretKey(secretKey: string) {\n if (secretKey.startsWith(SUI_PRIVATE_KEY_PREFIX)) {\n const { secretKey: uint8ArraySecretKey } = decodeSuiPrivateKey(secretKey);\n return Ed25519Keypair.fromSecretKey(\n normalizePrivateKey(uint8ArraySecretKey)\n );\n }\n\n return Ed25519Keypair.fromSecretKey(\n normalizePrivateKey(hexOrBase64ToUint8Array(secretKey))\n );\n }\n\n /**\n * if derivePathParams is not provided or mnemonics is empty, it will return the currentKeyPair.\n * else:\n * it will generate keyPair from the mnemonic with the given derivePathParams.\n */\n getKeyPair(derivePathParams?: DerivePathParams) {\n if (!derivePathParams || !this.mnemonics) return this.currentKeyPair;\n return getKeyPair(this.mnemonics, derivePathParams);\n }\n\n /**\n * if derivePathParams is not provided or mnemonics is empty, it will return the currentAddress.\n * else:\n * it will generate address from the mnemonic with the given derivePathParams.\n */\n getAddress(derivePathParams?: DerivePathParams) {\n if (!derivePathParams || !this.mnemonics) return this.currentAddress;\n return getKeyPair(this.mnemonics, derivePathParams)\n .getPublicKey()\n .toSuiAddress();\n }\n\n /**\n * Switch the current account with the given derivePathParams.\n * This is only useful when the mnemonics is provided. For secretKey mode, it will always use the same account.\n */\n switchAccount(derivePathParams: DerivePathParams) {\n if (this.mnemonics) {\n this.currentKeyPair = getKeyPair(this.mnemonics, derivePathParams);\n this.currentAddress = this.currentKeyPair.getPublicKey().toSuiAddress();\n }\n }\n}\n","import { Ed25519Keypair } from '@mysten/sui/keypairs/ed25519';\nimport type { DerivePathParams } from '../../types';\n\n/**\n * @description Get ed25519 derive path for SUI\n * @param derivePathParams\n */\nexport const getDerivePathForSUI = (\n derivePathParams: DerivePathParams = {}\n) => {\n const {\n accountIndex = 0,\n isExternal = false,\n addressIndex = 0,\n } = derivePathParams;\n return `m/44'/784'/${accountIndex}'/${isExternal ? 1 : 0}'/${addressIndex}'`;\n};\n\n/**\n * the format is m/44'/784'/accountIndex'/${isExternal ? 1 : 0}'/addressIndex'\n *\n * accountIndex is the index of the account, default is 0.\n *\n * isExternal is the type of the address, default is false. Usually, the external address is used to receive coins. The internal address is used to change coins.\n *\n * addressIndex is the index of the address, default is 0. It's used to generate multiple addresses for one account.\n *\n * @description Get keypair from mnemonics and derive path\n * @param mnemonics\n * @param derivePathParams\n */\nexport const getKeyPair = (\n mnemonics: string,\n derivePathParams: DerivePathParams = {}\n) => {\n const derivePath = getDerivePathForSUI(derivePathParams);\n return Ed25519Keypair.deriveKeypair(mnemonics, derivePath);\n};\n","import { fromB64 } from '@mysten/sui/utils';\n\n/**\n * @description This regular expression matches any string that contains only hexadecimal digits (0-9, A-F, a-f).\n * @param str\n */\nexport const isHex = (str: string) =>\n /^0x[0-9a-fA-F]+$|^[0-9a-fA-F]+$/.test(str);\n\n/**\n * @description This regular expression matches any string that contains only base64 digits (0-9, A-Z, a-z, +, /, =).\n * Note that the \"=\" signs at the end are optional padding characters that may be present in some base64 encoded strings.\n * @param str\n */\nexport const isBase64 = (str: string) => /^[a-zA-Z0-9+/]+={0,2}$/g.test(str);\n\n/**\n * Convert a hex string to Uint8Array\n * @param hexStr\n */\nexport const fromHEX = (hexStr: string): Uint8Array => {\n if (!hexStr) {\n throw new Error('cannot parse empty string to Uint8Array');\n }\n const intArr = hexStr\n .replace('0x', '')\n .match(/.{1,2}/g)\n ?.map((byte) => parseInt(byte, 16));\n\n if (!intArr || intArr.length === 0) {\n throw new Error(`Unable to parse HEX: ${hexStr}`);\n }\n return Uint8Array.from(intArr);\n};\n\n/**\n * @description Convert a hex or base64 string to Uint8Array\n */\nexport const hexOrBase64ToUint8Array = (str: string): Uint8Array => {\n if (isHex(str)) {\n return fromHEX(str);\n } else if (isBase64(str)) {\n return fromB64(str);\n } else {\n throw new Error('The string is not a valid hex or base64 string.');\n }\n};\n\nconst PRIVATE_KEY_SIZE = 32;\nconst LEGACY_PRIVATE_KEY_SIZE = 64;\n/**\n * normalize a private key\n * A private key is a 32-byte array.\n * But there are two different formats for private keys:\n * 1. A 32-byte array\n * 2. A 64-byte array with the first 32 bytes being the private key and the last 32 bytes being the public key\n * 3. A 33-byte array with the first byte being 0x00 (sui.keystore key is a Base64 string with scheme flag 0x00 at the beginning)\n */\nexport const normalizePrivateKey = (key: Uint8Array): Uint8Array => {\n if (key.length === LEGACY_PRIVATE_KEY_SIZE) {\n // This is a legacy secret key, we need to strip the public key bytes and only read the first 32 bytes\n key = key.slice(0, PRIVATE_KEY_SIZE);\n } else if (key.length === PRIVATE_KEY_SIZE + 1 && key[0] === 0) {\n // sui.keystore key is a Base64 string with scheme flag 0x00 at the beginning\n return key.slice(1);\n } else if (key.length === PRIVATE_KEY_SIZE) {\n return key;\n }\n throw new Error('invalid secret key');\n};\n","import { generateMnemonic as genMnemonic } from '@scure/bip39';\nimport { wordlist } from '@scure/bip39/wordlists/english';\n\nexport const generateMnemonic = (numberOfWords: 12 | 24 = 24) => {\n const strength = numberOfWords === 12 ? 128 : 256;\n return genMnemonic(wordlist, strength);\n};\n","import { Transaction } from '@mysten/sui/transactions';\nimport { SUI_SYSTEM_STATE_OBJECT_ID } from '@mysten/sui/utils';\nimport type { SuiClient, SuiObjectRef } from '@mysten/sui/client';\nimport type {\n TransactionArgument,\n TransactionObjectArgument,\n TransactionObjectInput,\n} from '@mysten/sui/transactions';\nimport type { Keypair } from '@mysten/sui/cryptography';\nimport { SerializedBcs } from '@mysten/bcs';\n\nimport type {\n ObjectCallArg,\n TransactionType,\n SuiTxArg,\n SuiAddressArg,\n SuiObjectArg,\n SuiVecTxArg,\n SuiAmountsArg,\n} from '../../types';\n\nimport type { bcs } from '@mysten/sui/bcs';\nimport {\n convertArgs,\n convertAddressArg,\n convertObjArg,\n convertAmounts,\n} from './util';\nexport class SuiTx {\n public tx: Transaction;\n\n constructor(transaction?: Transaction) {\n if (transaction !== undefined) {\n this.tx = Transaction.from(transaction);\n } else {\n this.tx = new Transaction();\n }\n }\n\n /* Directly wrap methods and properties of TransactionBlock */\n get gas() {\n return this.tx.gas;\n }\n get blockData() {\n return this.tx.blockData;\n }\n address(value: string) {\n return this.tx.pure.address(value);\n }\n get pure(): {\n <T extends TransactionArgument>(value: T): TransactionArgument;\n address(value: string): TransactionArgument;\n u8(value: number | bigint): TransactionArgument;\n u16(value: number | bigint): TransactionArgument;\n u32(value: number | bigint): TransactionArgument;\n u64(value: number | bigint): TransactionArgument;\n u128(value: number | bigint): TransactionArgument;\n u256(value: number | bigint): TransactionArgument;\n bool(value: boolean): TransactionArgument;\n } {\n return this.tx.pure;\n }\n object(value: string | TransactionObjectInput) {\n return this.tx.object(value);\n }\n objectRef(ref: SuiObjectRef) {\n return this.tx.objectRef(ref);\n }\n sharedObjectRef(ref: typeof bcs.SharedObjectRef.$inferType) {\n return this.tx.sharedObjectRef(ref);\n }\n setSender(sender: string) {\n return this.tx.setSender(sender);\n }\n setSenderIfNotSet(sender: string) {\n return this.tx.setSenderIfNotSet(sender);\n }\n setExpiration(expiration?: Parameters<typeof this.tx.setExpiration>[0]) {\n return this.tx.setExpiration(expiration);\n }\n setGasPrice(price: number | bigint) {\n return this.tx.setGasPrice(price);\n }\n setGasBudget(budget: number | bigint) {\n return this.tx.setGasBudget(budget);\n }\n setGasOwner(owner: string) {\n return this.tx.setGasOwner(owner);\n }\n setGasPayment(payments: SuiObjectRef[]) {\n return this.tx.setGasPayment(payments);\n }\n serialize() {\n return this.tx.serialize();\n }\n toJSON() {\n return this.tx.toJSON();\n }\n sign(params: {\n signer: Keypair;\n client?: SuiClient;\n onlyTransactionKind?: boolean;\n }) {\n return this.tx.sign(params);\n }\n build(\n params: {\n client?: SuiClient;\n onlyTransactionKind?: boolean;\n } = {}\n ) {\n return this.tx.build(params);\n }\n getDigest(params: { client?: SuiClient } = {}) {\n return this.tx.getDigest(params);\n }\n add(...args: Parameters<typeof this.tx.add>) {\n return this.tx.add(...args);\n }\n publish({\n modules,\n dependencies,\n }: {\n modules: number[][] | string[];\n dependencies: string[];\n }) {\n return this.tx.publish({ modules, dependencies });\n }\n upgrade(...args: Parameters<typeof this.tx.upgrade>) {\n return this.tx.upgrade(...args);\n }\n makeMoveVec(...args: Parameters<typeof this.tx.makeMoveVec>) {\n return this.tx.makeMoveVec(...args);\n }\n\n /* Override methods of TransactionBlock */\n\n transferObjects(objects: SuiObjectArg[], address: SuiAddressArg) {\n return this.tx.transferObjects(\n objects.map((object) => convertObjArg(this.tx, object)),\n convertAddressArg(this.tx, address)\n );\n }\n\n splitCoins(coin: SuiObjectArg, amounts: SuiAmountsArg[]) {\n const res = this.tx.splitCoins(\n convertObjArg(this.tx, coin),\n convertAmounts(this.tx, amounts)\n );\n return amounts.map((_, i) => res[i]);\n }\n\n mergeCoins(destination: SuiObjectArg, sources: SuiObjectArg[]) {\n const destinationObject = convertObjArg(this.tx, destination);\n const sourceObjects = sources.map((source) =>\n convertObjArg(this.tx, source)\n );\n return this.tx.mergeCoins(destinationObject, sourceObjects);\n }\n\n /**\n * @description Move call\n * @param target `${string}::${string}::${string}`, e.g. `0x3::sui_system::request_add_stake`\n * @param args the arguments of the move call, such as `['0x1', '0x2']`\n * @param typeArgs the type arguments of the move call, such as `['0x2::sui::SUI']`\n */\n moveCall(\n target: string,\n args: (SuiTxArg | SuiVecTxArg)[] = [],\n typeArgs: string[] = []\n ) {\n // a regex for pattern `${string}::${string}::${string}`\n const regex =\n /(?<package>[a-zA-Z0-9]+)::(?<module>[a-zA-Z0-9_]+)::(?<function>[a-zA-Z0-9_]+)/;\n const match = target.match(regex);\n if (match === null)\n throw new Error(\n 'Invalid target format. Expected `${string}::${string}::${string}`'\n );\n const convertedArgs = convertArgs(this.tx, args);\n return this.tx.moveCall({\n target: target as `${string}::${string}::${string}`,\n arguments: convertedArgs,\n typeArguments: typeArgs,\n });\n }\n\n /* Enhance methods of TransactionBlock */\n\n transferSuiToMany(\n recipients: SuiAddressArg[],\n amounts: (SuiTxArg | number | bigint)[]\n ) {\n // require recipients.length === amounts.length\n if (recipients.length !== amounts.length) {\n throw new Error(\n 'transferSuiToMany: recipients.length !== amounts.length'\n );\n }\n const coins = this.tx.splitCoins(\n this.tx.gas,\n amounts.map((amount) =>\n typeof amount === 'number' || typeof amount === 'bigint'\n ? amount\n : convertArgs(this.tx, [amount])[0]\n )\n );\n const recipientObjects = recipients.map((recipient) =>\n convertAddressArg(this.tx, recipient)\n );\n recipientObjects.forEach((address, index) => {\n this.tx.transferObjects([coins[index]], address);\n });\n return this;\n }\n\n transferSui(address: SuiAddressArg, amount: SuiTxArg | number | bigint) {\n return this.transferSuiToMany([address], [amount]);\n }\n\n takeAmountFromCoins(\n coins: SuiObjectArg[],\n amount: SuiTxArg | number | bigint\n ) {\n const coinObjects = coins.map((coin) => convertObjArg(this.tx, coin));\n const mergedCoin = coinObjects[0];\n if (coins.length > 1) {\n this.tx.mergeCoins(mergedCoin, coinObjects.slice(1));\n }\n const [sendCoin] = this.tx.splitCoins(\n mergedCoin,\n convertAmounts(this.tx, [amount])\n );\n return [sendCoin, mergedCoin];\n }\n\n splitSUIFromGas(amounts: SuiAmountsArg[]) {\n return this.tx.splitCoins(this.tx.gas, convertAmounts(this.tx, amounts));\n }\n\n splitMultiCoins(coins: SuiObjectArg[], amounts: SuiAmountsArg[]) {\n const coinObjects = coins.map((coin) => convertObjArg(this.tx, coin));\n const mergedCoin = coinObjects[0];\n if (coins.length > 1) {\n this.tx.mergeCoins(mergedCoin, coinObjects.slice(1));\n }\n const splitedCoins = this.tx.splitCoins(\n mergedCoin,\n convertAmounts(this.tx, amounts)\n );\n return { splitedCoins, mergedCoin };\n }\n\n transferCoinToMany(\n coins: SuiObjectArg[],\n sender: SuiAddressArg,\n recipients: SuiAddressArg[],\n amounts: SuiAmountsArg[]\n ) {\n // require recipients.length === amounts.length\n if (recipients.length !== amounts.length) {\n throw new Error(\n 'transferSuiToMany: recipients.length !== amounts.length'\n );\n }\n const coinObjects = coins.map((coin) => convertObjArg(this.tx, coin));\n const { splitedCoins, mergedCoin } = this.splitMultiCoins(\n coinObjects,\n amounts\n );\n const recipientObjects = recipients.map((recipient) =>\n convertAddressArg(this.tx, recipient)\n );\n recipientObjects.forEach((address, index) => {\n this.tx.transferObjects([splitedCoins[index]], address);\n });\n this.tx.transferObjects([mergedCoin], convertAddressArg(this.tx, sender));\n return this;\n }\n\n transferCoin(\n coins: SuiObjectArg[],\n sender: SuiAddressArg,\n recipient: SuiAddressArg,\n amount: SuiAmountsArg\n ) {\n return this.transferCoinToMany(coins, sender, [recipient], [amount]);\n }\n\n stakeSui(amount: SuiTxArg | number | bigint, validatorAddr: SuiAddressArg) {\n const [stakeCoin] = this.tx.splitCoins(\n this.tx.gas,\n convertAmounts(this.tx, [amount])\n );\n return this.tx.moveCall({\n target: '0x3::sui_system::request_add_stake',\n arguments: convertArgs(this.tx, [\n this.tx.object(SUI_SYSTEM_STATE_OBJECT_ID),\n stakeCoin,\n convertAddressArg(this.tx, validatorAddr),\n ]),\n });\n }\n}\n","import {\n normalizeSuiObjectId,\n normalizeSuiAddress,\n isValidSuiObjectId,\n isValidSuiAddress,\n} from '@mysten/sui/utils';\nimport { Inputs, getPureBcsSchema } from '@mysten/sui/transactions';\nimport { SerializedBcs, bcs, isSerializedBcs } from '@mysten/bcs';\nimport type {\n TransactionArgument,\n Transaction,\n TransactionObjectArgument,\n} from '@mysten/sui/transactions';\nimport type {\n SuiObjectArg,\n SuiAddressArg,\n SuiTxArg,\n SuiVecTxArg,\n SuiInputTypes,\n SuiAmountsArg,\n} from 'src/types';\n\nexport const getDefaultSuiInputType = (\n value: SuiTxArg\n): 'u64' | 'bool' | 'object' | undefined => {\n if (typeof value === 'string' && isValidSuiObjectId(value)) {\n return 'object';\n } else if (typeof value === 'number' || typeof value === 'bigint') {\n return 'u64';\n } else if (typeof value === 'boolean') {\n return 'bool';\n } else {\n return undefined;\n }\n};\n\n/**\n * Since we know the elements in the array are the same type\n * If type is not provided, we will try to infer the type from the first element\n * By default,\n *\n * string is hex and its length equal to 32 =====> object id\n * number, bigint ====> u64\n * boolean =====> bool\n *\n * If type is provided, we will use the type to convert the array\n * @param args\n * @param type 'address' | 'bool' | 'u8' | 'u16' | 'u32' | 'u64' | 'u128' | 'u256' | 'signer' | 'object' | string\n */\nexport function makeVecParam(\n txBlock: Transaction,\n args: SuiTxArg[],\n type?: SuiInputTypes\n): TransactionArgument {\n if (args.length === 0)\n throw new Error('Transaction builder error: Empty array is not allowed');\n // Using first element value as default type\n const defaultSuiType = getDefaultSuiInputType(args[0]);\n const VECTOR_REGEX = /^vector<(.+)>$/;\n const STRUCT_REGEX = /^([^:]+)::([^:]+)::([^<]+)(<(.+)>)?/;\n\n type = type || defaultSuiType;\n\n if (type === 'object') {\n const elements = args.map((arg) =>\n typeof arg === 'string' && isValidSuiObjectId(arg)\n ? txBlock.object(normalizeSuiObjectId(arg))\n : convertObjArg(txBlock, arg as SuiObjectArg)\n );\n return txBlock.makeMoveVec({ elements });\n } else if (\n typeof type === 'string' &&\n !VECTOR_REGEX.test(type) &&\n !STRUCT_REGEX.test(type)\n ) {\n const bcsSchema = getPureBcsSchema(type)!;\n return txBlock.pure(bcs.vector(bcsSchema).serialize(args));\n } else {\n const elements = args.map((arg) =>\n convertObjArg(txBlock, arg as SuiObjectArg)\n );\n return txBlock.makeMoveVec({ elements, type });\n }\n}\n\n/**\n * Check whether it is an valid move vec input.\n *\n * @param arg The argument to check.\n * @returns boolean.\n */\nexport function isMoveVecArg(arg: SuiTxArg | SuiVecTxArg): arg is SuiVecTxArg {\n if (typeof arg === 'object' && 'vecType' in arg && 'value' in arg) {\n return true;\n } else if (Array.isArray(arg)) {\n return true;\n }\n return false;\n}\n\n/**\n * Convert any valid input into array of TransactionArgument.\n *\n * @param txb The Transaction Block\n * @param args The array of argument to convert.\n * @returns The converted array of TransactionArgument.\n */\nexport function convertArgs(\n txBlock: Transaction,\n args: (SuiTxArg | SuiVecTxArg)[]\n): TransactionArgument[] {\n return args.map((arg) => {\n if (arg instanceof SerializedBcs || isSerializedBcs(arg)) {\n return txBlock.pure(arg);\n }\n\n if (isMoveVecArg(arg)) {\n const vecType = 'vecType' in arg;\n return vecType\n ? makeVecParam(txBlock, arg.value, arg.vecType)\n : makeVecParam(txBlock, arg);\n }\n\n return arg;\n });\n}\n\n/**\n * Convert any valid address input into a TransactionArgument.\n *\n * @param txb The Transaction Block\n * @param arg The address argument to convert.\n * @returns The converted TransactionArgument.\n */\nexport function convertAddressArg(\n txBlock: Transaction,\n arg: SuiAddressArg\n): TransactionArgument {\n if (typeof arg === 'string' && isValidSuiAddress(arg)) {\n return txBlock.pure.address(normalizeSuiAddress(arg));\n } else {\n return convertArgs(txBlock, [arg])[0];\n }\n}\n\n/**\n * Convert any valid object input into a TransactionArgument.\n *\n * @param txb The Transaction Block\n * @param arg The object argument to convert.\n * @returns The converted TransactionArgument.\n */\nexport function convertObjArg(\n txb: Transaction,\n arg: SuiObjectArg\n): TransactionObjectArgument {\n if (typeof arg === 'string') {\n return txb.object(arg);\n }\n\n if ('digest' in arg && 'version' in arg && 'objectId' in arg) {\n return txb.objectRef(arg);\n }\n\n if ('objectId' in arg && 'initialSharedVersion' in arg && 'mutable' in arg) {\n return txb.sharedObjectRef(arg);\n }\n\n if ('Object' in arg) {\n if ('ImmOrOwnedObject' in arg.Object) {\n return txb.object(Inputs.ObjectRef(arg.Object.ImmOrOwnedObject));\n } else if ('SharedObject' in arg.Object) {\n return txb.object(Inputs.SharedObjectRef(arg.Object.SharedObject));\n } else {\n throw new Error('Invalid argument type');\n }\n }\n\n if (typeof arg === 'function') {\n return arg;\n }\n\n if (\n 'GasCoin' in arg ||\n 'Input' in arg ||\n 'Result' in arg ||\n 'NestedResult' in arg\n ) {\n return arg;\n }\n\n throw new Error('Invalid argument type');\n}\n\nexport function convertAmounts(txBlock: Transaction, amounts: SuiAmountsArg[]) {\n return amounts.map((amount) => {\n if (typeof amount === 'number' || typeof amount === 'bigint') {\n return amount;\n } else {\n return convertArgs(txBlock, [amount])[0];\n }\n });\n}\n","import { SuiClient } from '@mysten/sui/client';\nimport type {\n SuiTransactionBlockResponseOptions,\n SuiTransactionBlockResponse,\n SuiObjectDataOptions,\n SuiObjectData,\n} from '@mysten/sui/client';\nimport type * as RpcTypes from '@mysten/sui/dist/cjs/client/types/generated';\nimport { requestSuiFromFaucetV0, getFaucetHost } from '@mysten/sui/faucet';\nimport { FaucetNetworkType, NetworkType, ObjectData } from '../../types';\nimport { SuiOwnedObject, SuiSharedObject } from '../suiModel';\nimport { delay } from './util';\n\n/**\n * `SuiTransactionSender` is used to send transaction with a given gas coin.\n * It always uses the gas coin to pay for the gas,\n * and update the gas coin after the transaction.\n */\nexport class SuiInteractor {\n public readonly clients: SuiClient[];\n public currentClient: SuiClient;\n public readonly fullNodes: string[];\n public currentFullNode: string;\n\n public network?: NetworkType;\n\n constructor(fullNodeUrls: string[], network?: NetworkType) {\n if (fullNodeUrls.length === 0)\n throw new Error('fullNodeUrls must not be empty');\n this.fullNodes = fullNodeUrls;\n this.clients = fullNodeUrls.map((url) => new SuiClient({ url }));\n this.currentFullNode = fullNodeUrls[0];\n this.currentClient = this.clients[0];\n this.network = network;\n }\n\n switchToNextClient() {\n const currentClientIdx = this.clients.indexOf(this.currentClient);\n this.currentClient =\n this.clients[(currentClientIdx + 1) % this.clients.length];\n this.currentFullNode =\n this.fullNodes[(currentClientIdx + 1) % this.clients.length];\n }\n\n async sendTx(\n transactionBlock: Uint8Array | string,\n signature: string | string[]\n ): Promise<SuiTransactionBlockResponse> {\n const txResOptions: SuiTransactionBlockResponseOptions = {\n showEvents: true,\n showEffects: true,\n showObjectChanges: true,\n showBalanceChanges: true,\n };\n\n // const currentProviderIdx = this.providers.indexOf(this.currentProvider);\n // const providers = [\n // ...this.providers.slice(currentProviderIdx, this.providers.length),\n // ...this.providers.slice(0, currentProviderIdx),\n // ]\n\n for (const clientIdx in this.clients) {\n try {\n return await this.clients[clientIdx].executeTransactionBlock({\n transactionBlock,\n signature,\n options: txResOptions,\n });\n } catch (err) {\n console.warn(\n `Failed to send transaction with fullnode ${this.fullNodes[clientIdx]}: ${err}`\n );\n await delay(2000);\n }\n }\n throw new Error('Failed to send transaction with all fullnodes');\n }\n\n async waitForTransaction({\n digest,\n timeout = 60 * 1000,\n pollInterval = 2 * 1000,\n }: {\n digest: string;\n timeout?: number;\n pollInterval?: number;\n }) {\n for (const clientIdx in this.clients) {\n try {\n const txResOptions: SuiTransactionBlockResponseOptions = {\n showEvents: true,\n showEffects: true,\n showObjectChanges: true,\n showBalanceChanges: true,\n };\n\n return await this.clients[clientIdx].waitForTransaction({\n digest,\n timeout,\n pollInterval,\n options: txResOptions,\n });\n } catch (err) {\n console.warn(\n `Failed to wait for transaction with fullnode ${this.fullNodes[clientIdx]}: ${err}`\n );\n await delay(2000);\n }\n }\n throw new Error('Failed to wait for transaction with all fullnodes');\n }\n\n async getObjects(\n ids: string[],\n options?: SuiObjectDataOptions\n ): Promise<SuiObjectData[]> {\n const opts: SuiObjectDataOptions = options ?? {\n showContent: true,\n showDisplay: true,\n showType: true,\n showOwner: true,\n };\n\n for (const clientIdx in this.clients) {\n try {\n const objects = await this.clients[clientIdx].multiGetObjects({\n ids,\n options: opts,\n });\n const parsedObjects = objects\n .map((object) => {\n return object.data;\n })\n .filter((object) => object !== null && object !== undefined);\n return parsedObjects as SuiObjectData[];\n } catch (err) {\n await delay(2000);\n console.warn(\n `Failed to get objects with fullnode ${this.fullNodes[clientIdx]}: ${err}`\n );\n }\n }\n throw new Error('Failed to get objects with all fullnodes');\n }\n\n async getObject(id: string) {\n const objects = await this.getObjects([id]);\n return objects[0];\n }\n\n async getDynamicFieldObject(\n parentId: string,\n name: RpcTypes.DynamicFieldName\n ) {\n for (const clientIdx in this.clients) {\n try {\n return await this.clients[clientIdx].getDynamicFieldObject({\n parentId,\n name,\n });\n } catch (err) {\n await delay(2000);\n console.warn(\n `Failed to get DynamicFieldObject with fullnode ${this.fullNodes[clientIdx]}: ${err}`\n );\n }\n }\n throw new Error('Failed to get DynamicFieldObject with all fullnodes');\n }\n\n async getDynamicFields(parentId: string, cursor?: string, limit?: number) {\n for (const clientIdx in this.clients) {\n try {\n return await this.clients[clientIdx].getDynamicFields({\n parentId,\n cursor,\n limit,\n });\n } catch (err) {\n await delay(2000);\n console.warn(\n `Failed to get DynamicFields with fullnode ${this.fullNodes[clientIdx]}: ${err}`\n );\n }\n }\n throw new Error('Failed to get DynamicFields with all fullnodes');\n }\n\n async getTxDetails(digest: string) {\n for (const clientIdx in this.clients) {\n try {\n const txResOptions: SuiTransactionBlockResponseOptions = {\n showEvents: true,\n showEffects: true,\n showObjectChanges: true,\n showBalanceChanges: true,\n };\n\n return await this.clients[clientIdx].getTransactionBlock({\n digest,\n options: txResOptions,\n });\n } catch (err) {\n await delay(2000);\n console.warn(\n `Failed to get TransactionBlocks with fullnode ${this.fullNodes[clientIdx]}: ${err}`\n );\n }\n }\n throw new Error('Failed to get TransactionBlocks with all fullnodes');\n }\n\n async getOwnedObjects(owner: string, cursor?: string, limit?: number) {\n for (const clientIdx in this.clients) {\n try {\n return await this.clients[clientIdx].getOwnedObjects({\n owner,\n cursor,\n limit,\n });\n } catch (err) {\n await delay(2000);\n console.warn(\n `Failed to get OwnedObjects with fullnode ${this.fullNodes[clientIdx]}: ${err}`\n );\n }\n }\n throw new Error('Failed to get OwnedObjects with all fullnodes');\n }\n\n async getNormalizedMoveModulesByPackage(packageId: string) {\n for (const clientIdx in this.clients) {\n try {\n return await this.clients[clientIdx].getNormalizedMoveModulesByPackage({\n package: packageId,\n });\n } catch (err) {\n await delay(2000);\n console.warn(\n `Failed to get NormalizedMoveModules with fullnode ${this.fullNodes[clientIdx]}: ${err}`\n );\n }\n }\n throw new Error('Failed to get NormalizedMoveModules with all fullnodes');\n }\n\n /**\n * @description Update objects in a batch\n * @param suiObjects\n */\n async updateObjects(suiObjects: (SuiOwnedObject | SuiSharedObject)[]) {\n const objectIds = suiObjects.map((obj) => obj.objectId);\n const objects = await this.getObjects(objectIds);\n for (const object of objects) {\n const suiObject = suiObjects.find(\n (obj) => obj.objectId === object?.objectId\n );\n if (suiObject instanceof SuiSharedObject) {\n if (\n object.owner &&\n typeof object.owner === 'object' &&\n 'Shared' in object.owner\n ) {\n suiObject.initialSharedVersion =\n object.owner.Shared.initial_shared_version;\n } else {\n suiObject.initialSharedVersion = undefined;\n }\n } else if (suiObject instanceof SuiOwnedObject) {\n suiObject.version = object?.version;\n suiObject.digest = object?.digest;\n }\n }\n }\n\n /**\n * @description Select coins that add up to the given amount.\n * @param addr the address of the owner\n * @param amount the amount that is needed for the coin\n * @param coinType the coin type, default is '0x2::SUI::SUI'\n */\n async selectCoins(\n addr: string,\n amount: number,\n coinType: string = '0x2::SUI::SUI'\n ) {\n const selectedCoins: {\n objectId: string;\n digest: string;\n version: string;\n balance: string;\n }[] = [];\n let totalAmount = 0;\n let hasNext = true,\n nextCursor: string | null | undefined = null;\n while (hasNext && totalAmount < amount) {\n const coins = await this.currentClient.getCoins({\n owner: addr,\n coinType: coinType,\n cursor: nextCursor,\n });\n // Sort the coins by balance in descending order\n coins.data.sort((a, b) => parseInt(b.balance) - parseInt(a.balance));\n for (const coinData of coins.data) {\n selectedCoins.push({\n objectId: coinData.coinObjectId,\n digest: coinData.digest,\n version: coinData.version,\n balance: coinData.balance,\n });\n totalAmount = totalAmount + parseInt(coinData.balance);\n if (totalAmount >= amount) {\n break;\n }\n }\n\n nextCursor = coins.nextCursor;\n hasNext = coins.hasNextPage;\n }\n\n if (!selectedCoins.length) {\n throw new Error('No valid coins found for the transaction.');\n }\n return selectedCoins;\n }\n\n /**\n * @description Select owned objects with objectType.\n * @param addr the address of the owner\n * @param objectType the coin type, default is '0x2::SUI::SUI'\n */\n async selectObjects(addr: string, objectType: string) {\n const selectedObjects = [];\n let hasNext = true,\n nextCursor: string | null | undefined = null;\n while (hasNext) {\n const ownedObjects = await this.currentClient.getOwnedObjects({\n owner: addr,\n cursor: nextCursor,\n });\n\n for (const objectData of ownedObjects.data) {\n const objectDetail = await this.getObject(objectData.data!.objectId);\n if (objectDetail.type === objectType) {\n selectedObjects.push(objectDetail);\n }\n }\n\n nextCursor = ownedObjects.nextCursor;\n hasNext = ownedObjects.hasNextPage;\n }\n\n if (!selectedObjects.length) {\n throw new Error('Not own this object found for the transaction.');\n }\n return selectedObjects;\n }\n\n async requestFaucet(address: string, network: FaucetNetworkType) {\n await requestSuiFromFaucetV0({\n host: getFaucetHost(network),\n recipient: address,\n });\n }\n}\n","import type { SuiTransactionBlockResponse } from '@mysten/sui/client';\nimport type { CallArg } from '@mysten/sui/transactions';\n\nexport class SuiOwnedObject {\n public readonly objectId: string;\n public version?: string;\n public digest?: string;\n\n constructor(param: { objectId: string; version?: string; digest?: string }) {\n this.objectId = param.objectId;\n this.version = param.version;\n this.digest = param.digest;\n }\n\n /**\n * Check if the object is fully initialized.\n * So that when it's used as an input, it won't be necessary to fetch from fullnode again.\n * Which can save time when sending transactions.\n */\n isFullObject(): boolean {\n return !!this.version && !!this.digest;\n }\n\n asCallArg(): CallArg | string {\n if (!this.version || !this.digest) {\n return this.objectId;\n }\n return {\n $kind: 'Object',\n Object: {\n $kind: 'ImmOrOwnedObject',\n ImmOrOwnedObject: {\n objectId: this.objectId,\n version: this.version,\n digest: this.digest,\n },\n },\n };\n }\n\n /**\n * Update object version & digest based on the transaction response.\n * @param txResponse\n */\n updateFromTxResponse(txResponse: SuiTransactionBlockResponse) {\n const changes = txResponse.objectChanges;\n if (!changes) {\n throw new Error('Bad transaction response!');\n }\n for (const change of changes) {\n if (change.type === 'mutated' && change.objectId === this.objectId) {\n this.digest = change.digest;\n this.version = change.version;\n return;\n }\n }\n throw new Error('Could not find object in transaction response!');\n }\n}\n","import type { CallArg } from '@mysten/sui/transactions';\n\nexport class SuiSharedObject {\n public readonly objectId: string;\n public initialSharedVersion?: string;\n\n constructor(param: {\n objectId: string;\n initialSharedVersion?: string;\n mutable?: boolean;\n }) {\n this.objectId = param.objectId;\n this.initialSharedVersion = param.initialSharedVersion;\n }\n\n asCallArg(mutable: boolean = false): CallArg | string {\n if (!this.initialSharedVersion) {\n return this.objectId;\n }\n return {\n $kind: 'Object',\n Object: {\n $kind: 'SharedObject',\n SharedObject: {\n objectId: this.objectId,\n initialSharedVersion: this.initialSharedVersion,\n mutable,\n },\n },\n };\n }\n}\n","export const delay = (ms: number) =>\n new Promise((resolve) => setTimeout(resolve, ms));\n","import { NetworkType } from 'src/types';\n\nexport interface NetworkConfig {\n fullNode: string;\n graphql?: string;\n network: string;\n txExplorer: string;\n accountExplorer: string;\n explorer: string;\n indexerUrl: string;\n}\n\nexport const getDefaultURL = (\n networkType: NetworkType = 'testnet'\n): NetworkConfig => {\n switch (networkType) {\n case 'localnet':\n return {\n fullNode: 'http://127.0.0.1:9000',\n graphql: 'http://127.0.0.1:9125',\n network: 'localnet',\n txExplorer:\n 'https://explorer.polymedia.app/txblock/:txHash?network=local',\n accountExplorer:\n 'https://explorer.polymedia.app/address/:address?network=local',\n explorer: 'https://explorer.polymedia.app?network=local',\n indexerUrl: 'http://127.0.0.1:3001',\n };\n case 'devnet':\n return {\n fullNode: 'https://fullnode.devnet.sui.io:443',\n network: 'devnet',\n txExplorer: 'https://suiscan.xyz/devnet/tx/:txHash',\n accountExplorer: 'https://suiscan.xyz/devnet/address/:address',\n explorer: 'https://suiscan.xyz/devnet',\n indexerUrl: 'http://127.0.0.1:3001',\n };\n case 'testnet':\n return {\n fullNode: 'https://fullnode.testnet.sui.io:443',\n graphql: 'https://sui-testnet.mystenlabs.com/graphql',\n network: 'testnet',\n txExplorer: 'https://suiscan.xyz/testnet/tx/:txHash',\n accountExplorer: 'https://suiscan.xyz/testnet/address/:address',\n explorer: 'https://suiscan.xyz/testnet',\n indexerUrl: 'http://127.0.0.1:3001',\n };\n case 'mainnet':\n return {\n fullNode: 'https://fullnode.mainnet.sui.io:443',\n graphql: 'https://sui-mainnet.mystenlabs.com/graphql',\n network: 'mainnet',\n txExplorer: 'https://suiscan.xyz/mainnet/tx/:txHash',\n accountExplorer: 'https://suiscan.xyz/mainnet/address/:address',\n explorer: 'https://suiscan.xyz/mainnet',\n indexerUrl: 'http://127.0.0.1:3001',\n };\n default:\n return {\n fullNode: 'https://fullnode.testnet.sui.io:443',\n graphql: 'https://sui-testnet.mystenlabs.com/graphql',\n network: 'testnet',\n txExplorer: 'https://suiscan.xyz/testnet/tx/:txHash',\n accountExplorer: 'https://suiscan.xyz/testnet/address/:address',\n explorer: 'https://suiscan.xyz/testnet',\n indexerUrl: 'http://127.0.0.1:3001',\n };\n }\n};\n","import type { SuiMoveNormalizedModules } from '@mysten/sui/client';\nimport type { ContractFactoryParams, SuiMoveMoudleValueType } from './types';\nexport type ApiTypes = 'promise' | 'rxjs';\n\n// export interface ContractQuery {\n// (origin: AccountId | string | Uint8Array, options: ContractOptions, ...params: unknown[]): SuiTransactionBlockResponse<ApiType, ContractCallOutcome>;\n// }\n\n// export type MapMessageQuery<ApiType extends ApiTypes> = Record<string, ContractQuery<ApiType>>;\n\n// // function createQuery <ApiType extends ApiTypes> (meta: AbiMessage, fn: (origin: string | AccountId | Uint8Array, options: ContractOptions, params: unknown[]) => ContractCallResult<ApiType, ContractCallOutcome>): ContractQuery<ApiType> {\n// // return withMeta(meta, (origin: string | AccountId | Uint8Array, options: ContractOptions, ...params: unknown[]): ContractCallResult<ApiType, ContractCallOutcome> =>\n// // fn(origin, options, params)\n// // );\n// // }\n\n// export type MapMessageTx<ApiType extends ApiTypes> = Record<string, ContractTx<ApiType>>;\n\n// export interface ContractOptions {\n// gasLimit?: bigint | string | number | BN | WeightV2;\n// storageDepositLimit?: bigint | string | number | BN | null;\n// value?: bigint | BN | string | number;\n// }\n\n// export interface ContractTx {\n// (options: ContractOptions, ...params: unknown[]): SubmittableExtrinsic<ApiType>;\n// }\nexport class SuiContractFactory {\n public packageId: string;\n public metadata: SuiMoveNormalizedModules | undefined;\n // readonly #query: MapMessageQuery<ApiTypes> = {};\n // readonly #tx: MapMessageTx<ApiTypes> = {};\n /**\n * Support the following ways to init the SuiToolkit:\n * 1. mnemonics\n * 2. secretKey (base64 or hex)\n * If none of them is provided, will generate a random mnemonics with 24 words.\n *\n * @param mnemonics, 12 or 24 mnemonics words, separated by space\n * @param secretKey, base64 or hex string, when mnemonics is provided, secretKey will be ignored\n */\n constructor({ packageId, metadata }: ContractFactoryParams = {}) {\n // If the mnemonics or secretKey is provided, use it\n // Otherwise, generate a random mnemonics with 24 words\n this.packageId = packageId || '';\n this.metadata = metadata || undefined;\n }\n\n getFuncByModuleName(moduleName: string) {\n Object.values(this.metadata as SuiMoveNormalizedModules).forEach(\n (value) => {\n const data = value as SuiMoveMoudleValueType;\n console.log(`moudle name: ${data.name}`);\n // console.log(data.exposedFunctions)\n Object.entries(data.exposedFunctions).forEach(([key, value]) => {\n console.log(`\\tfunc name: ${key}`);\n Object.values(value.parameters).forEach((values) => {\n // console.log(values)\n });\n });\n }\n );\n }\n\n getAllFunc() {\n Object.values(this.metadata as SuiMoveNormalizedModules).forEach(\n (value) => {\n const data = value as SuiMoveMoudleValueType;\n console.log(`moudle name: ${data.name}`);\n // console.log(data.exposedFunctions)\n Object.entries(data.exposedFunctions).forEach(([key, value]) => {\n console.log(`\\tfunc name: ${key}`);\n console.log(`\\t\\t${value.parameters.length}`);\n Object.values(value.parameters).forEach((values) => {\n // console.log(values)\n console.log(`\\t\\targs: ${values}`);\n });\n });\n }\n );\n }\n\n getAllModule() {\n Object.values(this.metadata as SuiMoveNormalizedModules).forEach(\n (value, index) => {\n const data = value as SuiMoveMoudleValueType;\n console.log(`${index}. ${data.name}`);\n }\n );\n }\n\n // async call(arguments: ({\n // kind: \"Input\";\n // index: number;\n // type?: \"object\" | \"pure\" | undefined;\n // value?: any;\n // } | {\n // kind: \"GasCoin\";\n // } | {\n // kind: \"Result\";\n // index: number;\n // } | {\n // kind: \"NestedResult\";\n // index: number;\n // resultIndex: number;\n // })[], derivePathParams?: DerivePathParams) {\n // const tx = new TransactionBlock();\n // tx.moveCall({\n // target: `${this.packageId}::${}::${}`,\n // arguments,\n // })\n // return ;\n // }\n}\n\n// function createTx <ApiType extends ApiTypes> (meta: AbiMessage, fn: (options: ContractOptions, params: unknown[]) => SubmittableExtrinsic<ApiType>): ContractTx<ApiType> {\n// return withMeta(meta, (options: ContractOptions, ...params: unknown[]): SubmittableExtrinsic<ApiType> =>\n// fn(options, params)\n// );\n// }\n","export function capitalizeFirstLetter(input: string): string {\n return input.charAt(0).toUpperCase() + input.slice(1);\n}\n\nexport function normalizeHexAddress(input: string): string | null {\n const hexRegex = /^(0x)?[0-9a-fA-F]{64}$/;\n\n if (hexRegex.test(input)) {\n if (input.startsWith('0x')) {\n return input;\n } else {\n return '0x' + input;\n }\n } else {\n return null;\n }\n}\n\nexport function numberToAddressHex(num: number): string {\n const hex = num.toString(16);\n const paddedHex = '0x' + hex.padStart(64, '0');\n return paddedHex;\n}\n\nexport function normalizePackageId(input: string): string {\n const withPrefix = input.startsWith('0x') ? input : '0x' + input;\n const withoutPrefix = withPrefix.slice(2);\n const normalized = withoutPrefix.replace(/^0+/, '');\n return '0x' + normalized;\n}\n\nexport function convertHttpToWebSocket(url: string): string {\n if (url.startsWith('https://')) {\n return url.replace('https://', 'wss://');\n } else if (url.startsWith('http://')) {\n return url.replace('http://', 'ws://');\n }\n return url;\n}\n","export class ContractDataParsingError extends Error {\n public readonly errorType: string;\n public readonly functionName: string;\n public readonly moduleAddress: string;\n public readonly errorMessage: string;\n\n constructor(dryResult: any) {\n const error = dryResult?.effects?.status?.error || '';\n const functionMatch = error\n ? error.match(/function_name: Some\\(\"([^\"]+)\"\\)/)\n : null;\n const moduleMatch = error ? error.match(/address: ([a-fA-F0-9]+)/) : null;\n\n const functionName = functionMatch ? functionMatch[1] : 'unknown';\n const moduleAddress = moduleMatch ? '0x' + moduleMatch[1] : 'unknown';\n const errorMessage = dryResult.error ? dryResult.error : 'UNKNOWN_ERROR';\n\n const message = [\n `\\n- Function: ${functionName}`,\n `- Module Address: ${moduleAddress}`,\n `- Error Message: ${errorMessage}`,\n ].join('\\n');\n\n super(message);\n\n this.errorType = 'ContractDataParsingError';\n this.functionName = functionName;\n this.moduleAddress = moduleAddress;\n this.errorMessage = errorMessage;\n }\n}\n","import { Http } from '../http';\nimport { WebSocket } from 'ws';\n\nexport interface OrderDirection {\n ASC: 'ASC';\n DESC: 'DESC';\n}\n\nexport interface OrderBy {\n field: string;\n direction: OrderDirection['ASC'] | OrderDirection['DESC'];\n}\n\nexport interface PageInfo {\n hasNextPage: boolean;\n hasPreviousPage: boolean;\n startCursor?: string;\n endCursor?: string;\n}\n\nexport interface Transaction {\n id: number;\n checkpoint: number;\n digest: string;\n}\n\nexport interface Schema {\n id: number;\n name: string;\n key1?: string;\n key2?: string;\n value: string;\n last_update_checkpoint: string;\n last_update_digest: string;\n is_removed: boolean;\n}\n\nexport interface Event {\n id: number;\n checkpoint: string;\n digest: string;\n name: string;\n value: string;\n}\n\nexport interface ConnectionResponse<T> {\n edges: Array<{\n cursor: string;\n node: T;\n }>;\n pageInfo: PageInfo;\n}\n\nexport class SuiIndexerClient {\n private http: Http;\n\n constructor(http: Http) {\n this.http = http;\n }\n\n private async fetchGraphql<T>(query: string, variables?: any): Promise<T> {\n return this.http.fetchGraphql({ query, variables });\n }\n\n async getTransactions(params?: {\n first?: number;\n after?: string;\n last?: number;\n before?: string;\n checkpoint?: number;\n orderBy?: OrderBy;\n distinct?: boolean;\n }) {\n const query = `\n query GetTransactions($first: Int, $after: String, $last: Int, $before: String, $checkpoint: Int, $orderBy: TransactionOrderBy, $distinct: Boolean) {\n transactions(first: $first, after: $after, last: $last, before: $before, checkpoint: $checkpoint, orderBy: $orderBy, distinct: $distinct) {\n edges {\n cursor\n node {\n id\n checkpoint\n digest\n }\n }\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n }\n }\n `;\n\n const response = await this.fetchGraphql<{\n transactions: ConnectionResponse<Transaction>;\n }>(query, params);\n return response.transactions;\n }\n\n async getSchemas(params?: {\n first?: number;\n after?: string;\n last?: number;\n before?: string;\n name?: string;\n key1?: string;\n key2?: string;\n orderBy?: OrderBy;\n distinct?: boolean;\n }): Promise<ConnectionResponse<Schema>> {\n const query = `\n query GetSchemas($first: Int, $after: String, $last: Int, $before: String, $name: String, $key1: String, $key2: String, $orderBy: SchemaOrderBy, $distinct: Boolean) {\n schemas(first: $first, after: $after, last: $last, before: $before, name: $name, key1: $key1, key2: $key2, orderBy: $orderBy, distinct: $distinct) {\n edges {\n cursor\n node {\n id\n name\n key1\n key2\n value\n last_update_checkpoint\n last_update_digest\n is_removed\n }\n }\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n }\n }\n `;\n\n const response = await this.fetchGraphql<{\n schemas: ConnectionResponse<Schema>;\n }>(query, params);\n return response.schemas;\n }\n\n async getEvents(params?: {\n first?: number;\n after?: string;\n last?: number;\n before?: string;\n name?: string;\n checkpoint?: string;\n orderBy?: OrderBy;\n distinct?: boolean;\n }) {\n const query = `\n query GetEvents($first: Int, $after: String, $last: Int, $before: String, $name: String, $checkpoint: String, $orderBy: EventOrderBy, $distinct: Boolean) {\n events(first: $first, after: $after, last: $last, before: $before, name: $name, checkpoint: $checkpoint, orderBy: $orderBy, distinct: $distinct) {\n edges {\n cursor\n node {\n id\n checkpoint\n digest\n name\n value\n }\n }\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n }\n }\n `;\n\n const response = await this.fetchGraphql<{\n events: ConnectionResponse<Event>;\n }>(query, params);\n return response.events;\n }\n\n async getStorage({\n name,\n key1,\n key2,\n first,\n after,\n last,\n before,\n orderBy,\n distinct,\n }: {\n name: string;\n key1?: string;\n key2?: string;\n first?: number;\n after?: string;\n last?: number;\n before?: string;\n orderBy?: OrderBy;\n distinct?: boolean;\n }): Promise<ConnectionResponse<Schema>> {\n const schemas = await this.getSchemas({\n name,\n key1,\n key2,\n first,\n after,\n last,\n before,\n orderBy,\n distinct,\n });\n\n return schemas;\n }\n\n async subscribe(\n names: string[],\n handleData: (data: any) => void\n ): Promise<WebSocket> {\n return this.http.subscribe(names, handleData);\n }\n}\n","import createWebSocketStream from './lib/stream.js';\nimport Receiver from './lib/receiver.js';\nimport Sender from './lib/sender.js';\nimport WebSocket from './lib/websocket.js';\nimport WebSocketServer from './lib/websocket-server.js';\n\nexport { createWebSocketStream, Receiver, Sender, WebSocket, WebSocketServer };\nexport default WebSocket;\n","export class BaseError extends Error {\n constructor(message: string, public code: number, public type: string) {\n super(message);\n this.name = this.constructor.name;\n }\n}\n\nexport class HttpError extends BaseError {\n constructor(message: string, code: number) {\n super(message, code, 'ERROR_HTTP');\n }\n}\n\nexport class GraphQLError extends BaseError {\n constructor(message: string) {\n super(message, 400, 'ERROR_GRAPHQL');\n }\n}\n\nexport class ValidationError extends BaseError {\n constructor(message: string) {\n super(message, 400, 'ERROR_VALIDATION');\n }\n}\n\nexport class NotFoundError extends BaseError {\n constructor(message: string) {\n super(message, 404, 'ERROR_NOT_FOUND');\n }\n}\n\nexport class ParseError extends BaseError {\n constructor(message: string) {\n super(message, 500, 'ERROR_PARSE');\n }\n}\n\nexport type ErrorType =\n | BaseError\n | Error\n | HttpError\n | NotFoundError\n | ValidationError\n | ParseError\n | GraphQLError;\n\nexport function handleError(error: ErrorType) {\n if (!(error instanceof Error)) {\n return {\n code: 500,\n error: {\n message: 'Unknown error occurred',\n type: `ERROR_UNKNOWN`,\n },\n };\n }\n\n switch (true) {\n case error instanceof HttpError:\n return {\n code: (error as HttpError).code,\n error: {\n message: error.message,\n type: 'ERROR_HTTP',\n },\n };\n\n case error instanceof GraphQLError:\n return {\n code: 400,\n error: {\n message: error.message,\n type: 'ERROR_GRAPHQL',\n },\n };\n\n case error instanceof ValidationError:\n return {\n code: 400,\n error: {\n message: error.message,\n type: 'ERROR_VALIDATION',\n },\n };\n\n case error instanceof NotFoundError:\n return {\n code: 404,\n error: {\n message: error.message,\n type: 'ERROR_NOT_FOUND',\n },\n };\n\n case error instanceof ParseError:\n return {\n code: 500,\n error: {\n message: error.message,\n type: 'ERROR_PARSE',\n },\n };\n\n case error instanceof BaseError:\n return {\n code: (error as BaseError).code,\n error: {\n message: error.message,\n type: (error as BaseError).type,\n },\n };\n\n default:\n return {\n code: 500,\n error: {\n message: error.message || 'Internal server error',\n type: 'ERROR_UNKNOWN',\n },\n };\n }\n}\n","import { WebSocket } from 'ws';\nimport { BaseError, HttpError, GraphQLError, ParseError } from './errors';\n\nexport type FetchOptions = RequestInit & {\n next?: {\n revalidate?: boolean | number;\n };\n};\n\nexport class Http {\n private apiEndpoint: string;\n private graphqlEndpoint: string;\n private wsEndpoint: string;\n private defaultOptions?: FetchOptions;\n\n constructor(\n apiEndpoint: string,\n wsEndpoint: string,\n private customFetch?: typeof fetch,\n defaultOptions?: FetchOptions\n ) {\n this.apiEndpoint = apiEndpoint;\n this.graphqlEndpoint = apiEndpoint + '/graphql';\n this.wsEndpoint = wsEndpoint;\n this.defaultOptions = defaultOptions;\n }\n\n private getFetch() {\n return this.customFetch || fetch;\n }\n\n async fetch(url: string): Promise<Response> {\n try {\n const fetchFn = this.getFetch();\n const response = await fetchFn(url, {\n ...this.defaultOptions,\n });\n\n if (!response.ok) {\n throw new HttpError(\n `HTTP error! status: ${response.status}`,\n response.status\n );\n }\n\n return response;\n } catch (error) {\n if (error instanceof HttpError) {\n throw error;\n }\n throw new HttpError(`Failed to fetch: ${(error as Error).message}`, 500);\n }\n }\n\n async fetchGraphql<T>({\n query,\n variables,\n }: {\n query: string;\n variables?: any;\n }): Promise<T> {\n try {\n const isFirstPage = variables?.after === 'first';\n const fetchFn = this.getFetch();\n console.log(query);\n const response = await fetchFn(this.graphqlEndpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n },\n body: JSON.stringify({\n query,\n variables: {\n ...variables,\n after: isFirstPage ? undefined : variables?.after,\n },\n }),\n ...this.defaultOptions,\n });\n\n if (!response.ok) {\n const errorData = await response.json();\n\n if (errorData.errors?.[0]?.message?.includes('Syntax Error')) {\n throw new GraphQLError(\n `GraphQL syntax error: ${errorData.errors[0].message}`\n );\n }\n\n if (errorData.errors?.length > 0) {\n throw new GraphQLError(\n errorData.errors[0].message || 'Unknown GraphQL error'\n );\n }\n\n throw new HttpError(\n `HTTP error: ${JSON.stringify(errorData)}`,\n response.status\n );\n }\n const data = await response.json();\n\n if (data.errors) {\n throw new GraphQLError(\n data.errors[0]?.message || 'GraphQL query failed'\n );\n }\n\n return data.data;\n } catch (error) {\n console.log(error);\n if (error instanceof BaseError) {\n throw error;\n }\n if (error instanceof SyntaxError) {\n throw new ParseError('Failed to parse JSON response');\n }\n throw new HttpError(\n `Failed to fetch GraphQL: ${(error as Error).message}`,\n 500\n );\n }\n }\n\n async subscribe(names: string[], handleData: (data: any) => void): Promise<WebSocket> {\n const ws = new WebSocket(this.wsEndpoint);\n\n ws.on('open', () => {\n console.log('Connected to the WebSocket server');\n // Subscribe to specific event names\n const subscribeMessage = JSON.stringify({\n type: 'subscribe',\n names: names,\n });\n ws.send(subscribeMessage);\n });\n\n ws.on('message', (data) => {\n handleData(JSON.parse(data.toString()));\n });\n\n ws.on('close', () => {\n console.log('Disconnected from the WebSocket server');\n });\n\n ws.on('error', (error) => {\n console.error(`WebSocket error: ${error}`);\n });\n\n return ws;\n }\n}\n","import { MultiSigPublicKey } from '@mysten/sui/multisig';\nimport type { PublicKey } from '@mysten/sui/cryptography';\nimport { ed25519PublicKeyFromBase64 } from './publickey';\n\nexport type PublicKeyWeightPair = {\n publicKey: PublicKey;\n weight: number;\n};\n\nexport class MultiSigClient {\n public readonly pksWeightPairs: PublicKeyWeightPair[];\n public readonly threshold: number;\n public readonly multiSigPublicKey: MultiSigPublicKey;\n constructor(pks: PublicKeyWeightPair[], threshold: number) {\n this.pksWeightPairs = pks;\n this.threshold = threshold;\n this.multiSigPublicKey = MultiSigPublicKey.fromPublicKeys({\n threshold: this.threshold,\n publicKeys: this.pksWeightPairs,\n });\n }\n\n static fromRawEd25519PublicKeys(\n rawPublicKeys: string[],\n weights: number[],\n threshold: number\n ): MultiSigClient {\n const pks = rawPublicKeys.map((rawPublicKey, i) => {\n return {\n publicKey: ed25519PublicKeyFromBase64(rawPublicKey),\n weight: weights[i],\n };\n });\n return new MultiSigClient(pks, threshold);\n }\n\n multiSigAddress(): string {\n return this.multiSigPublicKey.toSuiAddress();\n }\n\n combinePartialSigs(sigs: string[]): string {\n return this.multiSigPublicKey.combinePartialSignatures(sigs);\n }\n}\n","import { PublicKey } from '@mysten/sui/cryptography';\nimport { Ed25519PublicKey } from '@mysten/sui/keypairs/ed25519';\nimport { fromB64 } from '@mysten/sui/utils';\n\nexport function ed25519PublicKeyFromBase64(rawPubkey: string): PublicKey {\n let bytes = fromB64(rawPubkey);\n // rawPubkeys should either be 32 bytes or 33 bytes (with the first byte being flag)\n if (bytes.length !== 32 && bytes.length !== 33) throw 'invalid pubkey length';\n bytes = bytes.length === 33 ? bytes.slice(1) : bytes;\n return new Ed25519PublicKey(bytes);\n}\n","import { SuiMoveNormalizedModules } from '@mysten/sui/client';\nimport { getFullnodeUrl } from '@mysten/sui/client';\n\nimport { SuiInteractor } from '../libs/suiInteractor';\nimport { NetworkType } from '../types';\n\nexport async function loadMetadata(\n networkType: NetworkType,\n packageId: string,\n fullnodeUrls?: string[]\n) {\n // Init the rpc provider\n fullnodeUrls = fullnodeUrls || [getFullnodeUrl(networkType)];\n const suiInteractor = new SuiInteractor(fullnodeUrls);\n if (packageId !== undefined) {\n const jsonData = await suiInteractor.getNormalizedMoveModulesByPackage(\n packageId\n );\n\n return jsonData as SuiMoveNormalizedModules;\n } else {\n console.error('please set your package id.');\n }\n}\n"],"mappings":"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","names":["exports","module","createWebSocketStream","err","exports","module","exports","module","exports","module","exports","module","data","exports","module","exports","module","Receiver","exports","module","Sender","exports","module","exports","module","exports","module","Receiver","Sender","WebSocket","key","exports","module","protocol","exports","module","WebSocket","WebSocketServer","import_bcs","import_transactions","import_bcs","import_ed25519","genMnemonic","import_transactions","import_utils","import_utils","value","import_bcs","WebSocket","structType","value","keccak256","import_ed25519","import_utils","import_client"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/dubhe.ts","../src/libs/suiAccountManager/index.ts","../src/libs/suiAccountManager/keypair.ts","../src/libs/suiAccountManager/util.ts","../src/libs/suiAccountManager/crypto.ts","../src/libs/suiTxBuilder/index.ts","../src/libs/suiTxBuilder/util.ts","../src/libs/suiInteractor/suiInteractor.ts","../src/libs/suiModel/suiOwnedObject.ts","../src/libs/suiModel/suiSharedObject.ts","../src/libs/suiInteractor/util.ts","../src/libs/suiInteractor/defaultConfig.ts","../src/libs/suiContractFactory/index.ts","../src/utils/index.ts","../src/errors/index.ts","../src/libs/suiIndexerClient/index.ts","../src/libs/http/errors.ts","../src/libs/http/ws-adapter.ts","../src/libs/http/http.ts","../src/libs/multiSig/client.ts","../src/libs/multiSig/publickey.ts","../src/metadata/index.ts"],"sourcesContent":["export * from '@mysten/sui/client';\nexport * from '@mysten/sui/utils';\nexport * from '@mysten/sui/transactions';\nexport * from '@mysten/sui/bcs';\nexport * from '@mysten/sui/keypairs/ed25519';\nexport * from '@mysten/sui/keypairs/secp256k1';\nexport * from '@mysten/sui/keypairs/secp256r1';\nexport { bcs, BcsType } from '@mysten/bcs';\nexport { Dubhe } from './dubhe';\nexport { SuiAccountManager } from './libs/suiAccountManager';\nexport { SuiTx } from './libs/suiTxBuilder';\nexport { MultiSigClient } from './libs/multiSig';\nexport { SuiContractFactory } from './libs/suiContractFactory';\nexport { loadMetadata } from './metadata';\nexport type * from './types';\n","import keccak256 from 'keccak256';\nimport { getFullnodeUrl } from '@mysten/sui/client';\nimport { Transaction, TransactionResult } from '@mysten/sui/transactions';\nimport { BcsType, fromHex, SerializedBcs, toHex } from '@mysten/bcs';\nimport type { TransactionArgument } from '@mysten/sui/transactions';\nimport type {\n SuiTransactionBlockResponse,\n DevInspectResults,\n SuiMoveNormalizedModules,\n SuiMoveNormalizedType,\n SuiObjectData,\n SuiMoveNormalizedModule,\n} from '@mysten/sui/client';\nimport { SuiAccountManager } from './libs/suiAccountManager';\nimport { SuiTx } from './libs/suiTxBuilder';\nimport { SuiInteractor } from './libs/suiInteractor';\nimport {\n MapObjectStruct,\n MoveStructType,\n DubheObjectContent,\n SuiDubheReturnType,\n MoveEnumType,\n} from './types';\nimport { SuiContractFactory } from './libs/suiContractFactory';\nimport {\n SuiMoveMoudleFuncType,\n SuiMoveMoudleValueType,\n} from './libs/suiContractFactory/types';\nimport { getDefaultURL, NetworkConfig } from './libs/suiInteractor';\nimport {\n ContractQuery,\n ContractTx,\n DerivePathParams,\n FaucetNetworkType,\n MapMoudleFuncQuery,\n MapMoudleFuncTx,\n DubheParams,\n SuiTxArg,\n // SuiTxArgument,\n SuiObjectArg,\n SuiVecTxArg,\n} from './types';\nimport {\n convertHttpToWebSocket,\n normalizeHexAddress,\n normalizePackageId,\n numberToAddressHex,\n} from './utils';\nimport { bcs, fromHEX, toHEX } from '@mysten/bcs';\nimport { ContractDataParsingError } from './errors';\nimport {\n ConnectionResponse,\n OrderBy,\n Schema,\n SuiIndexerClient,\n} from './libs/suiIndexerClient';\nimport { Http } from './libs/http';\n\nexport function isUndefined(value?: unknown): value is undefined {\n return value === undefined;\n}\n\nexport function withMeta<T extends { meta: SuiMoveMoudleFuncType }>(\n meta: SuiMoveMoudleFuncType,\n creator: Omit<T, 'meta'>\n): T {\n (creator as T).meta = meta;\n\n return creator as T;\n}\n\nfunction createQuery(\n meta: SuiMoveMoudleFuncType,\n fn: (\n tx: Transaction,\n params?: (TransactionArgument | SerializedBcs<any>)[],\n typeArguments?: string[],\n isRaw?: boolean\n ) => Promise<DevInspectResults | TransactionResult>\n): ContractQuery {\n return withMeta(\n meta,\n async ({\n tx,\n params,\n typeArguments,\n isRaw,\n }: {\n tx: Transaction;\n params?: (TransactionArgument | SerializedBcs<any>)[];\n typeArguments?: string[];\n isRaw?: boolean;\n }): Promise<DevInspectResults | TransactionResult> => {\n const result = await fn(tx, params, typeArguments, isRaw);\n return result;\n }\n );\n}\n\nfunction createTx(\n meta: SuiMoveMoudleFuncType,\n fn: (\n tx: Transaction,\n params?: (TransactionArgument | SerializedBcs<any>)[],\n typeArguments?: string[],\n isRaw?: boolean\n ) => Promise<SuiTransactionBlockResponse | TransactionResult>\n): ContractTx {\n return withMeta(\n meta,\n async ({\n tx,\n params,\n typeArguments,\n isRaw,\n }: {\n tx: Transaction;\n params?: (TransactionArgument | SerializedBcs<any>)[];\n typeArguments?: string[];\n isRaw?: boolean;\n }): Promise<SuiTransactionBlockResponse | TransactionResult> => {\n return await fn(tx, params, typeArguments, isRaw);\n }\n );\n}\n\n/**\n * @class Dubhe\n * @description This class is used to aggregate the tools that used to interact with SUI network.\n */\nexport class Dubhe {\n public http: Http;\n public accountManager: SuiAccountManager;\n public suiInteractor: SuiInteractor;\n public suiIndexerClient: SuiIndexerClient;\n public contractFactory: SuiContractFactory;\n public packageId: string | undefined;\n public metadata: SuiMoveNormalizedModules | undefined;\n\n readonly #query: MapMoudleFuncQuery = {};\n readonly #tx: MapMoudleFuncTx = {};\n readonly #object: MapObjectStruct = {\n address: bcs.bytes(32).transform({\n // To change the input type, you need to provide a type definition for the input\n input: (val: string) => fromHEX(val),\n output: (val) => toHEX(val),\n }),\n u8: bcs.u8(),\n u16: bcs.u16(),\n u32: bcs.u32(),\n u64: bcs.u64(),\n u128: bcs.u128(),\n u256: bcs.u256(),\n bool: bcs.bool(),\n '0x1::ascii::String': bcs.string(),\n '0x1::string::String': bcs.string(),\n '0x1::option::Option<address>': bcs.option(\n bcs.bytes(32).transform({\n // To change the input type, you need to provide a type definition for the input\n input: (val: string) => fromHEX(val),\n output: (val) => toHEX(val),\n })\n ),\n '0x1::option::Option<u8>': bcs.option(bcs.u8()),\n '0x1::option::Option<u16>': bcs.option(bcs.u16()),\n '0x1::option::Option<u32>': bcs.option(bcs.u32()),\n '0x1::option::Option<u64>': bcs.option(bcs.u64()),\n '0x1::option::Option<u128>': bcs.option(bcs.u128()),\n '0x1::option::Option<u256>': bcs.option(bcs.u256()),\n '0x1::option::Option<bool>': bcs.option(bcs.bool()),\n '0x1::option::Option<vector<address>>': bcs.option(\n bcs.vector(\n bcs.bytes(32).transform({\n // To change the input type, you need to provide a type definition for the input\n input: (val: string) => fromHex(val),\n output: (val) => toHex(val),\n })\n )\n ),\n '0x1::option::Option<vector<u8>>': bcs.option(bcs.vector(bcs.u8())),\n '0x1::option::Option<vector<u16>>': bcs.option(bcs.vector(bcs.u16())),\n '0x1::option::Option<vector<u32>>': bcs.option(bcs.vector(bcs.u32())),\n '0x1::option::Option<vector<u64>>': bcs.option(bcs.vector(bcs.u64())),\n '0x1::option::Option<vector<u128>>': bcs.option(bcs.vector(bcs.u128())),\n '0x1::option::Option<vector<u256>>': bcs.option(bcs.vector(bcs.u256())),\n '0x1::option::Option<vector<bool>>': bcs.option(bcs.vector(bcs.bool())),\n 'vector<address>': bcs.vector(\n bcs.bytes(32).transform({\n // To change the input type, you need to provide a type definition for the input\n input: (val: string) => fromHex(val),\n output: (val) => toHex(val),\n })\n ),\n 'vector<u8>': bcs.vector(bcs.u8()),\n 'vector<u16>': bcs.vector(bcs.u16()),\n 'vector<u32>': bcs.vector(bcs.u32()),\n 'vector<u64>': bcs.vector(bcs.u64()),\n 'vector<u128>': bcs.vector(bcs.u128()),\n 'vector<u256>': bcs.vector(bcs.u256()),\n 'vector<bool>': bcs.vector(bcs.bool()),\n 'vector<vector<address>>': bcs.vector(\n bcs.vector(\n bcs.bytes(32).transform({\n // To change the input type, you need to provide a type definition for the input\n input: (val: string) => fromHex(val),\n output: (val) => toHex(val),\n })\n )\n ),\n 'vector<vector<u8>>': bcs.vector(bcs.vector(bcs.u8())),\n 'vector<vector<u16>>': bcs.vector(bcs.vector(bcs.u16())),\n 'vector<vector<u32>>': bcs.vector(bcs.vector(bcs.u32())),\n 'vector<vector<u64>>': bcs.vector(bcs.vector(bcs.u64())),\n 'vector<vector<u128>>': bcs.vector(bcs.vector(bcs.u128())),\n 'vector<vector<u256>>': bcs.vector(bcs.vector(bcs.u256())),\n 'vector<vector<bool>>': bcs.vector(bcs.vector(bcs.bool())),\n '0x2::coin::Coin<T>': bcs.struct('Coin', {\n id: bcs.fixedArray(32, bcs.u8()).transform({\n input: (id: string) => fromHex(id),\n output: (id) => toHex(Uint8Array.from(id)),\n }),\n balance: bcs.struct('Balance', {\n value: bcs.u64(),\n }),\n }),\n '0x2::balance::Balance<T>': bcs.struct('Balance', {\n value: bcs.u64(),\n }),\n };\n\n /**\n * Support the following ways to init the DubheClient:\n * 1. mnemonics\n * 2. secretKey (base64 or hex)\n * If none of them is provided, will generate a random mnemonics with 24 words.\n *\n * @param mnemonics, 12 or 24 mnemonics words, separated by space\n * @param secretKey, base64 or hex string or bech32, when mnemonics is provided, secretKey will be ignored\n * @param networkType, 'testnet' | 'mainnet' | 'devnet' | 'localnet', default is 'devnet'\n * @param fullnodeUrl, the fullnode url, default is the preconfig fullnode url for the given network type\n * @param packageId\n */\n constructor({\n mnemonics,\n secretKey,\n networkType,\n fullnodeUrls,\n packageId,\n metadata,\n customFetch,\n defaultOptions,\n indexerUrl,\n indexerWsUrl,\n }: DubheParams = {}) {\n networkType = networkType ?? 'mainnet';\n\n const defaultParams = getDefaultURL(networkType);\n\n // Init the account manager\n this.accountManager = new SuiAccountManager({ mnemonics, secretKey });\n // Init the rpc provider\n fullnodeUrls = fullnodeUrls || [defaultParams.fullNode];\n this.suiInteractor = new SuiInteractor(fullnodeUrls, networkType);\n\n indexerUrl = indexerUrl || defaultParams.indexerUrl;\n indexerWsUrl = indexerWsUrl || convertHttpToWebSocket(indexerUrl);\n this.http = new Http(indexerUrl, indexerWsUrl, customFetch, defaultOptions);\n\n this.suiIndexerClient = new SuiIndexerClient(this.http);\n\n this.packageId = packageId ? normalizePackageId(packageId) : undefined;\n if (metadata !== undefined) {\n this.metadata = metadata as SuiMoveNormalizedModules;\n\n const maxLoopNum = 5;\n let loopNum = 0;\n let stillNeedFormat = true;\n while (stillNeedFormat === true && loopNum <= maxLoopNum) {\n let loopFlag = false;\n Object.values(metadata as SuiMoveNormalizedModules).forEach(\n (moudlevalue) => {\n const data = moudlevalue as SuiMoveNormalizedModule;\n const moduleName = data.name;\n const objMoudleId = `${packageId}::${moduleName}`;\n\n if (data.enums) {\n Object.entries(data.enums).forEach(([enumName, enumType]) => {\n const objectId = `${objMoudleId}::${enumName}`;\n const bcsmeta: MoveEnumType = {\n objectId,\n objectName: enumName,\n objectType: enumType,\n };\n // console.log('--------');\n // console.log(JSON.stringify(bcsmeta, null, 2));\n // if (isUndefined(this.#object[objectId])) {\n let bcsObj = this.#bcsenum(bcsmeta);\n if (bcsObj.loopFlag === true) {\n loopFlag = bcsObj.loopFlag;\n }\n if (this.#object[objectId] === undefined) {\n this.#object[objectId] = bcsObj.bcs;\n this.#object[`vector<${objectId}>`] = bcs.vector(bcsObj.bcs);\n this.#object[`vector<vector<${objectId}>>`] = bcs.vector(\n bcs.vector(bcsObj.bcs)\n );\n this.#object[`0x1::option::Option<${objectId}>`] = bcs.option(\n bcsObj.bcs\n );\n }\n });\n }\n\n Object.entries(data.structs).forEach(([objectName, objectType]) => {\n const objectId = `${objMoudleId}::${objectName}`;\n const bcsmeta: MoveStructType = {\n objectId,\n objectName,\n objectType,\n };\n // if (isUndefined(this.#object[objectId])) {\n let bcsObj = this.#bcs(bcsmeta);\n if (bcsObj.loopFlag === true) {\n loopFlag = bcsObj.loopFlag;\n }\n\n this.#object[objectId] = bcsObj.bcs;\n\n this.#object[`vector<${objectId}>`] = bcs.vector(bcsObj.bcs);\n this.#object[`0x1::option::Option<${objectId}>`] = bcs.option(\n bcsObj.bcs\n );\n });\n\n Object.entries(data.exposedFunctions).forEach(\n ([funcName, funcvalue]) => {\n const meta = funcvalue as SuiMoveMoudleFuncType;\n meta.moduleName = moduleName;\n meta.funcName = funcName;\n if (isUndefined(this.#query[moduleName])) {\n this.#query[moduleName] = {};\n }\n if (isUndefined(this.#query[moduleName][funcName])) {\n this.#query[moduleName][funcName] = createQuery(\n meta,\n (tx, p, typeArguments, isRaw) =>\n this.#read(meta, tx, p, typeArguments, isRaw)\n );\n }\n\n if (isUndefined(this.#tx[moduleName])) {\n this.#tx[moduleName] = {};\n }\n if (isUndefined(this.#tx[moduleName][funcName])) {\n this.#tx[moduleName][funcName] = createTx(\n meta,\n (tx, p, typeArguments, isRaw) =>\n this.#exec(meta, tx, p, typeArguments, isRaw)\n );\n }\n }\n );\n }\n );\n\n stillNeedFormat = loopFlag;\n loopNum++;\n }\n }\n this.contractFactory = new SuiContractFactory({\n packageId,\n metadata,\n });\n }\n\n public get query(): MapMoudleFuncQuery {\n return this.#query;\n }\n\n public get tx(): MapMoudleFuncTx {\n return this.#tx;\n }\n\n public get object(): MapObjectStruct {\n return this.#object;\n }\n\n #exec = async (\n meta: SuiMoveMoudleFuncType,\n tx: Transaction,\n params?: (TransactionArgument | SerializedBcs<any>)[],\n typeArguments?: string[],\n isRaw?: boolean\n ) => {\n if (isRaw === true) {\n return tx.moveCall({\n target: `${this.contractFactory.packageId}::${meta.moduleName}::${meta.funcName}`,\n arguments: params,\n typeArguments,\n });\n }\n\n tx.moveCall({\n target: `${this.contractFactory.packageId}::${meta.moduleName}::${meta.funcName}`,\n arguments: params,\n typeArguments,\n });\n return await this.signAndSendTxn(tx);\n };\n\n #read = async (\n meta: SuiMoveMoudleFuncType,\n tx: Transaction,\n params?: (TransactionArgument | SerializedBcs<any>)[],\n typeArguments?: string[],\n isRaw?: boolean\n ) => {\n if (isRaw === true) {\n return tx.moveCall({\n target: `${this.contractFactory.packageId}::${meta.moduleName}::${meta.funcName}`,\n arguments: params,\n typeArguments,\n });\n }\n\n tx.moveCall({\n target: `${this.contractFactory.packageId}::${meta.moduleName}::${meta.funcName}`,\n arguments: params,\n typeArguments,\n });\n\n return await this.inspectTxn(tx);\n };\n\n #getVectorDepth = (field: SuiMoveNormalizedType): number => {\n if (typeof field === 'object' && 'Vector' in field) {\n return 1 + this.#getVectorDepth(field.Vector);\n }\n return 0;\n };\n\n #bcs = (bcsmeta: MoveStructType) => {\n let loopFlag = false;\n const bcsJson: Record<string, BcsType<any, any>> = {};\n Object.entries(bcsmeta.objectType.fields).forEach(([index, type]) => {\n const objName = type.name;\n const objType: SuiMoveNormalizedType = type.type;\n switch (typeof objType) {\n case 'object':\n for (const [key, value] of Object.entries(objType)) {\n switch (key) {\n case 'Struct':\n const structType = value as {\n address: string;\n module: string;\n name: string;\n typeArguments: SuiMoveNormalizedType[];\n };\n if (\n structType.address === '0x1' &&\n structType.module === 'ascii' &&\n structType.name === 'String'\n ) {\n bcsJson[objName] = bcs.string();\n return;\n } else if (\n structType.address === '0x2' &&\n structType.module === 'object' &&\n structType.name === 'UID'\n ) {\n bcsJson[objName] = bcs.fixedArray(32, bcs.u8()).transform({\n input: (id: string) => fromHEX(id),\n output: (id) => toHEX(Uint8Array.from(id)),\n });\n return;\n } else if (\n structType.address === '0x2' &&\n structType.module === 'object' &&\n structType.name === 'ID'\n ) {\n bcsJson[objName] = bcs.fixedArray(32, bcs.u8()).transform({\n input: (id: string) => fromHEX(id),\n output: (id) => toHEX(Uint8Array.from(id)),\n });\n return;\n } else if (\n structType.address === '0x2' &&\n structType.module === 'bag' &&\n structType.name === 'Bag'\n ) {\n bcsJson[objName] = bcs.fixedArray(32, bcs.u8()).transform({\n input: (id: string) => fromHEX(id),\n output: (id) => toHEX(Uint8Array.from(id)),\n });\n return;\n } else if (\n structType.address === '0x1' &&\n structType.module === 'option' &&\n structType.name === 'Option'\n ) {\n switch (structType.typeArguments[0]) {\n case 'U8':\n bcsJson[objName] = bcs.option(bcs.u8());\n return;\n case 'U16':\n bcsJson[objName] = bcs.option(bcs.u16());\n return;\n case 'U32':\n bcsJson[objName] = bcs.option(bcs.u32());\n return;\n case 'U64':\n bcsJson[objName] = bcs.option(bcs.u64());\n return;\n case 'U128':\n bcsJson[objName] = bcs.option(bcs.u128());\n return;\n case 'U256':\n bcsJson[objName] = bcs.option(bcs.u256());\n return;\n case 'Bool':\n bcsJson[objName] = bcs.option(bcs.bool());\n return;\n case 'Address':\n bcsJson[objName] = bcs.option(\n bcs.bytes(32).transform({\n // To change the input type, you need to provide a type definition for the input\n input: (val: string) => fromHEX(val),\n output: (val) => toHEX(val),\n })\n );\n return;\n default:\n // throw new Error('Unsupported type');\n }\n } else {\n if (\n this.object[\n `${structType.address}::${structType.module}::${structType.name}`\n ] === undefined\n ) {\n loopFlag = true;\n } else {\n bcsJson[objName] =\n this.object[\n `${structType.address}::${structType.module}::${structType.name}`\n ];\n return;\n }\n }\n return;\n case 'Vector':\n if (typeof value === 'string') {\n switch (value) {\n case 'U8':\n bcsJson[objName] = bcs.vector(bcs.u8());\n return;\n case 'U16':\n bcsJson[objName] = bcs.vector(bcs.u16());\n return;\n case 'U32':\n bcsJson[objName] = bcs.vector(bcs.u32());\n return;\n case 'U64':\n bcsJson[objName] = bcs.vector(bcs.u64());\n return;\n case 'U128':\n bcsJson[objName] = bcs.vector(bcs.u128());\n return;\n case 'U256':\n bcsJson[objName] = bcs.vector(bcs.u256());\n return;\n case 'Bool':\n bcsJson[objName] = bcs.vector(bcs.bool());\n return;\n case 'Address':\n bcsJson[objName] = bcs.vector(\n bcs.bytes(32).transform({\n // To change the input type, you need to provide a type definition for the input\n input: (val: string) => fromHEX(val),\n output: (val) => toHEX(val),\n })\n );\n return;\n default:\n // throw new Error('Unsupported type');\n }\n }\n if (typeof value === 'object') {\n const vectorDepth = this.#getVectorDepth(value);\n let innerType = value;\n for (let i = 0; i < vectorDepth; i++) {\n innerType = innerType.Vector;\n }\n\n if ('Struct' in innerType) {\n const structType = innerType.Struct;\n const structId = `${structType.address}::${structType.module}::${structType.name}`;\n\n let bcsType = this.#object[structId];\n if (!bcsType) {\n loopFlag = true;\n return;\n }\n let baseType = bcsType;\n for (let i = 0; i <= vectorDepth; i++) {\n baseType = bcs.vector(baseType);\n }\n\n bcsJson[objName] = baseType;\n return;\n }\n }\n return;\n case 'TypeParameter':\n bcsJson[objName] = bcs.u128();\n return;\n // case 'Reference':\n\n // case 'MutableReference':\n\n default:\n throw new Error('Unsupported type');\n }\n }\n return;\n case 'string':\n switch (objType) {\n case 'U8':\n bcsJson[objName] = bcs.u8();\n return;\n case 'U16':\n bcsJson[objName] = bcs.u16();\n return;\n case 'U32':\n bcsJson[objName] = bcs.u32();\n return;\n case 'U64':\n bcsJson[objName] = bcs.u64();\n return;\n case 'U128':\n bcsJson[objName] = bcs.u128();\n return;\n case 'U256':\n bcsJson[objName] = bcs.u256();\n return;\n case 'Bool':\n bcsJson[objName] = bcs.bool();\n return;\n case 'Address':\n bcsJson[objName] = bcs.bytes(32).transform({\n // To change the input type, you need to provide a type definition for the input\n input: (val: string) => fromHEX(val),\n output: (val) => toHEX(val),\n });\n return;\n default:\n return;\n }\n default:\n throw new Error('Unsupported type');\n }\n });\n\n return {\n bcs: bcs.struct(bcsmeta.objectName, bcsJson),\n loopFlag,\n };\n };\n\n #bcsenum = (bcsmeta: MoveEnumType) => {\n let loopFlag = false;\n const variantJson: Record<string, BcsType<any, any> | null> = {};\n\n // const databcs = bcs.vector(\n // bcs.struct('Account', {\n // balance: bcs.u64(),\n // status: bcs.enum('AccountStatus', {\n // Liquid: null,\n // Frozen: null,\n // Blocked: null,\n // }),\n // })\n // );\n\n Object.entries(bcsmeta.objectType.variants).forEach(([name, type]) => {\n if (type.length > 0) {\n Object.entries(type).forEach(([index, value]) => {\n const objType: SuiMoveNormalizedType = value.type;\n const objName = value.name;\n switch (typeof objType) {\n case 'object':\n for (const [key, value] of Object.entries(objType)) {\n switch (key) {\n case 'Struct':\n const structType = value as {\n address: string;\n module: string;\n name: string;\n typeArguments: SuiMoveNormalizedType[];\n };\n if (\n structType.address === '0x1' &&\n structType.module === 'ascii' &&\n structType.name === 'String'\n ) {\n variantJson[objName] = bcs.string();\n return;\n } else if (\n structType.address === '0x2' &&\n structType.module === 'object' &&\n structType.name === 'UID'\n ) {\n variantJson[objName] = bcs\n .fixedArray(32, bcs.u8())\n .transform({\n input: (id: string) => fromHEX(id),\n output: (id) => toHEX(Uint8Array.from(id)),\n });\n return;\n } else if (\n structType.address === '0x2' &&\n structType.module === 'object' &&\n structType.name === 'ID'\n ) {\n variantJson[objName] = bcs\n .fixedArray(32, bcs.u8())\n .transform({\n input: (id: string) => fromHEX(id),\n output: (id) => toHEX(Uint8Array.from(id)),\n });\n return;\n } else if (\n structType.address === '0x2' &&\n structType.module === 'bag' &&\n structType.name === 'Bag'\n ) {\n variantJson[objName] = bcs\n .fixedArray(32, bcs.u8())\n .transform({\n input: (id: string) => fromHEX(id),\n output: (id) => toHEX(Uint8Array.from(id)),\n });\n return;\n } else if (\n structType.address === '0x1' &&\n structType.module === 'option' &&\n structType.name === 'Option'\n ) {\n switch (structType.typeArguments[0]) {\n case 'U8':\n variantJson[objName] = bcs.option(bcs.u8());\n return;\n case 'U16':\n variantJson[objName] = bcs.option(bcs.u16());\n return;\n case 'U32':\n variantJson[objName] = bcs.option(bcs.u32());\n return;\n case 'U64':\n variantJson[objName] = bcs.option(bcs.u64());\n return;\n case 'U128':\n variantJson[objName] = bcs.option(bcs.u128());\n return;\n case 'U256':\n variantJson[objName] = bcs.option(bcs.u256());\n return;\n case 'Bool':\n variantJson[objName] = bcs.option(bcs.bool());\n return;\n case 'Address':\n variantJson[objName] = bcs.option(\n bcs.bytes(32).transform({\n // To change the input type, you need to provide a type definition for the input\n input: (val: string) => fromHEX(val),\n output: (val) => toHEX(val),\n })\n );\n return;\n default:\n // throw new Error('Unsupported type');\n }\n } else {\n if (\n this.object[\n `${structType.address}::${structType.module}::${structType.name}`\n ] === undefined\n ) {\n loopFlag = true;\n } else {\n variantJson[objName] =\n this.object[\n `${structType.address}::${structType.module}::${structType.name}`\n ];\n return;\n }\n }\n return;\n case 'Vector':\n if (typeof value === 'string') {\n switch (value) {\n case 'U8':\n variantJson[objName] = bcs.vector(bcs.u8());\n return;\n case 'U16':\n variantJson[objName] = bcs.vector(bcs.u16());\n return;\n case 'U32':\n variantJson[objName] = bcs.vector(bcs.u32());\n return;\n case 'U64':\n variantJson[objName] = bcs.vector(bcs.u64());\n return;\n case 'U128':\n variantJson[objName] = bcs.vector(bcs.u128());\n return;\n case 'U256':\n variantJson[objName] = bcs.vector(bcs.u256());\n return;\n case 'Bool':\n variantJson[objName] = bcs.vector(bcs.bool());\n return;\n case 'Address':\n variantJson[objName] = bcs.vector(\n bcs.bytes(32).transform({\n // To change the input type, you need to provide a type definition for the input\n input: (val: string) => fromHEX(val),\n output: (val) => toHEX(val),\n })\n );\n return;\n default:\n // throw new Error('Unsupported type');\n }\n }\n // if (typeof value === 'object') {\n // }\n case 'TypeParameter':\n variantJson[objName] = bcs.u128();\n return;\n // case 'Reference':\n\n // case 'MutableReference':\n\n default:\n throw new Error('Unsupported type');\n }\n }\n return;\n case 'string':\n switch (objType) {\n case 'U8':\n variantJson[objName] = bcs.u8();\n return;\n case 'U16':\n variantJson[objName] = bcs.u16();\n return;\n case 'U32':\n variantJson[objName] = bcs.u32();\n return;\n case 'U64':\n variantJson[objName] = bcs.u64();\n return;\n case 'U128':\n variantJson[objName] = bcs.u128();\n return;\n case 'U256':\n variantJson[objName] = bcs.u256();\n return;\n case 'Bool':\n variantJson[objName] = bcs.bool();\n return;\n case 'Address':\n variantJson[objName] = bcs.bytes(32).transform({\n // To change the input type, you need to provide a type definition for the input\n input: (val: string) => fromHEX(val),\n output: (val) => toHEX(val),\n });\n return;\n default:\n return;\n }\n default:\n throw new Error('Unsupported type');\n }\n });\n } else {\n variantJson[name] = null;\n }\n });\n return {\n bcs: bcs.enum(bcsmeta.objectName, variantJson),\n loopFlag,\n };\n };\n\n view(dryResult: DevInspectResults) {\n let returnValues = [];\n\n if (dryResult.effects.status.status === 'success') {\n const resultList = dryResult.results![0].returnValues!;\n\n for (const res of resultList) {\n let baseValue = res[0];\n let baseType = res[1];\n const value = Uint8Array.from(baseValue);\n\n const storageValueMatch = baseType.match(\n /^.*::storage_value::StorageValue<(.+)>$/\n );\n if (storageValueMatch) {\n const innerType = storageValueMatch[1];\n if (this.#object[innerType]) {\n const storageValueBcs = bcs.struct('StorageValue', {\n contents: bcs.vector(\n bcs.struct('Entry', {\n value: this.#object[innerType],\n })\n ),\n });\n returnValues.push(storageValueBcs.parse(value));\n continue;\n }\n }\n\n const storageMapMatch = baseType.match(\n /^.*::storage_map::StorageMap<(.+)>$/\n );\n if (storageMapMatch) {\n const innerType = storageMapMatch[1];\n const [keyType, valueType] = innerType\n .split(',')\n .map((type) => type.trim());\n if (this.#object[keyType] && this.#object[valueType]) {\n const storageMapBcs = bcs.struct('StorageMap', {\n contents: bcs.vector(\n bcs.struct('Entry', {\n key: this.#object[keyType],\n value: this.#object[valueType],\n })\n ),\n });\n returnValues.push(storageMapBcs.parse(value));\n continue;\n }\n }\n\n const storageDoubleMapMatch = baseType.match(\n /^.*::storage_double_map::StorageDoubleMap<(.+)>$/\n );\n if (storageDoubleMapMatch) {\n const innerType = storageDoubleMapMatch[1];\n const [key1, key2, valueType] = innerType\n .split(',')\n .map((type) => type.trim());\n if (\n this.#object[key1] &&\n this.#object[key2] &&\n this.#object[valueType]\n ) {\n const storageDoubleMapBcs = bcs.struct('StorageDoubleMap', {\n contents: bcs.vector(\n bcs.struct('Entry', {\n key1: this.#object[key1],\n key2: this.#object[key2],\n value: this.#object[valueType],\n })\n ),\n });\n returnValues.push(storageDoubleMapBcs.parse(value));\n continue;\n }\n }\n\n if (this.#object[baseType]) {\n // console.log('=========== here');\n // console.log(baseType);\n // console.log(JSON.stringify(this.#object[baseType], null, 2));\n // console.log('-------------');\n returnValues.push(this.#object[baseType].parse(value));\n continue;\n }\n\n const genericMatch = baseType.match(/^([^<]+)<(.+)>$/);\n if (genericMatch) {\n const [_, genericBase, _genericParam] = genericMatch;\n const genericKey = `${genericBase}<T>`;\n\n if (this.#object[genericKey]) {\n returnValues.push(this.#object[genericKey].parse(value));\n continue;\n }\n }\n\n console.log(\n '\\n\\x1b[41m\\x1b[37m ERROR \\x1b[0m \\x1b[31mUnsupported Type\\x1b[0m'\n );\n console.log('\\x1b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\\x1b[0m');\n console.log(`\\x1b[95m•\\x1b[0m Type: \\x1b[33m\"${baseType}\"\\x1b[0m`);\n if (genericMatch) {\n console.log(\n `\\x1b[95m•\\x1b[0m Generic Base Type: \\x1b[33m\"${genericMatch[1]}<T>\"\\x1b[0m`\n );\n }\n console.log('\\x1b[95m\\n✨ Available Types:\\x1b[0m');\n Object.keys(this.#object).forEach((type) => {\n console.log(` \\x1b[36m◆\\x1b[0m ${type}`);\n });\n console.log('\\n\\x1b[34m💡 How to Add Custom Type:\\x1b[0m');\n console.log(\n ` You can add custom type by extending the #object map in your code:`\n );\n console.log(\n ` \\x1b[32mdubhe.object[\"${baseType}\"] = bcs.struct(\"YourTypeName\", {\\n field1: bcs.string(),\\n field2: bcs.u64(),\\n // ... other fields\\n });\\x1b[0m`\n );\n console.log('\\x1b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\\x1b[0m\\n');\n throw new Error(`Unsupported type: ${baseType}`);\n }\n return returnValues;\n } else {\n throw new ContractDataParsingError(dryResult);\n }\n }\n\n async state({\n tx,\n schema,\n params,\n }: {\n tx: Transaction;\n schema: string;\n params: any[];\n }): Promise<any[] | undefined> {\n const moduleName = `schema`;\n const functionName = `get_${schema}`;\n\n let queryResponse = undefined;\n try {\n queryResponse = (await this.query[moduleName][functionName]({\n tx,\n params,\n })) as DevInspectResults;\n\n if (queryResponse.effects.status.status !== 'success') {\n return undefined;\n }\n } catch {\n return undefined;\n }\n return this.view(queryResponse);\n }\n\n async parseState({\n schema,\n objectId,\n storageType,\n params,\n }: {\n schema: string;\n objectId: string;\n storageType: string; // 'StorageValue<V>' | 'StorageMap<K, V>' | 'StorageDoubleMap<K1, K2, V>'\n params: any[];\n }): Promise<any[] | undefined> {\n const tx = new Transaction();\n const schemaObject = tx.object(objectId);\n // Parse storage type\n const storageValueMatch = storageType.match(/^StorageValue<(.+)>$/);\n const storageMapMatch = storageType.match(/^StorageMap<(.+),\\s*(.+)>$/);\n const storageDoubleMapMatch = storageType.match(\n /^StorageDoubleMap<(.+),\\s*(.+),\\s*(.+)>$/\n );\n\n let processedParams: (TransactionArgument | SerializedBcs<any>)[] = [\n schemaObject,\n ];\n\n if (storageValueMatch) {\n // StorageValue only needs the object ID\n if (params.length > 0) {\n console.warn(\n 'StorageValue does not require additional parameters. Extra parameters will be ignored.'\n );\n }\n } else if (storageMapMatch) {\n // StorageMap needs one key\n if (params.length !== 1) {\n throw new Error('StorageMap requires exactly one key parameter');\n }\n const keyType = storageMapMatch[1].trim();\n processedParams.push(this.#processKeyParameter(tx, keyType, params[0]));\n } else if (storageDoubleMapMatch) {\n // StorageDoubleMap needs two keys\n if (params.length !== 2) {\n throw new Error('StorageDoubleMap requires exactly two key parameters');\n }\n const key1Type = storageDoubleMapMatch[1].trim();\n const key2Type = storageDoubleMapMatch[2].trim();\n processedParams.push(this.#processKeyParameter(tx, key1Type, params[0]));\n processedParams.push(this.#processKeyParameter(tx, key2Type, params[1]));\n } else {\n throw new Error(\n `Invalid storage type: ${storageType}. Must be StorageValue<V>, StorageMap<K,V>, or StorageDoubleMap<K1,K2,V>`\n );\n }\n return this.state({\n tx,\n schema,\n params: processedParams,\n });\n }\n\n async getStorage({\n name,\n key1,\n key2,\n first,\n after,\n last,\n before,\n orderBy,\n distinct,\n }: {\n name: string;\n key1?: string;\n key2?: string;\n first?: number;\n after?: string;\n last?: number;\n before?: string;\n orderBy?: OrderBy;\n distinct?: boolean;\n }): Promise<ConnectionResponse<Schema>> {\n return await this.suiIndexerClient.getStorage({\n name,\n key1,\n key2,\n first,\n after,\n last,\n before,\n orderBy,\n distinct,\n });\n }\n\n async subscribe(\n names: string[],\n handleData: (data: any) => void\n ): Promise<WebSocket> {\n return this.suiIndexerClient.subscribe(names, handleData);\n }\n\n #processKeyParameter(tx: Transaction, keyType: string, value: any) {\n // Handle basic types\n switch (keyType.toLowerCase()) {\n case 'u8':\n return tx.pure.u8(value);\n case 'u16':\n return tx.pure.u16(value);\n case 'u32':\n return tx.pure.u32(value);\n case 'u64':\n return tx.pure.u64(value);\n case 'u128':\n return tx.pure.u128(value);\n case 'u256':\n return tx.pure.u256(value);\n case 'bool':\n return tx.pure.bool(value);\n case 'address':\n return tx.pure.address(value);\n default:\n // Check if it's an object type\n if (keyType.includes('::')) {\n // Assuming it's an object ID if the type contains '::'\n return tx.object(value);\n }\n\n // If we reach here, the key type is not supported\n console.log(\n '\\n\\x1b[41m\\x1b[37m ERROR \\x1b[0m \\x1b[31mUnsupported Key Type\\x1b[0m'\n );\n console.log('\\x1b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\\x1b[0m');\n console.log(`\\x1b[95m•\\x1b[0m Type: \\x1b[33m\"${keyType}\"\\x1b[0m`);\n console.log('\\x1b[95m•\\x1b[0m Supported Types:\\x1b[0m');\n console.log(' \\x1b[36m◆\\x1b[0m u8, u16, u32, u64, u128, u256');\n console.log(' \\x1b[36m◆\\x1b[0m bool');\n console.log(' \\x1b[36m◆\\x1b[0m address');\n console.log(\n ' \\x1b[36m◆\\x1b[0m object (format: package::module::type)'\n );\n console.log('\\x1b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\\x1b[0m\\n');\n throw new Error(`Unsupported key type: ${keyType}`);\n }\n }\n\n /**\n * else:\n * it will generate signer from the mnemonic with the given derivePathParams.\n * @param derivePathParams, such as { accountIndex: 2, isExternal: false, addressIndex: 10 }, comply with the BIP44 standard\n */\n getSigner(derivePathParams?: DerivePathParams) {\n return this.accountManager.getKeyPair(derivePathParams);\n }\n\n /**\n * @description Switch the current account with the given derivePathParams\n * @param derivePathParams, such as { accountIndex: 2, isExternal: false, addressIndex: 10 }, comply with the BIP44 standard\n */\n switchAccount(derivePathParams: DerivePathParams) {\n this.accountManager.switchAccount(derivePathParams);\n }\n\n /**\n * @description Get the address of the account for the given derivePathParams\n * @param derivePathParams, such as { accountIndex: 2, isExternal: false, addressIndex: 10 }, comply with the BIP44 standard\n */\n getAddress(derivePathParams?: DerivePathParams) {\n return this.accountManager.getAddress(derivePathParams);\n }\n\n currentAddress() {\n return this.accountManager.currentAddress;\n }\n\n getPackageId() {\n return this.contractFactory.packageId;\n }\n\n getMetadata() {\n return this.contractFactory.metadata;\n }\n\n getNetwork() {\n return this.suiInteractor.network;\n }\n\n getNetworkConfig(): NetworkConfig {\n return getDefaultURL(this.getNetwork());\n }\n\n getTxExplorerUrl(txHash: string) {\n return this.getNetworkConfig().txExplorer.replace(':txHash', txHash);\n }\n\n getAccountExplorerUrl(address: string) {\n return this.getNetworkConfig().accountExplorer.replace(':address', address);\n }\n\n getExplorerUrl() {\n return this.getNetworkConfig().explorer;\n }\n\n /**\n * Request some SUI from faucet\n * @Returns {Promise<boolean>}, true if the request is successful, false otherwise.\n */\n async requestFaucet(\n address?: string,\n network?: FaucetNetworkType,\n derivePathParams?: DerivePathParams\n ) {\n if (address === undefined) {\n address = this.accountManager.getAddress(derivePathParams);\n }\n if (network === undefined) {\n network = this.getNetwork() as\n | FaucetNetworkType\n | 'devnet' as FaucetNetworkType;\n }\n // const addr = this.accountManager.getAddress(derivePathParams);\n return this.suiInteractor.requestFaucet(address, network);\n }\n\n async getBalance(coinType?: string, derivePathParams?: DerivePathParams) {\n const owner = this.accountManager.getAddress(derivePathParams);\n return this.suiInteractor.currentClient.getBalance({ owner, coinType });\n }\n\n async balanceOf(\n accountAddress?: string,\n coinType?: string,\n derivePathParams?: DerivePathParams\n ) {\n if (accountAddress === undefined) {\n accountAddress = this.accountManager.getAddress(derivePathParams);\n }\n const owner = accountAddress;\n return this.suiInteractor.currentClient.getBalance({ owner, coinType });\n }\n\n client() {\n return this.suiInteractor.currentClient;\n }\n\n indexerClient() {\n return this.suiIndexerClient;\n }\n\n async getObject(objectId: string) {\n return this.suiInteractor.getObject(objectId);\n }\n\n async getObjects(objectIds: string[]) {\n return this.suiInteractor.getObjects(objectIds);\n }\n\n async signTxn(\n tx: Uint8Array | Transaction | SuiTx,\n derivePathParams?: DerivePathParams\n ) {\n if (tx instanceof SuiTx || tx instanceof Transaction) {\n tx.setSender(this.getAddress(derivePathParams));\n }\n const txBlock = tx instanceof SuiTx ? tx.tx : tx;\n const txBytes =\n txBlock instanceof Transaction\n ? await txBlock.build({ client: this.client() })\n : txBlock;\n const keyPair = this.getSigner(derivePathParams);\n return await keyPair.signTransaction(txBytes);\n }\n\n async signAndSendTxn(\n tx: Uint8Array | Transaction | SuiTx,\n derivePathParams?: DerivePathParams\n ): Promise<SuiTransactionBlockResponse> {\n const { bytes, signature } = await this.signTxn(tx, derivePathParams);\n return this.sendTx(bytes, signature);\n }\n\n async sendTx(\n transaction: Uint8Array | string,\n signature: string | string[]\n ): Promise<SuiTransactionBlockResponse> {\n return this.suiInteractor.sendTx(transaction, signature);\n }\n\n async waitForTransaction(digest: string) {\n return this.suiInteractor.waitForTransaction({ digest });\n }\n\n /**\n * Transfer the given amount of SUI to the recipient\n * @param recipient\n * @param amount\n * @param derivePathParams\n */\n async transferSui(\n recipient: string,\n amount: number,\n derivePathParams?: DerivePathParams\n ) {\n const tx = new SuiTx();\n tx.transferSui(recipient, amount);\n return this.signAndSendTxn(tx, derivePathParams);\n }\n\n /**\n * Transfer to mutliple recipients\n * @param recipients the recipients addresses\n * @param amounts the amounts of SUI to transfer to each recipient, the length of amounts should be the same as the length of recipients\n * @param derivePathParams\n */\n async transferSuiToMany(\n recipients: string[],\n amounts: number[],\n derivePathParams?: DerivePathParams\n ) {\n const tx = new SuiTx();\n tx.transferSuiToMany(recipients, amounts);\n return this.signAndSendTxn(tx, derivePathParams);\n }\n\n /**\n * Transfer the given amounts of coin to multiple recipients\n * @param recipients the list of recipient address\n * @param amounts the amounts to transfer for each recipient\n * @param coinType any custom coin type but not SUI\n * @param derivePathParams the derive path params for the current signer\n */\n async transferCoinToMany(\n recipients: string[],\n amounts: number[],\n coinType: string,\n derivePathParams?: DerivePathParams\n ) {\n const tx = new SuiTx();\n const owner = this.accountManager.getAddress(derivePathParams);\n const totalAmount = amounts.reduce((a, b) => a + b, 0);\n const coins = await this.suiInteractor.selectCoins(\n owner,\n totalAmount,\n coinType\n );\n tx.transferCoinToMany(\n coins.map((c) => c.objectId),\n owner,\n recipients,\n amounts\n );\n return this.signAndSendTxn(tx, derivePathParams);\n }\n\n async transferCoin(\n recipient: string,\n amount: number,\n coinType: string,\n derivePathParams?: DerivePathParams\n ) {\n return this.transferCoinToMany(\n [recipient],\n [amount],\n coinType,\n derivePathParams\n );\n }\n\n async transferObjects(\n objects: SuiObjectArg[],\n recipient: string,\n derivePathParams?: DerivePathParams\n ) {\n const tx = new SuiTx();\n tx.transferObjects(objects, recipient);\n return this.signAndSendTxn(tx, derivePathParams);\n }\n\n async moveCall(callParams: {\n target: string;\n arguments?: (SuiTxArg | SuiVecTxArg)[];\n typeArguments?: string[];\n derivePathParams?: DerivePathParams;\n }) {\n const {\n target,\n arguments: args = [],\n typeArguments = [],\n derivePathParams,\n } = callParams;\n const tx = new SuiTx();\n tx.moveCall(target, args, typeArguments);\n return this.signAndSendTxn(tx, derivePathParams);\n }\n\n /**\n * Select coins with the given amount and coin type, the total amount is greater than or equal to the given amount\n * @param amount\n * @param coinType\n * @param owner\n */\n async selectCoinsWithAmount(\n amount: number,\n coinType: string,\n owner?: string\n ) {\n owner = owner || this.accountManager.currentAddress;\n const coins = await this.suiInteractor.selectCoins(owner, amount, coinType);\n return coins.map((c) => c.objectId);\n }\n\n async selectObjectsWithType(objectType: string, owner?: string) {\n owner = owner || this.accountManager.currentAddress;\n const objects = await this.suiInteractor.selectObjects(owner, objectType);\n return objects.map((c) => c.objectId);\n }\n\n /**\n * stake the given amount of SUI to the validator\n * @param amount the amount of SUI to stake\n * @param validatorAddr the validator address\n * @param derivePathParams the derive path params for the current signer\n */\n async stakeSui(\n amount: number,\n validatorAddr: string,\n derivePathParams?: DerivePathParams\n ) {\n const tx = new SuiTx();\n tx.stakeSui(amount, validatorAddr);\n return this.signAndSendTxn(tx, derivePathParams);\n }\n\n /**\n * Execute the transaction with on-chain data but without really submitting. Useful for querying the effects of a transaction.\n * Since the transaction is not submitted, its gas cost is not charged.\n * @param tx the transaction to execute\n * @param derivePathParams the derive path params\n * @returns the effects and events of the transaction, such as object changes, gas cost, event emitted.\n */\n async inspectTxn(\n tx: Uint8Array | Transaction | SuiTx,\n derivePathParams?: DerivePathParams\n ): Promise<DevInspectResults> {\n const txBlock = tx instanceof SuiTx ? tx.tx : tx;\n return this.suiInteractor.currentClient.devInspectTransactionBlock({\n transactionBlock: txBlock,\n sender: this.getAddress(derivePathParams),\n });\n }\n\n async getOwnedObjects(owner: string, cursor?: string, limit?: number) {\n const ownedObjects = await this.suiInteractor.getOwnedObjects(\n owner,\n cursor,\n limit\n );\n const ownedObjectsRes: SuiObjectData[] = [];\n\n for (const object of ownedObjects.data) {\n const objectDetail = await this.getObject(object.data!.objectId);\n if (\n objectDetail.type!.split('::')[0] === this.contractFactory.packageId\n ) {\n ownedObjectsRes.push(objectDetail);\n }\n }\n\n return ownedObjectsRes;\n }\n\n async entity_key_from_object(objectId: string) {\n const checkObjectId = normalizeHexAddress(objectId);\n if (checkObjectId !== null) {\n objectId = checkObjectId;\n return objectId;\n } else {\n return undefined;\n }\n }\n\n async entity_key_from_bytes(bytes: Uint8Array | Buffer | string) {\n const hashBytes = keccak256(bytes);\n const hashU8Array: number[] = Array.from(hashBytes);\n const value = Uint8Array.from(hashU8Array);\n const Address = bcs.bytes(32).transform({\n // To change the input type, you need to provide a type definition for the input\n input: (val: string) => fromHEX(val),\n output: (val) => toHEX(val),\n });\n const data = Address.parse(value);\n return '0x' + data;\n }\n\n async entity_key_from_address_with_seed(objectId: string, seed: string) {\n const checkObjectId = normalizeHexAddress(objectId);\n if (checkObjectId !== null) {\n objectId = checkObjectId;\n const bytes = Buffer.from(objectId.slice(2), 'hex');\n const newBuffer = Buffer.concat([bytes, Buffer.from(seed, 'utf-8')]);\n return this.entity_key_from_bytes(newBuffer);\n } else {\n return undefined;\n }\n }\n\n async entity_key_from_address_with_u256(objectId: string, x: number) {\n const checkObjectId = normalizeHexAddress(objectId);\n if (checkObjectId !== null) {\n objectId = checkObjectId;\n const bytes = Buffer.from(objectId.slice(2), 'hex');\n\n const numberBytes = bcs.u256().serialize(x).toBytes();\n\n return this.entity_key_from_bytes(Buffer.concat([bytes, numberBytes]));\n } else {\n return undefined;\n }\n }\n\n async entity_key_from_u256(x: number) {\n return numberToAddressHex(x);\n }\n\n // async formatData(type: string, value: Buffer | number[] | Uint8Array) {\n // const u8Value = Uint8Array.from(value);\n // return bcs.de(type, u8Value);\n // }\n}\n","import { Ed25519Keypair } from '@mysten/sui/keypairs/ed25519';\nimport { getKeyPair } from './keypair';\nimport { hexOrBase64ToUint8Array, normalizePrivateKey } from './util';\nimport { generateMnemonic } from './crypto';\nimport type { AccountMangerParams, DerivePathParams } from 'src/types';\nimport {\n SUI_PRIVATE_KEY_PREFIX,\n decodeSuiPrivateKey,\n} from '@mysten/sui/cryptography';\n\nexport class SuiAccountManager {\n private mnemonics: string;\n private secretKey: string;\n public currentKeyPair: Ed25519Keypair;\n public currentAddress: string;\n\n /**\n * Support the following ways to init the SuiToolkit:\n * 1. mnemonics\n * 2. secretKey (base64 or hex)\n * If none of them is provided, will generate a random mnemonics with 24 words.\n *\n * @param mnemonics, 12 or 24 mnemonics words, separated by space\n * @param secretKey, base64 or hex string or Bech32 string, when mnemonics is provided, secretKey will be ignored\n */\n constructor({ mnemonics, secretKey }: AccountMangerParams = {}) {\n // If the mnemonics or secretKey is provided, use it\n // Otherwise, generate a random mnemonics with 24 words\n this.mnemonics = mnemonics || '';\n this.secretKey = secretKey || '';\n if (!this.mnemonics && !this.secretKey) {\n this.mnemonics = generateMnemonic(24);\n }\n\n // Init the current account\n this.currentKeyPair = this.secretKey\n ? this.parseSecretKey(this.secretKey)\n : getKeyPair(this.mnemonics);\n this.currentAddress = this.currentKeyPair.getPublicKey().toSuiAddress();\n }\n\n /**\n * Check if the secretKey starts with bench32 format\n */\n parseSecretKey(secretKey: string) {\n if (secretKey.startsWith(SUI_PRIVATE_KEY_PREFIX)) {\n const { secretKey: uint8ArraySecretKey } = decodeSuiPrivateKey(secretKey);\n return Ed25519Keypair.fromSecretKey(\n normalizePrivateKey(uint8ArraySecretKey)\n );\n }\n\n return Ed25519Keypair.fromSecretKey(\n normalizePrivateKey(hexOrBase64ToUint8Array(secretKey))\n );\n }\n\n /**\n * if derivePathParams is not provided or mnemonics is empty, it will return the currentKeyPair.\n * else:\n * it will generate keyPair from the mnemonic with the given derivePathParams.\n */\n getKeyPair(derivePathParams?: DerivePathParams) {\n if (!derivePathParams || !this.mnemonics) return this.currentKeyPair;\n return getKeyPair(this.mnemonics, derivePathParams);\n }\n\n /**\n * if derivePathParams is not provided or mnemonics is empty, it will return the currentAddress.\n * else:\n * it will generate address from the mnemonic with the given derivePathParams.\n */\n getAddress(derivePathParams?: DerivePathParams) {\n if (!derivePathParams || !this.mnemonics) return this.currentAddress;\n return getKeyPair(this.mnemonics, derivePathParams)\n .getPublicKey()\n .toSuiAddress();\n }\n\n /**\n * Switch the current account with the given derivePathParams.\n * This is only useful when the mnemonics is provided. For secretKey mode, it will always use the same account.\n */\n switchAccount(derivePathParams: DerivePathParams) {\n if (this.mnemonics) {\n this.currentKeyPair = getKeyPair(this.mnemonics, derivePathParams);\n this.currentAddress = this.currentKeyPair.getPublicKey().toSuiAddress();\n }\n }\n}\n","import { Ed25519Keypair } from '@mysten/sui/keypairs/ed25519';\nimport type { DerivePathParams } from '../../types';\n\n/**\n * @description Get ed25519 derive path for SUI\n * @param derivePathParams\n */\nexport const getDerivePathForSUI = (\n derivePathParams: DerivePathParams = {}\n) => {\n const {\n accountIndex = 0,\n isExternal = false,\n addressIndex = 0,\n } = derivePathParams;\n return `m/44'/784'/${accountIndex}'/${isExternal ? 1 : 0}'/${addressIndex}'`;\n};\n\n/**\n * the format is m/44'/784'/accountIndex'/${isExternal ? 1 : 0}'/addressIndex'\n *\n * accountIndex is the index of the account, default is 0.\n *\n * isExternal is the type of the address, default is false. Usually, the external address is used to receive coins. The internal address is used to change coins.\n *\n * addressIndex is the index of the address, default is 0. It's used to generate multiple addresses for one account.\n *\n * @description Get keypair from mnemonics and derive path\n * @param mnemonics\n * @param derivePathParams\n */\nexport const getKeyPair = (\n mnemonics: string,\n derivePathParams: DerivePathParams = {}\n) => {\n const derivePath = getDerivePathForSUI(derivePathParams);\n return Ed25519Keypair.deriveKeypair(mnemonics, derivePath);\n};\n","import { fromB64 } from '@mysten/sui/utils';\n\n/**\n * @description This regular expression matches any string that contains only hexadecimal digits (0-9, A-F, a-f).\n * @param str\n */\nexport const isHex = (str: string) =>\n /^0x[0-9a-fA-F]+$|^[0-9a-fA-F]+$/.test(str);\n\n/**\n * @description This regular expression matches any string that contains only base64 digits (0-9, A-Z, a-z, +, /, =).\n * Note that the \"=\" signs at the end are optional padding characters that may be present in some base64 encoded strings.\n * @param str\n */\nexport const isBase64 = (str: string) => /^[a-zA-Z0-9+/]+={0,2}$/g.test(str);\n\n/**\n * Convert a hex string to Uint8Array\n * @param hexStr\n */\nexport const fromHEX = (hexStr: string): Uint8Array => {\n if (!hexStr) {\n throw new Error('cannot parse empty string to Uint8Array');\n }\n const intArr = hexStr\n .replace('0x', '')\n .match(/.{1,2}/g)\n ?.map((byte) => parseInt(byte, 16));\n\n if (!intArr || intArr.length === 0) {\n throw new Error(`Unable to parse HEX: ${hexStr}`);\n }\n return Uint8Array.from(intArr);\n};\n\n/**\n * @description Convert a hex or base64 string to Uint8Array\n */\nexport const hexOrBase64ToUint8Array = (str: string): Uint8Array => {\n if (isHex(str)) {\n return fromHEX(str);\n } else if (isBase64(str)) {\n return fromB64(str);\n } else {\n throw new Error('The string is not a valid hex or base64 string.');\n }\n};\n\nconst PRIVATE_KEY_SIZE = 32;\nconst LEGACY_PRIVATE_KEY_SIZE = 64;\n/**\n * normalize a private key\n * A private key is a 32-byte array.\n * But there are two different formats for private keys:\n * 1. A 32-byte array\n * 2. A 64-byte array with the first 32 bytes being the private key and the last 32 bytes being the public key\n * 3. A 33-byte array with the first byte being 0x00 (sui.keystore key is a Base64 string with scheme flag 0x00 at the beginning)\n */\nexport const normalizePrivateKey = (key: Uint8Array): Uint8Array => {\n if (key.length === LEGACY_PRIVATE_KEY_SIZE) {\n // This is a legacy secret key, we need to strip the public key bytes and only read the first 32 bytes\n key = key.slice(0, PRIVATE_KEY_SIZE);\n } else if (key.length === PRIVATE_KEY_SIZE + 1 && key[0] === 0) {\n // sui.keystore key is a Base64 string with scheme flag 0x00 at the beginning\n return key.slice(1);\n } else if (key.length === PRIVATE_KEY_SIZE) {\n return key;\n }\n throw new Error('invalid secret key');\n};\n","import { generateMnemonic as genMnemonic } from '@scure/bip39';\nimport { wordlist } from '@scure/bip39/wordlists/english';\n\nexport const generateMnemonic = (numberOfWords: 12 | 24 = 24) => {\n const strength = numberOfWords === 12 ? 128 : 256;\n return genMnemonic(wordlist, strength);\n};\n","import { Transaction } from '@mysten/sui/transactions';\nimport { SUI_SYSTEM_STATE_OBJECT_ID } from '@mysten/sui/utils';\nimport type { SuiClient, SuiObjectRef } from '@mysten/sui/client';\nimport type {\n TransactionArgument,\n TransactionObjectArgument,\n TransactionObjectInput,\n} from '@mysten/sui/transactions';\nimport type { Keypair } from '@mysten/sui/cryptography';\nimport { SerializedBcs } from '@mysten/bcs';\n\nimport type {\n ObjectCallArg,\n TransactionType,\n SuiTxArg,\n SuiAddressArg,\n SuiObjectArg,\n SuiVecTxArg,\n SuiAmountsArg,\n} from '../../types';\n\nimport type { bcs } from '@mysten/sui/bcs';\nimport {\n convertArgs,\n convertAddressArg,\n convertObjArg,\n convertAmounts,\n} from './util';\nexport class SuiTx {\n public tx: Transaction;\n\n constructor(transaction?: Transaction) {\n if (transaction !== undefined) {\n this.tx = Transaction.from(transaction);\n } else {\n this.tx = new Transaction();\n }\n }\n\n /* Directly wrap methods and properties of TransactionBlock */\n get gas() {\n return this.tx.gas;\n }\n get blockData() {\n return this.tx.blockData;\n }\n address(value: string) {\n return this.tx.pure.address(value);\n }\n get pure(): {\n <T extends TransactionArgument>(value: T): TransactionArgument;\n address(value: string): TransactionArgument;\n u8(value: number | bigint): TransactionArgument;\n u16(value: number | bigint): TransactionArgument;\n u32(value: number | bigint): TransactionArgument;\n u64(value: number | bigint): TransactionArgument;\n u128(value: number | bigint): TransactionArgument;\n u256(value: number | bigint): TransactionArgument;\n bool(value: boolean): TransactionArgument;\n } {\n return this.tx.pure;\n }\n object(value: string | TransactionObjectInput) {\n return this.tx.object(value);\n }\n objectRef(ref: SuiObjectRef) {\n return this.tx.objectRef(ref);\n }\n sharedObjectRef(ref: typeof bcs.SharedObjectRef.$inferType) {\n return this.tx.sharedObjectRef(ref);\n }\n setSender(sender: string) {\n return this.tx.setSender(sender);\n }\n setSenderIfNotSet(sender: string) {\n return this.tx.setSenderIfNotSet(sender);\n }\n setExpiration(expiration?: Parameters<typeof this.tx.setExpiration>[0]) {\n return this.tx.setExpiration(expiration);\n }\n setGasPrice(price: number | bigint) {\n return this.tx.setGasPrice(price);\n }\n setGasBudget(budget: number | bigint) {\n return this.tx.setGasBudget(budget);\n }\n setGasOwner(owner: string) {\n return this.tx.setGasOwner(owner);\n }\n setGasPayment(payments: SuiObjectRef[]) {\n return this.tx.setGasPayment(payments);\n }\n serialize() {\n return this.tx.serialize();\n }\n toJSON() {\n return this.tx.toJSON();\n }\n sign(params: {\n signer: Keypair;\n client?: SuiClient;\n onlyTransactionKind?: boolean;\n }) {\n return this.tx.sign(params);\n }\n build(\n params: {\n client?: SuiClient;\n onlyTransactionKind?: boolean;\n } = {}\n ) {\n return this.tx.build(params);\n }\n getDigest(params: { client?: SuiClient } = {}) {\n return this.tx.getDigest(params);\n }\n add(...args: Parameters<typeof this.tx.add>) {\n return this.tx.add(...args);\n }\n publish({\n modules,\n dependencies,\n }: {\n modules: number[][] | string[];\n dependencies: string[];\n }) {\n return this.tx.publish({ modules, dependencies });\n }\n upgrade(...args: Parameters<typeof this.tx.upgrade>) {\n return this.tx.upgrade(...args);\n }\n makeMoveVec(...args: Parameters<typeof this.tx.makeMoveVec>) {\n return this.tx.makeMoveVec(...args);\n }\n\n /* Override methods of TransactionBlock */\n\n transferObjects(objects: SuiObjectArg[], address: SuiAddressArg) {\n return this.tx.transferObjects(\n objects.map((object) => convertObjArg(this.tx, object)),\n convertAddressArg(this.tx, address)\n );\n }\n\n splitCoins(coin: SuiObjectArg, amounts: SuiAmountsArg[]) {\n const res = this.tx.splitCoins(\n convertObjArg(this.tx, coin),\n convertAmounts(this.tx, amounts)\n );\n return amounts.map((_, i) => res[i]);\n }\n\n mergeCoins(destination: SuiObjectArg, sources: SuiObjectArg[]) {\n const destinationObject = convertObjArg(this.tx, destination);\n const sourceObjects = sources.map((source) =>\n convertObjArg(this.tx, source)\n );\n return this.tx.mergeCoins(destinationObject, sourceObjects);\n }\n\n /**\n * @description Move call\n * @param target `${string}::${string}::${string}`, e.g. `0x3::sui_system::request_add_stake`\n * @param args the arguments of the move call, such as `['0x1', '0x2']`\n * @param typeArgs the type arguments of the move call, such as `['0x2::sui::SUI']`\n */\n moveCall(\n target: string,\n args: (SuiTxArg | SuiVecTxArg)[] = [],\n typeArgs: string[] = []\n ) {\n // a regex for pattern `${string}::${string}::${string}`\n const regex =\n /(?<package>[a-zA-Z0-9]+)::(?<module>[a-zA-Z0-9_]+)::(?<function>[a-zA-Z0-9_]+)/;\n const match = target.match(regex);\n if (match === null)\n throw new Error(\n 'Invalid target format. Expected `${string}::${string}::${string}`'\n );\n const convertedArgs = convertArgs(this.tx, args);\n return this.tx.moveCall({\n target: target as `${string}::${string}::${string}`,\n arguments: convertedArgs,\n typeArguments: typeArgs,\n });\n }\n\n /* Enhance methods of TransactionBlock */\n\n transferSuiToMany(\n recipients: SuiAddressArg[],\n amounts: (SuiTxArg | number | bigint)[]\n ) {\n // require recipients.length === amounts.length\n if (recipients.length !== amounts.length) {\n throw new Error(\n 'transferSuiToMany: recipients.length !== amounts.length'\n );\n }\n const coins = this.tx.splitCoins(\n this.tx.gas,\n amounts.map((amount) =>\n typeof amount === 'number' || typeof amount === 'bigint'\n ? amount\n : convertArgs(this.tx, [amount])[0]\n )\n );\n const recipientObjects = recipients.map((recipient) =>\n convertAddressArg(this.tx, recipient)\n );\n recipientObjects.forEach((address, index) => {\n this.tx.transferObjects([coins[index]], address);\n });\n return this;\n }\n\n transferSui(address: SuiAddressArg, amount: SuiTxArg | number | bigint) {\n return this.transferSuiToMany([address], [amount]);\n }\n\n takeAmountFromCoins(\n coins: SuiObjectArg[],\n amount: SuiTxArg | number | bigint\n ) {\n const coinObjects = coins.map((coin) => convertObjArg(this.tx, coin));\n const mergedCoin = coinObjects[0];\n if (coins.length > 1) {\n this.tx.mergeCoins(mergedCoin, coinObjects.slice(1));\n }\n const [sendCoin] = this.tx.splitCoins(\n mergedCoin,\n convertAmounts(this.tx, [amount])\n );\n return [sendCoin, mergedCoin];\n }\n\n splitSUIFromGas(amounts: SuiAmountsArg[]) {\n return this.tx.splitCoins(this.tx.gas, convertAmounts(this.tx, amounts));\n }\n\n splitMultiCoins(coins: SuiObjectArg[], amounts: SuiAmountsArg[]) {\n const coinObjects = coins.map((coin) => convertObjArg(this.tx, coin));\n const mergedCoin = coinObjects[0];\n if (coins.length > 1) {\n this.tx.mergeCoins(mergedCoin, coinObjects.slice(1));\n }\n const splitedCoins = this.tx.splitCoins(\n mergedCoin,\n convertAmounts(this.tx, amounts)\n );\n return { splitedCoins, mergedCoin };\n }\n\n transferCoinToMany(\n coins: SuiObjectArg[],\n sender: SuiAddressArg,\n recipients: SuiAddressArg[],\n amounts: SuiAmountsArg[]\n ) {\n // require recipients.length === amounts.length\n if (recipients.length !== amounts.length) {\n throw new Error(\n 'transferSuiToMany: recipients.length !== amounts.length'\n );\n }\n const coinObjects = coins.map((coin) => convertObjArg(this.tx, coin));\n const { splitedCoins, mergedCoin } = this.splitMultiCoins(\n coinObjects,\n amounts\n );\n const recipientObjects = recipients.map((recipient) =>\n convertAddressArg(this.tx, recipient)\n );\n recipientObjects.forEach((address, index) => {\n this.tx.transferObjects([splitedCoins[index]], address);\n });\n this.tx.transferObjects([mergedCoin], convertAddressArg(this.tx, sender));\n return this;\n }\n\n transferCoin(\n coins: SuiObjectArg[],\n sender: SuiAddressArg,\n recipient: SuiAddressArg,\n amount: SuiAmountsArg\n ) {\n return this.transferCoinToMany(coins, sender, [recipient], [amount]);\n }\n\n stakeSui(amount: SuiTxArg | number | bigint, validatorAddr: SuiAddressArg) {\n const [stakeCoin] = this.tx.splitCoins(\n this.tx.gas,\n convertAmounts(this.tx, [amount])\n );\n return this.tx.moveCall({\n target: '0x3::sui_system::request_add_stake',\n arguments: convertArgs(this.tx, [\n this.tx.object(SUI_SYSTEM_STATE_OBJECT_ID),\n stakeCoin,\n convertAddressArg(this.tx, validatorAddr),\n ]),\n });\n }\n}\n","import {\n normalizeSuiObjectId,\n normalizeSuiAddress,\n isValidSuiObjectId,\n isValidSuiAddress,\n} from '@mysten/sui/utils';\nimport { Inputs, getPureBcsSchema } from '@mysten/sui/transactions';\nimport { SerializedBcs, bcs, isSerializedBcs } from '@mysten/bcs';\nimport type {\n TransactionArgument,\n Transaction,\n TransactionObjectArgument,\n} from '@mysten/sui/transactions';\nimport type {\n SuiObjectArg,\n SuiAddressArg,\n SuiTxArg,\n SuiVecTxArg,\n SuiInputTypes,\n SuiAmountsArg,\n} from 'src/types';\n\nexport const getDefaultSuiInputType = (\n value: SuiTxArg\n): 'u64' | 'bool' | 'object' | undefined => {\n if (typeof value === 'string' && isValidSuiObjectId(value)) {\n return 'object';\n } else if (typeof value === 'number' || typeof value === 'bigint') {\n return 'u64';\n } else if (typeof value === 'boolean') {\n return 'bool';\n } else {\n return undefined;\n }\n};\n\n/**\n * Since we know the elements in the array are the same type\n * If type is not provided, we will try to infer the type from the first element\n * By default,\n *\n * string is hex and its length equal to 32 =====> object id\n * number, bigint ====> u64\n * boolean =====> bool\n *\n * If type is provided, we will use the type to convert the array\n * @param args\n * @param type 'address' | 'bool' | 'u8' | 'u16' | 'u32' | 'u64' | 'u128' | 'u256' | 'signer' | 'object' | string\n */\nexport function makeVecParam(\n txBlock: Transaction,\n args: SuiTxArg[],\n type?: SuiInputTypes\n): TransactionArgument {\n if (args.length === 0)\n throw new Error('Transaction builder error: Empty array is not allowed');\n // Using first element value as default type\n const defaultSuiType = getDefaultSuiInputType(args[0]);\n const VECTOR_REGEX = /^vector<(.+)>$/;\n const STRUCT_REGEX = /^([^:]+)::([^:]+)::([^<]+)(<(.+)>)?/;\n\n type = type || defaultSuiType;\n\n if (type === 'object') {\n const elements = args.map((arg) =>\n typeof arg === 'string' && isValidSuiObjectId(arg)\n ? txBlock.object(normalizeSuiObjectId(arg))\n : convertObjArg(txBlock, arg as SuiObjectArg)\n );\n return txBlock.makeMoveVec({ elements });\n } else if (\n typeof type === 'string' &&\n !VECTOR_REGEX.test(type) &&\n !STRUCT_REGEX.test(type)\n ) {\n const bcsSchema = getPureBcsSchema(type)!;\n return txBlock.pure(bcs.vector(bcsSchema).serialize(args));\n } else {\n const elements = args.map((arg) =>\n convertObjArg(txBlock, arg as SuiObjectArg)\n );\n return txBlock.makeMoveVec({ elements, type });\n }\n}\n\n/**\n * Check whether it is an valid move vec input.\n *\n * @param arg The argument to check.\n * @returns boolean.\n */\nexport function isMoveVecArg(arg: SuiTxArg | SuiVecTxArg): arg is SuiVecTxArg {\n if (typeof arg === 'object' && 'vecType' in arg && 'value' in arg) {\n return true;\n } else if (Array.isArray(arg)) {\n return true;\n }\n return false;\n}\n\n/**\n * Convert any valid input into array of TransactionArgument.\n *\n * @param txb The Transaction Block\n * @param args The array of argument to convert.\n * @returns The converted array of TransactionArgument.\n */\nexport function convertArgs(\n txBlock: Transaction,\n args: (SuiTxArg | SuiVecTxArg)[]\n): TransactionArgument[] {\n return args.map((arg) => {\n if (arg instanceof SerializedBcs || isSerializedBcs(arg)) {\n return txBlock.pure(arg);\n }\n\n if (isMoveVecArg(arg)) {\n const vecType = 'vecType' in arg;\n return vecType\n ? makeVecParam(txBlock, arg.value, arg.vecType)\n : makeVecParam(txBlock, arg);\n }\n\n return arg;\n });\n}\n\n/**\n * Convert any valid address input into a TransactionArgument.\n *\n * @param txb The Transaction Block\n * @param arg The address argument to convert.\n * @returns The converted TransactionArgument.\n */\nexport function convertAddressArg(\n txBlock: Transaction,\n arg: SuiAddressArg\n): TransactionArgument {\n if (typeof arg === 'string' && isValidSuiAddress(arg)) {\n return txBlock.pure.address(normalizeSuiAddress(arg));\n } else {\n return convertArgs(txBlock, [arg])[0];\n }\n}\n\n/**\n * Convert any valid object input into a TransactionArgument.\n *\n * @param txb The Transaction Block\n * @param arg The object argument to convert.\n * @returns The converted TransactionArgument.\n */\nexport function convertObjArg(\n txb: Transaction,\n arg: SuiObjectArg\n): TransactionObjectArgument {\n if (typeof arg === 'string') {\n return txb.object(arg);\n }\n\n if ('digest' in arg && 'version' in arg && 'objectId' in arg) {\n return txb.objectRef(arg);\n }\n\n if ('objectId' in arg && 'initialSharedVersion' in arg && 'mutable' in arg) {\n return txb.sharedObjectRef(arg);\n }\n\n if ('Object' in arg) {\n if ('ImmOrOwnedObject' in arg.Object) {\n return txb.object(Inputs.ObjectRef(arg.Object.ImmOrOwnedObject));\n } else if ('SharedObject' in arg.Object) {\n return txb.object(Inputs.SharedObjectRef(arg.Object.SharedObject));\n } else {\n throw new Error('Invalid argument type');\n }\n }\n\n if (typeof arg === 'function') {\n return arg;\n }\n\n if (\n 'GasCoin' in arg ||\n 'Input' in arg ||\n 'Result' in arg ||\n 'NestedResult' in arg\n ) {\n return arg;\n }\n\n throw new Error('Invalid argument type');\n}\n\nexport function convertAmounts(txBlock: Transaction, amounts: SuiAmountsArg[]) {\n return amounts.map((amount) => {\n if (typeof amount === 'number' || typeof amount === 'bigint') {\n return amount;\n } else {\n return convertArgs(txBlock, [amount])[0];\n }\n });\n}\n","import { SuiClient } from '@mysten/sui/client';\nimport type {\n SuiTransactionBlockResponseOptions,\n SuiTransactionBlockResponse,\n SuiObjectDataOptions,\n SuiObjectData,\n} from '@mysten/sui/client';\nimport type * as RpcTypes from '@mysten/sui/dist/cjs/client/types/generated';\nimport { requestSuiFromFaucetV0, getFaucetHost } from '@mysten/sui/faucet';\nimport { FaucetNetworkType, NetworkType, ObjectData } from '../../types';\nimport { SuiOwnedObject, SuiSharedObject } from '../suiModel';\nimport { delay } from './util';\n\n/**\n * `SuiTransactionSender` is used to send transaction with a given gas coin.\n * It always uses the gas coin to pay for the gas,\n * and update the gas coin after the transaction.\n */\nexport class SuiInteractor {\n public readonly clients: SuiClient[];\n public currentClient: SuiClient;\n public readonly fullNodes: string[];\n public currentFullNode: string;\n\n public network?: NetworkType;\n\n constructor(fullNodeUrls: string[], network?: NetworkType) {\n if (fullNodeUrls.length === 0)\n throw new Error('fullNodeUrls must not be empty');\n this.fullNodes = fullNodeUrls;\n this.clients = fullNodeUrls.map((url) => new SuiClient({ url }));\n this.currentFullNode = fullNodeUrls[0];\n this.currentClient = this.clients[0];\n this.network = network;\n }\n\n switchToNextClient() {\n const currentClientIdx = this.clients.indexOf(this.currentClient);\n this.currentClient =\n this.clients[(currentClientIdx + 1) % this.clients.length];\n this.currentFullNode =\n this.fullNodes[(currentClientIdx + 1) % this.clients.length];\n }\n\n async sendTx(\n transactionBlock: Uint8Array | string,\n signature: string | string[]\n ): Promise<SuiTransactionBlockResponse> {\n const txResOptions: SuiTransactionBlockResponseOptions = {\n showEvents: true,\n showEffects: true,\n showObjectChanges: true,\n showBalanceChanges: true,\n };\n\n // const currentProviderIdx = this.providers.indexOf(this.currentProvider);\n // const providers = [\n // ...this.providers.slice(currentProviderIdx, this.providers.length),\n // ...this.providers.slice(0, currentProviderIdx),\n // ]\n\n for (const clientIdx in this.clients) {\n try {\n return await this.clients[clientIdx].executeTransactionBlock({\n transactionBlock,\n signature,\n options: txResOptions,\n });\n } catch (err) {\n console.warn(\n `Failed to send transaction with fullnode ${this.fullNodes[clientIdx]}: ${err}`\n );\n await delay(2000);\n }\n }\n throw new Error('Failed to send transaction with all fullnodes');\n }\n\n async waitForTransaction({\n digest,\n timeout = 60 * 1000,\n pollInterval = 2 * 1000,\n }: {\n digest: string;\n timeout?: number;\n pollInterval?: number;\n }) {\n for (const clientIdx in this.clients) {\n try {\n const txResOptions: SuiTransactionBlockResponseOptions = {\n showEvents: true,\n showEffects: true,\n showObjectChanges: true,\n showBalanceChanges: true,\n };\n\n return await this.clients[clientIdx].waitForTransaction({\n digest,\n timeout,\n pollInterval,\n options: txResOptions,\n });\n } catch (err) {\n console.warn(\n `Failed to wait for transaction with fullnode ${this.fullNodes[clientIdx]}: ${err}`\n );\n await delay(2000);\n }\n }\n throw new Error('Failed to wait for transaction with all fullnodes');\n }\n\n async getObjects(\n ids: string[],\n options?: SuiObjectDataOptions\n ): Promise<SuiObjectData[]> {\n const opts: SuiObjectDataOptions = options ?? {\n showContent: true,\n showDisplay: true,\n showType: true,\n showOwner: true,\n };\n\n for (const clientIdx in this.clients) {\n try {\n const objects = await this.clients[clientIdx].multiGetObjects({\n ids,\n options: opts,\n });\n const parsedObjects = objects\n .map((object) => {\n return object.data;\n })\n .filter((object) => object !== null && object !== undefined);\n return parsedObjects as SuiObjectData[];\n } catch (err) {\n await delay(2000);\n console.warn(\n `Failed to get objects with fullnode ${this.fullNodes[clientIdx]}: ${err}`\n );\n }\n }\n throw new Error('Failed to get objects with all fullnodes');\n }\n\n async getObject(id: string) {\n const objects = await this.getObjects([id]);\n return objects[0];\n }\n\n async getDynamicFieldObject(\n parentId: string,\n name: RpcTypes.DynamicFieldName\n ) {\n for (const clientIdx in this.clients) {\n try {\n return await this.clients[clientIdx].getDynamicFieldObject({\n parentId,\n name,\n });\n } catch (err) {\n await delay(2000);\n console.warn(\n `Failed to get DynamicFieldObject with fullnode ${this.fullNodes[clientIdx]}: ${err}`\n );\n }\n }\n throw new Error('Failed to get DynamicFieldObject with all fullnodes');\n }\n\n async getDynamicFields(parentId: string, cursor?: string, limit?: number) {\n for (const clientIdx in this.clients) {\n try {\n return await this.clients[clientIdx].getDynamicFields({\n parentId,\n cursor,\n limit,\n });\n } catch (err) {\n await delay(2000);\n console.warn(\n `Failed to get DynamicFields with fullnode ${this.fullNodes[clientIdx]}: ${err}`\n );\n }\n }\n throw new Error('Failed to get DynamicFields with all fullnodes');\n }\n\n async getTxDetails(digest: string) {\n for (const clientIdx in this.clients) {\n try {\n const txResOptions: SuiTransactionBlockResponseOptions = {\n showEvents: true,\n showEffects: true,\n showObjectChanges: true,\n showBalanceChanges: true,\n };\n\n return await this.clients[clientIdx].getTransactionBlock({\n digest,\n options: txResOptions,\n });\n } catch (err) {\n await delay(2000);\n console.warn(\n `Failed to get TransactionBlocks with fullnode ${this.fullNodes[clientIdx]}: ${err}`\n );\n }\n }\n throw new Error('Failed to get TransactionBlocks with all fullnodes');\n }\n\n async getOwnedObjects(owner: string, cursor?: string, limit?: number) {\n for (const clientIdx in this.clients) {\n try {\n return await this.clients[clientIdx].getOwnedObjects({\n owner,\n cursor,\n limit,\n });\n } catch (err) {\n await delay(2000);\n console.warn(\n `Failed to get OwnedObjects with fullnode ${this.fullNodes[clientIdx]}: ${err}`\n );\n }\n }\n throw new Error('Failed to get OwnedObjects with all fullnodes');\n }\n\n async getNormalizedMoveModulesByPackage(packageId: string) {\n for (const clientIdx in this.clients) {\n try {\n return await this.clients[clientIdx].getNormalizedMoveModulesByPackage({\n package: packageId,\n });\n } catch (err) {\n await delay(2000);\n console.warn(\n `Failed to get NormalizedMoveModules with fullnode ${this.fullNodes[clientIdx]}: ${err}`\n );\n }\n }\n throw new Error('Failed to get NormalizedMoveModules with all fullnodes');\n }\n\n /**\n * @description Update objects in a batch\n * @param suiObjects\n */\n async updateObjects(suiObjects: (SuiOwnedObject | SuiSharedObject)[]) {\n const objectIds = suiObjects.map((obj) => obj.objectId);\n const objects = await this.getObjects(objectIds);\n for (const object of objects) {\n const suiObject = suiObjects.find(\n (obj) => obj.objectId === object?.objectId\n );\n if (suiObject instanceof SuiSharedObject) {\n if (\n object.owner &&\n typeof object.owner === 'object' &&\n 'Shared' in object.owner\n ) {\n suiObject.initialSharedVersion =\n object.owner.Shared.initial_shared_version;\n } else {\n suiObject.initialSharedVersion = undefined;\n }\n } else if (suiObject instanceof SuiOwnedObject) {\n suiObject.version = object?.version;\n suiObject.digest = object?.digest;\n }\n }\n }\n\n /**\n * @description Select coins that add up to the given amount.\n * @param addr the address of the owner\n * @param amount the amount that is needed for the coin\n * @param coinType the coin type, default is '0x2::SUI::SUI'\n */\n async selectCoins(\n addr: string,\n amount: number,\n coinType: string = '0x2::SUI::SUI'\n ) {\n const selectedCoins: {\n objectId: string;\n digest: string;\n version: string;\n balance: string;\n }[] = [];\n let totalAmount = 0;\n let hasNext = true,\n nextCursor: string | null | undefined = null;\n while (hasNext && totalAmount < amount) {\n const coins = await this.currentClient.getCoins({\n owner: addr,\n coinType: coinType,\n cursor: nextCursor,\n });\n // Sort the coins by balance in descending order\n coins.data.sort((a, b) => parseInt(b.balance) - parseInt(a.balance));\n for (const coinData of coins.data) {\n selectedCoins.push({\n objectId: coinData.coinObjectId,\n digest: coinData.digest,\n version: coinData.version,\n balance: coinData.balance,\n });\n totalAmount = totalAmount + parseInt(coinData.balance);\n if (totalAmount >= amount) {\n break;\n }\n }\n\n nextCursor = coins.nextCursor;\n hasNext = coins.hasNextPage;\n }\n\n if (!selectedCoins.length) {\n throw new Error('No valid coins found for the transaction.');\n }\n return selectedCoins;\n }\n\n /**\n * @description Select owned objects with objectType.\n * @param addr the address of the owner\n * @param objectType the coin type, default is '0x2::SUI::SUI'\n */\n async selectObjects(addr: string, objectType: string) {\n const selectedObjects = [];\n let hasNext = true,\n nextCursor: string | null | undefined = null;\n while (hasNext) {\n const ownedObjects = await this.currentClient.getOwnedObjects({\n owner: addr,\n cursor: nextCursor,\n });\n\n for (const objectData of ownedObjects.data) {\n const objectDetail = await this.getObject(objectData.data!.objectId);\n if (objectDetail.type === objectType) {\n selectedObjects.push(objectDetail);\n }\n }\n\n nextCursor = ownedObjects.nextCursor;\n hasNext = ownedObjects.hasNextPage;\n }\n\n if (!selectedObjects.length) {\n throw new Error('Not own this object found for the transaction.');\n }\n return selectedObjects;\n }\n\n async requestFaucet(address: string, network: FaucetNetworkType) {\n await requestSuiFromFaucetV0({\n host: getFaucetHost(network),\n recipient: address,\n });\n }\n}\n","import type { SuiTransactionBlockResponse } from '@mysten/sui/client';\nimport type { CallArg } from '@mysten/sui/transactions';\n\nexport class SuiOwnedObject {\n public readonly objectId: string;\n public version?: string;\n public digest?: string;\n\n constructor(param: { objectId: string; version?: string; digest?: string }) {\n this.objectId = param.objectId;\n this.version = param.version;\n this.digest = param.digest;\n }\n\n /**\n * Check if the object is fully initialized.\n * So that when it's used as an input, it won't be necessary to fetch from fullnode again.\n * Which can save time when sending transactions.\n */\n isFullObject(): boolean {\n return !!this.version && !!this.digest;\n }\n\n asCallArg(): CallArg | string {\n if (!this.version || !this.digest) {\n return this.objectId;\n }\n return {\n $kind: 'Object',\n Object: {\n $kind: 'ImmOrOwnedObject',\n ImmOrOwnedObject: {\n objectId: this.objectId,\n version: this.version,\n digest: this.digest,\n },\n },\n };\n }\n\n /**\n * Update object version & digest based on the transaction response.\n * @param txResponse\n */\n updateFromTxResponse(txResponse: SuiTransactionBlockResponse) {\n const changes = txResponse.objectChanges;\n if (!changes) {\n throw new Error('Bad transaction response!');\n }\n for (const change of changes) {\n if (change.type === 'mutated' && change.objectId === this.objectId) {\n this.digest = change.digest;\n this.version = change.version;\n return;\n }\n }\n throw new Error('Could not find object in transaction response!');\n }\n}\n","import type { CallArg } from '@mysten/sui/transactions';\n\nexport class SuiSharedObject {\n public readonly objectId: string;\n public initialSharedVersion?: string;\n\n constructor(param: {\n objectId: string;\n initialSharedVersion?: string;\n mutable?: boolean;\n }) {\n this.objectId = param.objectId;\n this.initialSharedVersion = param.initialSharedVersion;\n }\n\n asCallArg(mutable: boolean = false): CallArg | string {\n if (!this.initialSharedVersion) {\n return this.objectId;\n }\n return {\n $kind: 'Object',\n Object: {\n $kind: 'SharedObject',\n SharedObject: {\n objectId: this.objectId,\n initialSharedVersion: this.initialSharedVersion,\n mutable,\n },\n },\n };\n }\n}\n","export const delay = (ms: number) =>\n new Promise((resolve) => setTimeout(resolve, ms));\n","import { NetworkType } from 'src/types';\n\nexport interface NetworkConfig {\n fullNode: string;\n graphql?: string;\n network: string;\n txExplorer: string;\n accountExplorer: string;\n explorer: string;\n indexerUrl: string;\n}\n\nexport const getDefaultURL = (\n networkType: NetworkType = 'testnet'\n): NetworkConfig => {\n switch (networkType) {\n case 'localnet':\n return {\n fullNode: 'http://127.0.0.1:9000',\n graphql: 'http://127.0.0.1:9125',\n network: 'localnet',\n txExplorer:\n 'https://explorer.polymedia.app/txblock/:txHash?network=local',\n accountExplorer:\n 'https://explorer.polymedia.app/address/:address?network=local',\n explorer: 'https://explorer.polymedia.app?network=local',\n indexerUrl: 'http://127.0.0.1:3001',\n };\n case 'devnet':\n return {\n fullNode: 'https://fullnode.devnet.sui.io:443',\n network: 'devnet',\n txExplorer: 'https://suiscan.xyz/devnet/tx/:txHash',\n accountExplorer: 'https://suiscan.xyz/devnet/address/:address',\n explorer: 'https://suiscan.xyz/devnet',\n indexerUrl: 'http://127.0.0.1:3001',\n };\n case 'testnet':\n return {\n fullNode: 'https://fullnode.testnet.sui.io:443',\n graphql: 'https://sui-testnet.mystenlabs.com/graphql',\n network: 'testnet',\n txExplorer: 'https://suiscan.xyz/testnet/tx/:txHash',\n accountExplorer: 'https://suiscan.xyz/testnet/address/:address',\n explorer: 'https://suiscan.xyz/testnet',\n indexerUrl: 'http://127.0.0.1:3001',\n };\n case 'mainnet':\n return {\n fullNode: 'https://fullnode.mainnet.sui.io:443',\n graphql: 'https://sui-mainnet.mystenlabs.com/graphql',\n network: 'mainnet',\n txExplorer: 'https://suiscan.xyz/mainnet/tx/:txHash',\n accountExplorer: 'https://suiscan.xyz/mainnet/address/:address',\n explorer: 'https://suiscan.xyz/mainnet',\n indexerUrl: 'http://127.0.0.1:3001',\n };\n default:\n return {\n fullNode: 'https://fullnode.testnet.sui.io:443',\n graphql: 'https://sui-testnet.mystenlabs.com/graphql',\n network: 'testnet',\n txExplorer: 'https://suiscan.xyz/testnet/tx/:txHash',\n accountExplorer: 'https://suiscan.xyz/testnet/address/:address',\n explorer: 'https://suiscan.xyz/testnet',\n indexerUrl: 'http://127.0.0.1:3001',\n };\n }\n};\n","import type { SuiMoveNormalizedModules } from '@mysten/sui/client';\nimport type { ContractFactoryParams, SuiMoveMoudleValueType } from './types';\nexport type ApiTypes = 'promise' | 'rxjs';\n\n// export interface ContractQuery {\n// (origin: AccountId | string | Uint8Array, options: ContractOptions, ...params: unknown[]): SuiTransactionBlockResponse<ApiType, ContractCallOutcome>;\n// }\n\n// export type MapMessageQuery<ApiType extends ApiTypes> = Record<string, ContractQuery<ApiType>>;\n\n// // function createQuery <ApiType extends ApiTypes> (meta: AbiMessage, fn: (origin: string | AccountId | Uint8Array, options: ContractOptions, params: unknown[]) => ContractCallResult<ApiType, ContractCallOutcome>): ContractQuery<ApiType> {\n// // return withMeta(meta, (origin: string | AccountId | Uint8Array, options: ContractOptions, ...params: unknown[]): ContractCallResult<ApiType, ContractCallOutcome> =>\n// // fn(origin, options, params)\n// // );\n// // }\n\n// export type MapMessageTx<ApiType extends ApiTypes> = Record<string, ContractTx<ApiType>>;\n\n// export interface ContractOptions {\n// gasLimit?: bigint | string | number | BN | WeightV2;\n// storageDepositLimit?: bigint | string | number | BN | null;\n// value?: bigint | BN | string | number;\n// }\n\n// export interface ContractTx {\n// (options: ContractOptions, ...params: unknown[]): SubmittableExtrinsic<ApiType>;\n// }\nexport class SuiContractFactory {\n public packageId: string;\n public metadata: SuiMoveNormalizedModules | undefined;\n // readonly #query: MapMessageQuery<ApiTypes> = {};\n // readonly #tx: MapMessageTx<ApiTypes> = {};\n /**\n * Support the following ways to init the SuiToolkit:\n * 1. mnemonics\n * 2. secretKey (base64 or hex)\n * If none of them is provided, will generate a random mnemonics with 24 words.\n *\n * @param mnemonics, 12 or 24 mnemonics words, separated by space\n * @param secretKey, base64 or hex string, when mnemonics is provided, secretKey will be ignored\n */\n constructor({ packageId, metadata }: ContractFactoryParams = {}) {\n // If the mnemonics or secretKey is provided, use it\n // Otherwise, generate a random mnemonics with 24 words\n this.packageId = packageId || '';\n this.metadata = metadata || undefined;\n }\n\n getFuncByModuleName(moduleName: string) {\n Object.values(this.metadata as SuiMoveNormalizedModules).forEach(\n (value) => {\n const data = value as SuiMoveMoudleValueType;\n console.log(`moudle name: ${data.name}`);\n // console.log(data.exposedFunctions)\n Object.entries(data.exposedFunctions).forEach(([key, value]) => {\n console.log(`\\tfunc name: ${key}`);\n Object.values(value.parameters).forEach((values) => {\n // console.log(values)\n });\n });\n }\n );\n }\n\n getAllFunc() {\n Object.values(this.metadata as SuiMoveNormalizedModules).forEach(\n (value) => {\n const data = value as SuiMoveMoudleValueType;\n console.log(`moudle name: ${data.name}`);\n // console.log(data.exposedFunctions)\n Object.entries(data.exposedFunctions).forEach(([key, value]) => {\n console.log(`\\tfunc name: ${key}`);\n console.log(`\\t\\t${value.parameters.length}`);\n Object.values(value.parameters).forEach((values) => {\n // console.log(values)\n console.log(`\\t\\targs: ${values}`);\n });\n });\n }\n );\n }\n\n getAllModule() {\n Object.values(this.metadata as SuiMoveNormalizedModules).forEach(\n (value, index) => {\n const data = value as SuiMoveMoudleValueType;\n console.log(`${index}. ${data.name}`);\n }\n );\n }\n\n // async call(arguments: ({\n // kind: \"Input\";\n // index: number;\n // type?: \"object\" | \"pure\" | undefined;\n // value?: any;\n // } | {\n // kind: \"GasCoin\";\n // } | {\n // kind: \"Result\";\n // index: number;\n // } | {\n // kind: \"NestedResult\";\n // index: number;\n // resultIndex: number;\n // })[], derivePathParams?: DerivePathParams) {\n // const tx = new TransactionBlock();\n // tx.moveCall({\n // target: `${this.packageId}::${}::${}`,\n // arguments,\n // })\n // return ;\n // }\n}\n\n// function createTx <ApiType extends ApiTypes> (meta: AbiMessage, fn: (options: ContractOptions, params: unknown[]) => SubmittableExtrinsic<ApiType>): ContractTx<ApiType> {\n// return withMeta(meta, (options: ContractOptions, ...params: unknown[]): SubmittableExtrinsic<ApiType> =>\n// fn(options, params)\n// );\n// }\n","export function capitalizeFirstLetter(input: string): string {\n return input.charAt(0).toUpperCase() + input.slice(1);\n}\n\nexport function normalizeHexAddress(input: string): string | null {\n const hexRegex = /^(0x)?[0-9a-fA-F]{64}$/;\n\n if (hexRegex.test(input)) {\n if (input.startsWith('0x')) {\n return input;\n } else {\n return '0x' + input;\n }\n } else {\n return null;\n }\n}\n\nexport function numberToAddressHex(num: number): string {\n const hex = num.toString(16);\n const paddedHex = '0x' + hex.padStart(64, '0');\n return paddedHex;\n}\n\nexport function normalizePackageId(input: string): string {\n const withPrefix = input.startsWith('0x') ? input : '0x' + input;\n const withoutPrefix = withPrefix.slice(2);\n const normalized = withoutPrefix.replace(/^0+/, '');\n return '0x' + normalized;\n}\n\nexport function convertHttpToWebSocket(url: string): string {\n if (url.startsWith('https://')) {\n return url.replace('https://', 'wss://');\n } else if (url.startsWith('http://')) {\n return url.replace('http://', 'ws://');\n }\n return url;\n}\n","export class ContractDataParsingError extends Error {\n public readonly errorType: string;\n public readonly functionName: string;\n public readonly moduleAddress: string;\n public readonly errorMessage: string;\n\n constructor(dryResult: any) {\n const error = dryResult?.effects?.status?.error || '';\n const functionMatch = error\n ? error.match(/function_name: Some\\(\"([^\"]+)\"\\)/)\n : null;\n const moduleMatch = error ? error.match(/address: ([a-fA-F0-9]+)/) : null;\n\n const functionName = functionMatch ? functionMatch[1] : 'unknown';\n const moduleAddress = moduleMatch ? '0x' + moduleMatch[1] : 'unknown';\n const errorMessage = dryResult.error ? dryResult.error : 'UNKNOWN_ERROR';\n\n const message = [\n `\\n- Function: ${functionName}`,\n `- Module Address: ${moduleAddress}`,\n `- Error Message: ${errorMessage}`,\n ].join('\\n');\n\n super(message);\n\n this.errorType = 'ContractDataParsingError';\n this.functionName = functionName;\n this.moduleAddress = moduleAddress;\n this.errorMessage = errorMessage;\n }\n}\n","import { Http } from '../http';\n\nexport interface OrderDirection {\n ASC: 'ASC';\n DESC: 'DESC';\n}\n\nexport interface OrderBy {\n field: string;\n direction: OrderDirection['ASC'] | OrderDirection['DESC'];\n}\n\nexport interface PageInfo {\n hasNextPage: boolean;\n hasPreviousPage: boolean;\n startCursor?: string;\n endCursor?: string;\n}\n\nexport interface Transaction {\n id: number;\n checkpoint: number;\n digest: string;\n created_at: string;\n}\n\nexport interface Schema {\n id: number;\n name: string;\n key1?: string;\n key2?: string;\n value: string;\n last_update_checkpoint: string;\n last_update_digest: string;\n is_removed: boolean;\n created_at: string;\n updated_at: string;\n}\n\nexport interface Event {\n id: number;\n checkpoint: string;\n digest: string;\n name: string;\n value: string;\n created_at: string;\n}\n\nexport interface ConnectionResponse<T> {\n edges: Array<{\n cursor: string;\n node: T;\n }>;\n pageInfo: PageInfo;\n}\n\nexport class SuiIndexerClient {\n private http: Http;\n\n constructor(http: Http) {\n this.http = http;\n }\n\n private async fetchGraphql<T>(query: string, variables?: any): Promise<T> {\n return this.http.fetchGraphql({ query, variables });\n }\n\n async getTransactions(params?: {\n first?: number;\n after?: string;\n last?: number;\n before?: string;\n checkpoint?: number;\n orderBy?: OrderBy;\n distinct?: boolean;\n }) {\n const query = `\n query GetTransactions($first: Int, $after: String, $last: Int, $before: String, $checkpoint: Int, $orderBy: TransactionOrderBy, $distinct: Boolean) {\n transactions(first: $first, after: $after, last: $last, before: $before, checkpoint: $checkpoint, orderBy: $orderBy, distinct: $distinct) {\n edges {\n cursor\n node {\n id\n checkpoint\n digest\n created_at\n }\n }\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n }\n }\n `;\n\n const response = await this.fetchGraphql<{\n transactions: ConnectionResponse<Transaction>;\n }>(query, params);\n return response.transactions;\n }\n\n async getSchemas(params?: {\n first?: number;\n after?: string;\n last?: number;\n before?: string;\n name?: string;\n key1?: string;\n key2?: string;\n orderBy?: OrderBy;\n distinct?: boolean;\n }): Promise<ConnectionResponse<Schema>> {\n const query = `\n query GetSchemas($first: Int, $after: String, $last: Int, $before: String, $name: String, $key1: String, $key2: String, $orderBy: SchemaOrderBy, $distinct: Boolean) {\n schemas(first: $first, after: $after, last: $last, before: $before, name: $name, key1: $key1, key2: $key2, orderBy: $orderBy, distinct: $distinct) {\n edges {\n cursor\n node {\n id\n name\n key1\n key2\n value\n last_update_checkpoint\n last_update_digest\n is_removed\n created_at\n updated_at\n }\n }\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n }\n }\n `;\n\n const response = await this.fetchGraphql<{\n schemas: ConnectionResponse<Schema>;\n }>(query, params);\n return response.schemas;\n }\n\n async getEvents(params?: {\n first?: number;\n after?: string;\n last?: number;\n before?: string;\n name?: string;\n checkpoint?: string;\n orderBy?: OrderBy;\n distinct?: boolean;\n }) {\n const query = `\n query GetEvents($first: Int, $after: String, $last: Int, $before: String, $name: String, $checkpoint: String, $orderBy: EventOrderBy, $distinct: Boolean) {\n events(first: $first, after: $after, last: $last, before: $before, name: $name, checkpoint: $checkpoint, orderBy: $orderBy, distinct: $distinct) {\n edges {\n cursor\n node {\n id\n checkpoint\n digest\n name\n value\n created_at\n }\n }\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n }\n }\n `;\n\n const response = await this.fetchGraphql<{\n events: ConnectionResponse<Event>;\n }>(query, params);\n return response.events;\n }\n\n async getStorage({\n name,\n key1,\n key2,\n first,\n after,\n last,\n before,\n orderBy,\n distinct,\n }: {\n name: string;\n key1?: string;\n key2?: string;\n first?: number;\n after?: string;\n last?: number;\n before?: string;\n orderBy?: OrderBy;\n distinct?: boolean;\n }): Promise<ConnectionResponse<Schema>> {\n const schemas = await this.getSchemas({\n name,\n key1,\n key2,\n first,\n after,\n last,\n before,\n orderBy,\n distinct,\n });\n\n return schemas;\n }\n\n async subscribe(\n names: string[],\n handleData: (data: any) => void\n ): Promise<WebSocket> {\n return this.http.subscribe(names, handleData);\n }\n}\n","export class BaseError extends Error {\n constructor(message: string, public code: number, public type: string) {\n super(message);\n this.name = this.constructor.name;\n }\n}\n\nexport class HttpError extends BaseError {\n constructor(message: string, code: number) {\n super(message, code, 'ERROR_HTTP');\n }\n}\n\nexport class GraphQLError extends BaseError {\n constructor(message: string) {\n super(message, 400, 'ERROR_GRAPHQL');\n }\n}\n\nexport class ValidationError extends BaseError {\n constructor(message: string) {\n super(message, 400, 'ERROR_VALIDATION');\n }\n}\n\nexport class NotFoundError extends BaseError {\n constructor(message: string) {\n super(message, 404, 'ERROR_NOT_FOUND');\n }\n}\n\nexport class ParseError extends BaseError {\n constructor(message: string) {\n super(message, 500, 'ERROR_PARSE');\n }\n}\n\nexport type ErrorType =\n | BaseError\n | Error\n | HttpError\n | NotFoundError\n | ValidationError\n | ParseError\n | GraphQLError;\n\nexport function handleError(error: ErrorType) {\n if (!(error instanceof Error)) {\n return {\n code: 500,\n error: {\n message: 'Unknown error occurred',\n type: `ERROR_UNKNOWN`,\n },\n };\n }\n\n switch (true) {\n case error instanceof HttpError:\n return {\n code: (error as HttpError).code,\n error: {\n message: error.message,\n type: 'ERROR_HTTP',\n },\n };\n\n case error instanceof GraphQLError:\n return {\n code: 400,\n error: {\n message: error.message,\n type: 'ERROR_GRAPHQL',\n },\n };\n\n case error instanceof ValidationError:\n return {\n code: 400,\n error: {\n message: error.message,\n type: 'ERROR_VALIDATION',\n },\n };\n\n case error instanceof NotFoundError:\n return {\n code: 404,\n error: {\n message: error.message,\n type: 'ERROR_NOT_FOUND',\n },\n };\n\n case error instanceof ParseError:\n return {\n code: 500,\n error: {\n message: error.message,\n type: 'ERROR_PARSE',\n },\n };\n\n case error instanceof BaseError:\n return {\n code: (error as BaseError).code,\n error: {\n message: error.message,\n type: (error as BaseError).type,\n },\n };\n\n default:\n return {\n code: 500,\n error: {\n message: error.message || 'Internal server error',\n type: 'ERROR_UNKNOWN',\n },\n };\n }\n}\n","export type WebSocketInstance = WebSocket;\n\nexport interface WebSocketConstructor {\n new (url: string): WebSocket;\n}\n\nexport function createWebSocketClient(url: string): WebSocketInstance {\n if (typeof window !== 'undefined') {\n // Browser Environment\n return new WebSocket(url);\n } else {\n // Node.js Environment\n try {\n require.resolve('ws');\n const WebSocket = require('ws');\n return new WebSocket(url);\n } catch (e) {\n console.error('Failed to load WebSocket implementation:', e);\n throw new Error(\n 'WebSocket implementation not available. Please install the \"ws\" package.'\n );\n }\n }\n}\n\nexport function isWebSocketSupported(): boolean {\n if (typeof window !== 'undefined') {\n return typeof WebSocket !== 'undefined';\n }\n try {\n require.resolve('ws');\n return true;\n } catch {\n return false;\n }\n}\n","import { BaseError, HttpError, GraphQLError, ParseError } from './errors';\nimport { createWebSocketClient, WebSocketInstance } from './ws-adapter';\n\nexport type FetchOptions = RequestInit & {\n next?: {\n revalidate?: boolean | number;\n };\n};\n\nexport class Http {\n private apiEndpoint: string;\n private graphqlEndpoint: string;\n private wsEndpoint: string;\n private defaultOptions?: FetchOptions;\n\n constructor(\n apiEndpoint: string,\n wsEndpoint: string,\n private customFetch?: typeof fetch,\n defaultOptions?: FetchOptions\n ) {\n this.apiEndpoint = apiEndpoint;\n this.graphqlEndpoint = apiEndpoint + '/graphql';\n this.wsEndpoint = wsEndpoint;\n this.defaultOptions = defaultOptions;\n }\n\n private getFetch() {\n return this.customFetch || fetch;\n }\n\n async fetch(url: string): Promise<Response> {\n try {\n const fetchFn = this.getFetch();\n const response = await fetchFn(url, {\n ...this.defaultOptions,\n });\n\n if (!response.ok) {\n throw new HttpError(\n `HTTP error! status: ${response.status}`,\n response.status\n );\n }\n\n return response;\n } catch (error) {\n if (error instanceof HttpError) {\n throw error;\n }\n throw new HttpError(`Failed to fetch: ${(error as Error).message}`, 500);\n }\n }\n\n async fetchGraphql<T>({\n query,\n variables,\n }: {\n query: string;\n variables?: any;\n }): Promise<T> {\n try {\n const isFirstPage = variables?.after === 'first';\n const fetchFn = this.getFetch();\n const response = await fetchFn(this.graphqlEndpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n },\n body: JSON.stringify({\n query,\n variables: {\n ...variables,\n after: isFirstPage ? undefined : variables?.after,\n },\n }),\n ...this.defaultOptions,\n });\n\n if (!response.ok) {\n const errorData = await response.json();\n\n if (errorData.errors?.[0]?.message?.includes('Syntax Error')) {\n throw new GraphQLError(\n `GraphQL syntax error: ${errorData.errors[0].message}`\n );\n }\n\n if (errorData.errors?.length > 0) {\n throw new GraphQLError(\n errorData.errors[0].message || 'Unknown GraphQL error'\n );\n }\n\n throw new HttpError(\n `HTTP error: ${JSON.stringify(errorData)}`,\n response.status\n );\n }\n const data = await response.json();\n\n if (data.errors) {\n throw new GraphQLError(\n data.errors[0]?.message || 'GraphQL query failed'\n );\n }\n\n return data.data;\n } catch (error) {\n if (error instanceof BaseError) {\n throw error;\n }\n if (error instanceof SyntaxError) {\n throw new ParseError('Failed to parse JSON response');\n }\n throw new HttpError(\n `Failed to fetch GraphQL: ${(error as Error).message}`,\n 500\n );\n }\n }\n\n async subscribe(\n names: string[],\n handleData: (data: any) => void\n ): Promise<WebSocketInstance> {\n const ws = createWebSocketClient(this.wsEndpoint);\n\n ws.onopen = () => {\n console.log('Connected to the WebSocket server');\n const subscribeMessage = JSON.stringify({\n type: 'subscribe',\n names: names,\n });\n ws.send(subscribeMessage);\n };\n\n ws.onmessage = (event) => {\n handleData(JSON.parse(event.data.toString()));\n };\n\n ws.onclose = () => {\n console.log('Disconnected from the WebSocket server');\n };\n\n ws.onerror = (error) => {\n console.error(`WebSocket error:`, error);\n };\n\n return ws;\n }\n}\n","import { MultiSigPublicKey } from '@mysten/sui/multisig';\nimport type { PublicKey } from '@mysten/sui/cryptography';\nimport { ed25519PublicKeyFromBase64 } from './publickey';\n\nexport type PublicKeyWeightPair = {\n publicKey: PublicKey;\n weight: number;\n};\n\nexport class MultiSigClient {\n public readonly pksWeightPairs: PublicKeyWeightPair[];\n public readonly threshold: number;\n public readonly multiSigPublicKey: MultiSigPublicKey;\n constructor(pks: PublicKeyWeightPair[], threshold: number) {\n this.pksWeightPairs = pks;\n this.threshold = threshold;\n this.multiSigPublicKey = MultiSigPublicKey.fromPublicKeys({\n threshold: this.threshold,\n publicKeys: this.pksWeightPairs,\n });\n }\n\n static fromRawEd25519PublicKeys(\n rawPublicKeys: string[],\n weights: number[],\n threshold: number\n ): MultiSigClient {\n const pks = rawPublicKeys.map((rawPublicKey, i) => {\n return {\n publicKey: ed25519PublicKeyFromBase64(rawPublicKey),\n weight: weights[i],\n };\n });\n return new MultiSigClient(pks, threshold);\n }\n\n multiSigAddress(): string {\n return this.multiSigPublicKey.toSuiAddress();\n }\n\n combinePartialSigs(sigs: string[]): string {\n return this.multiSigPublicKey.combinePartialSignatures(sigs);\n }\n}\n","import { PublicKey } from '@mysten/sui/cryptography';\nimport { Ed25519PublicKey } from '@mysten/sui/keypairs/ed25519';\nimport { fromB64 } from '@mysten/sui/utils';\n\nexport function ed25519PublicKeyFromBase64(rawPubkey: string): PublicKey {\n let bytes = fromB64(rawPubkey);\n // rawPubkeys should either be 32 bytes or 33 bytes (with the first byte being flag)\n if (bytes.length !== 32 && bytes.length !== 33) throw 'invalid pubkey length';\n bytes = bytes.length === 33 ? bytes.slice(1) : bytes;\n return new Ed25519PublicKey(bytes);\n}\n","import { SuiMoveNormalizedModules } from '@mysten/sui/client';\nimport { getFullnodeUrl } from '@mysten/sui/client';\n\nimport { SuiInteractor } from '../libs/suiInteractor';\nimport { NetworkType } from '../types';\n\nexport async function loadMetadata(\n networkType: NetworkType,\n packageId: string,\n fullnodeUrls?: string[]\n) {\n // Init the rpc provider\n fullnodeUrls = fullnodeUrls || [getFullnodeUrl(networkType)];\n const suiInteractor = new SuiInteractor(fullnodeUrls);\n if (packageId !== undefined) {\n const jsonData = await suiInteractor.getNormalizedMoveModulesByPackage(\n packageId\n );\n\n return jsonData as SuiMoveNormalizedModules;\n } else {\n console.error('please set your package id.');\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAAc,+BAAd;AACA,wBAAc,8BADd;AAEA,wBAAc,qCAFd;AAGA,wBAAc,4BAHd;AAIA,wBAAc,yCAJd;AAKA,wBAAc,2CALd;AAMA,wBAAc,2CANd;AAOA,IAAAA,cAA6B;;;ACP7B,uBAAsB;AAEtB,IAAAC,uBAA+C;AAC/C,IAAAC,cAAuD;;;ACHvD,IAAAC,kBAA+B;;;ACA/B,qBAA+B;AAOxB,IAAM,sBAAsB,CACjC,mBAAqC,CAAC,MACnC;AACH,QAAM;AAAA,IACJ,eAAe;AAAA,IACf,aAAa;AAAA,IACb,eAAe;AAAA,EACjB,IAAI;AACJ,SAAO,cAAc,YAAY,KAAK,aAAa,IAAI,CAAC,KAAK,YAAY;AAC3E;AAeO,IAAM,aAAa,CACxB,WACA,mBAAqC,CAAC,MACnC;AACH,QAAM,aAAa,oBAAoB,gBAAgB;AACvD,SAAO,8BAAe,cAAc,WAAW,UAAU;AAC3D;;;ACrCA,mBAAwB;AAMjB,IAAM,QAAQ,CAAC,QACpB,kCAAkC,KAAK,GAAG;AAOrC,IAAM,WAAW,CAAC,QAAgB,0BAA0B,KAAK,GAAG;AAMpE,IAAM,UAAU,CAAC,WAA+B;AACrD,MAAI,CAAC,QAAQ;AACX,UAAM,IAAI,MAAM,yCAAyC;AAAA,EAC3D;AACA,QAAM,SAAS,OACZ,QAAQ,MAAM,EAAE,EAChB,MAAM,SAAS,GACd,IAAI,CAAC,SAAS,SAAS,MAAM,EAAE,CAAC;AAEpC,MAAI,CAAC,UAAU,OAAO,WAAW,GAAG;AAClC,UAAM,IAAI,MAAM,wBAAwB,MAAM,EAAE;AAAA,EAClD;AACA,SAAO,WAAW,KAAK,MAAM;AAC/B;AAKO,IAAM,0BAA0B,CAAC,QAA4B;AAClE,MAAI,MAAM,GAAG,GAAG;AACd,WAAO,QAAQ,GAAG;AAAA,EACpB,WAAW,SAAS,GAAG,GAAG;AACxB,eAAO,sBAAQ,GAAG;AAAA,EACpB,OAAO;AACL,UAAM,IAAI,MAAM,iDAAiD;AAAA,EACnE;AACF;AAEA,IAAM,mBAAmB;AACzB,IAAM,0BAA0B;AASzB,IAAM,sBAAsB,CAAC,QAAgC;AAClE,MAAI,IAAI,WAAW,yBAAyB;AAE1C,UAAM,IAAI,MAAM,GAAG,gBAAgB;AAAA,EACrC,WAAW,IAAI,WAAW,mBAAmB,KAAK,IAAI,CAAC,MAAM,GAAG;AAE9D,WAAO,IAAI,MAAM,CAAC;AAAA,EACpB,WAAW,IAAI,WAAW,kBAAkB;AAC1C,WAAO;AAAA,EACT;AACA,QAAM,IAAI,MAAM,oBAAoB;AACtC;;;ACrEA,mBAAgD;AAChD,qBAAyB;AAElB,IAAM,mBAAmB,CAAC,gBAAyB,OAAO;AAC/D,QAAM,WAAW,kBAAkB,KAAK,MAAM;AAC9C,aAAO,aAAAC,kBAAY,yBAAU,QAAQ;AACvC;;;AHDA,0BAGO;AAEA,IAAM,oBAAN,MAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAe7B,YAAY,EAAE,WAAW,UAAU,IAAyB,CAAC,GAAG;AAG9D,SAAK,YAAY,aAAa;AAC9B,SAAK,YAAY,aAAa;AAC9B,QAAI,CAAC,KAAK,aAAa,CAAC,KAAK,WAAW;AACtC,WAAK,YAAY,iBAAiB,EAAE;AAAA,IACtC;AAGA,SAAK,iBAAiB,KAAK,YACvB,KAAK,eAAe,KAAK,SAAS,IAClC,WAAW,KAAK,SAAS;AAC7B,SAAK,iBAAiB,KAAK,eAAe,aAAa,EAAE,aAAa;AAAA,EACxE;AAAA;AAAA;AAAA;AAAA,EAKA,eAAe,WAAmB;AAChC,QAAI,UAAU,WAAW,0CAAsB,GAAG;AAChD,YAAM,EAAE,WAAW,oBAAoB,QAAI,yCAAoB,SAAS;AACxE,aAAO,+BAAe;AAAA,QACpB,oBAAoB,mBAAmB;AAAA,MACzC;AAAA,IACF;AAEA,WAAO,+BAAe;AAAA,MACpB,oBAAoB,wBAAwB,SAAS,CAAC;AAAA,IACxD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,WAAW,kBAAqC;AAC9C,QAAI,CAAC,oBAAoB,CAAC,KAAK;AAAW,aAAO,KAAK;AACtD,WAAO,WAAW,KAAK,WAAW,gBAAgB;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,WAAW,kBAAqC;AAC9C,QAAI,CAAC,oBAAoB,CAAC,KAAK;AAAW,aAAO,KAAK;AACtD,WAAO,WAAW,KAAK,WAAW,gBAAgB,EAC/C,aAAa,EACb,aAAa;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,cAAc,kBAAoC;AAChD,QAAI,KAAK,WAAW;AAClB,WAAK,iBAAiB,WAAW,KAAK,WAAW,gBAAgB;AACjE,WAAK,iBAAiB,KAAK,eAAe,aAAa,EAAE,aAAa;AAAA,IACxE;AAAA,EACF;AACF;;;AIzFA,IAAAC,uBAA4B;AAC5B,IAAAC,gBAA2C;;;ACD3C,IAAAC,gBAKO;AACP,0BAAyC;AACzC,iBAAoD;AAe7C,IAAM,yBAAyB,CACpC,UAC0C;AAC1C,MAAI,OAAO,UAAU,gBAAY,kCAAmB,KAAK,GAAG;AAC1D,WAAO;AAAA,EACT,WAAW,OAAO,UAAU,YAAY,OAAO,UAAU,UAAU;AACjE,WAAO;AAAA,EACT,WAAW,OAAO,UAAU,WAAW;AACrC,WAAO;AAAA,EACT,OAAO;AACL,WAAO;AAAA,EACT;AACF;AAeO,SAAS,aACd,SACA,MACA,MACqB;AACrB,MAAI,KAAK,WAAW;AAClB,UAAM,IAAI,MAAM,uDAAuD;AAEzE,QAAM,iBAAiB,uBAAuB,KAAK,CAAC,CAAC;AACrD,QAAM,eAAe;AACrB,QAAM,eAAe;AAErB,SAAO,QAAQ;AAEf,MAAI,SAAS,UAAU;AACrB,UAAM,WAAW,KAAK;AAAA,MAAI,CAAC,QACzB,OAAO,QAAQ,gBAAY,kCAAmB,GAAG,IAC7C,QAAQ,WAAO,oCAAqB,GAAG,CAAC,IACxC,cAAc,SAAS,GAAmB;AAAA,IAChD;AACA,WAAO,QAAQ,YAAY,EAAE,SAAS,CAAC;AAAA,EACzC,WACE,OAAO,SAAS,YAChB,CAAC,aAAa,KAAK,IAAI,KACvB,CAAC,aAAa,KAAK,IAAI,GACvB;AACA,UAAM,gBAAY,sCAAiB,IAAI;AACvC,WAAO,QAAQ,KAAK,eAAI,OAAO,SAAS,EAAE,UAAU,IAAI,CAAC;AAAA,EAC3D,OAAO;AACL,UAAM,WAAW,KAAK;AAAA,MAAI,CAAC,QACzB,cAAc,SAAS,GAAmB;AAAA,IAC5C;AACA,WAAO,QAAQ,YAAY,EAAE,UAAU,KAAK,CAAC;AAAA,EAC/C;AACF;AAQO,SAAS,aAAa,KAAiD;AAC5E,MAAI,OAAO,QAAQ,YAAY,aAAa,OAAO,WAAW,KAAK;AACjE,WAAO;AAAA,EACT,WAAW,MAAM,QAAQ,GAAG,GAAG;AAC7B,WAAO;AAAA,EACT;AACA,SAAO;AACT;AASO,SAAS,YACd,SACA,MACuB;AACvB,SAAO,KAAK,IAAI,CAAC,QAAQ;AACvB,QAAI,eAAe,gCAAiB,4BAAgB,GAAG,GAAG;AACxD,aAAO,QAAQ,KAAK,GAAG;AAAA,IACzB;AAEA,QAAI,aAAa,GAAG,GAAG;AACrB,YAAM,UAAU,aAAa;AAC7B,aAAO,UACH,aAAa,SAAS,IAAI,OAAO,IAAI,OAAO,IAC5C,aAAa,SAAS,GAAG;AAAA,IAC/B;AAEA,WAAO;AAAA,EACT,CAAC;AACH;AASO,SAAS,kBACd,SACA,KACqB;AACrB,MAAI,OAAO,QAAQ,gBAAY,iCAAkB,GAAG,GAAG;AACrD,WAAO,QAAQ,KAAK,YAAQ,mCAAoB,GAAG,CAAC;AAAA,EACtD,OAAO;AACL,WAAO,YAAY,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;AAAA,EACtC;AACF;AASO,SAAS,cACd,KACA,KAC2B;AAC3B,MAAI,OAAO,QAAQ,UAAU;AAC3B,WAAO,IAAI,OAAO,GAAG;AAAA,EACvB;AAEA,MAAI,YAAY,OAAO,aAAa,OAAO,cAAc,KAAK;AAC5D,WAAO,IAAI,UAAU,GAAG;AAAA,EAC1B;AAEA,MAAI,cAAc,OAAO,0BAA0B,OAAO,aAAa,KAAK;AAC1E,WAAO,IAAI,gBAAgB,GAAG;AAAA,EAChC;AAEA,MAAI,YAAY,KAAK;AACnB,QAAI,sBAAsB,IAAI,QAAQ;AACpC,aAAO,IAAI,OAAO,2BAAO,UAAU,IAAI,OAAO,gBAAgB,CAAC;AAAA,IACjE,WAAW,kBAAkB,IAAI,QAAQ;AACvC,aAAO,IAAI,OAAO,2BAAO,gBAAgB,IAAI,OAAO,YAAY,CAAC;AAAA,IACnE,OAAO;AACL,YAAM,IAAI,MAAM,uBAAuB;AAAA,IACzC;AAAA,EACF;AAEA,MAAI,OAAO,QAAQ,YAAY;AAC7B,WAAO;AAAA,EACT;AAEA,MACE,aAAa,OACb,WAAW,OACX,YAAY,OACZ,kBAAkB,KAClB;AACA,WAAO;AAAA,EACT;AAEA,QAAM,IAAI,MAAM,uBAAuB;AACzC;AAEO,SAAS,eAAe,SAAsB,SAA0B;AAC7E,SAAO,QAAQ,IAAI,CAAC,WAAW;AAC7B,QAAI,OAAO,WAAW,YAAY,OAAO,WAAW,UAAU;AAC5D,aAAO;AAAA,IACT,OAAO;AACL,aAAO,YAAY,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;AAAA,IACzC;AAAA,EACF,CAAC;AACH;;;AD9KO,IAAM,QAAN,MAAY;AAAA,EAGjB,YAAY,aAA2B;AACrC,QAAI,gBAAgB,QAAW;AAC7B,WAAK,KAAK,iCAAY,KAAK,WAAW;AAAA,IACxC,OAAO;AACL,WAAK,KAAK,IAAI,iCAAY;AAAA,IAC5B;AAAA,EACF;AAAA;AAAA,EAGA,IAAI,MAAM;AACR,WAAO,KAAK,GAAG;AAAA,EACjB;AAAA,EACA,IAAI,YAAY;AACd,WAAO,KAAK,GAAG;AAAA,EACjB;AAAA,EACA,QAAQ,OAAe;AACrB,WAAO,KAAK,GAAG,KAAK,QAAQ,KAAK;AAAA,EACnC;AAAA,EACA,IAAI,OAUF;AACA,WAAO,KAAK,GAAG;AAAA,EACjB;AAAA,EACA,OAAO,OAAwC;AAC7C,WAAO,KAAK,GAAG,OAAO,KAAK;AAAA,EAC7B;AAAA,EACA,UAAU,KAAmB;AAC3B,WAAO,KAAK,GAAG,UAAU,GAAG;AAAA,EAC9B;AAAA,EACA,gBAAgB,KAA4C;AAC1D,WAAO,KAAK,GAAG,gBAAgB,GAAG;AAAA,EACpC;AAAA,EACA,UAAU,QAAgB;AACxB,WAAO,KAAK,GAAG,UAAU,MAAM;AAAA,EACjC;AAAA,EACA,kBAAkB,QAAgB;AAChC,WAAO,KAAK,GAAG,kBAAkB,MAAM;AAAA,EACzC;AAAA,EACA,cAAc,YAA0D;AACtE,WAAO,KAAK,GAAG,cAAc,UAAU;AAAA,EACzC;AAAA,EACA,YAAY,OAAwB;AAClC,WAAO,KAAK,GAAG,YAAY,KAAK;AAAA,EAClC;AAAA,EACA,aAAa,QAAyB;AACpC,WAAO,KAAK,GAAG,aAAa,MAAM;AAAA,EACpC;AAAA,EACA,YAAY,OAAe;AACzB,WAAO,KAAK,GAAG,YAAY,KAAK;AAAA,EAClC;AAAA,EACA,cAAc,UAA0B;AACtC,WAAO,KAAK,GAAG,cAAc,QAAQ;AAAA,EACvC;AAAA,EACA,YAAY;AACV,WAAO,KAAK,GAAG,UAAU;AAAA,EAC3B;AAAA,EACA,SAAS;AACP,WAAO,KAAK,GAAG,OAAO;AAAA,EACxB;AAAA,EACA,KAAK,QAIF;AACD,WAAO,KAAK,GAAG,KAAK,MAAM;AAAA,EAC5B;AAAA,EACA,MACE,SAGI,CAAC,GACL;AACA,WAAO,KAAK,GAAG,MAAM,MAAM;AAAA,EAC7B;AAAA,EACA,UAAU,SAAiC,CAAC,GAAG;AAC7C,WAAO,KAAK,GAAG,UAAU,MAAM;AAAA,EACjC;AAAA,EACA,OAAO,MAAsC;AAC3C,WAAO,KAAK,GAAG,IAAI,GAAG,IAAI;AAAA,EAC5B;AAAA,EACA,QAAQ;AAAA,IACN;AAAA,IACA;AAAA,EACF,GAGG;AACD,WAAO,KAAK,GAAG,QAAQ,EAAE,SAAS,aAAa,CAAC;AAAA,EAClD;AAAA,EACA,WAAW,MAA0C;AACnD,WAAO,KAAK,GAAG,QAAQ,GAAG,IAAI;AAAA,EAChC;AAAA,EACA,eAAe,MAA8C;AAC3D,WAAO,KAAK,GAAG,YAAY,GAAG,IAAI;AAAA,EACpC;AAAA;AAAA,EAIA,gBAAgB,SAAyB,SAAwB;AAC/D,WAAO,KAAK,GAAG;AAAA,MACb,QAAQ,IAAI,CAAC,WAAW,cAAc,KAAK,IAAI,MAAM,CAAC;AAAA,MACtD,kBAAkB,KAAK,IAAI,OAAO;AAAA,IACpC;AAAA,EACF;AAAA,EAEA,WAAW,MAAoB,SAA0B;AACvD,UAAM,MAAM,KAAK,GAAG;AAAA,MAClB,cAAc,KAAK,IAAI,IAAI;AAAA,MAC3B,eAAe,KAAK,IAAI,OAAO;AAAA,IACjC;AACA,WAAO,QAAQ,IAAI,CAAC,GAAG,MAAM,IAAI,CAAC,CAAC;AAAA,EACrC;AAAA,EAEA,WAAW,aAA2B,SAAyB;AAC7D,UAAM,oBAAoB,cAAc,KAAK,IAAI,WAAW;AAC5D,UAAM,gBAAgB,QAAQ;AAAA,MAAI,CAAC,WACjC,cAAc,KAAK,IAAI,MAAM;AAAA,IAC/B;AACA,WAAO,KAAK,GAAG,WAAW,mBAAmB,aAAa;AAAA,EAC5D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,SACE,QACA,OAAmC,CAAC,GACpC,WAAqB,CAAC,GACtB;AAEA,UAAM,QACJ;AACF,UAAM,QAAQ,OAAO,MAAM,KAAK;AAChC,QAAI,UAAU;AACZ,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AACF,UAAM,gBAAgB,YAAY,KAAK,IAAI,IAAI;AAC/C,WAAO,KAAK,GAAG,SAAS;AAAA,MACtB;AAAA,MACA,WAAW;AAAA,MACX,eAAe;AAAA,IACjB,CAAC;AAAA,EACH;AAAA;AAAA,EAIA,kBACE,YACA,SACA;AAEA,QAAI,WAAW,WAAW,QAAQ,QAAQ;AACxC,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AACA,UAAM,QAAQ,KAAK,GAAG;AAAA,MACpB,KAAK,GAAG;AAAA,MACR,QAAQ;AAAA,QAAI,CAAC,WACX,OAAO,WAAW,YAAY,OAAO,WAAW,WAC5C,SACA,YAAY,KAAK,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;AAAA,MACtC;AAAA,IACF;AACA,UAAM,mBAAmB,WAAW;AAAA,MAAI,CAAC,cACvC,kBAAkB,KAAK,IAAI,SAAS;AAAA,IACtC;AACA,qBAAiB,QAAQ,CAAC,SAAS,UAAU;AAC3C,WAAK,GAAG,gBAAgB,CAAC,MAAM,KAAK,CAAC,GAAG,OAAO;AAAA,IACjD,CAAC;AACD,WAAO;AAAA,EACT;AAAA,EAEA,YAAY,SAAwB,QAAoC;AACtE,WAAO,KAAK,kBAAkB,CAAC,OAAO,GAAG,CAAC,MAAM,CAAC;AAAA,EACnD;AAAA,EAEA,oBACE,OACA,QACA;AACA,UAAM,cAAc,MAAM,IAAI,CAAC,SAAS,cAAc,KAAK,IAAI,IAAI,CAAC;AACpE,UAAM,aAAa,YAAY,CAAC;AAChC,QAAI,MAAM,SAAS,GAAG;AACpB,WAAK,GAAG,WAAW,YAAY,YAAY,MAAM,CAAC,CAAC;AAAA,IACrD;AACA,UAAM,CAAC,QAAQ,IAAI,KAAK,GAAG;AAAA,MACzB;AAAA,MACA,eAAe,KAAK,IAAI,CAAC,MAAM,CAAC;AAAA,IAClC;AACA,WAAO,CAAC,UAAU,UAAU;AAAA,EAC9B;AAAA,EAEA,gBAAgB,SAA0B;AACxC,WAAO,KAAK,GAAG,WAAW,KAAK,GAAG,KAAK,eAAe,KAAK,IAAI,OAAO,CAAC;AAAA,EACzE;AAAA,EAEA,gBAAgB,OAAuB,SAA0B;AAC/D,UAAM,cAAc,MAAM,IAAI,CAAC,SAAS,cAAc,KAAK,IAAI,IAAI,CAAC;AACpE,UAAM,aAAa,YAAY,CAAC;AAChC,QAAI,MAAM,SAAS,GAAG;AACpB,WAAK,GAAG,WAAW,YAAY,YAAY,MAAM,CAAC,CAAC;AAAA,IACrD;AACA,UAAM,eAAe,KAAK,GAAG;AAAA,MAC3B;AAAA,MACA,eAAe,KAAK,IAAI,OAAO;AAAA,IACjC;AACA,WAAO,EAAE,cAAc,WAAW;AAAA,EACpC;AAAA,EAEA,mBACE,OACA,QACA,YACA,SACA;AAEA,QAAI,WAAW,WAAW,QAAQ,QAAQ;AACxC,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AACA,UAAM,cAAc,MAAM,IAAI,CAAC,SAAS,cAAc,KAAK,IAAI,IAAI,CAAC;AACpE,UAAM,EAAE,cAAc,WAAW,IAAI,KAAK;AAAA,MACxC;AAAA,MACA;AAAA,IACF;AACA,UAAM,mBAAmB,WAAW;AAAA,MAAI,CAAC,cACvC,kBAAkB,KAAK,IAAI,SAAS;AAAA,IACtC;AACA,qBAAiB,QAAQ,CAAC,SAAS,UAAU;AAC3C,WAAK,GAAG,gBAAgB,CAAC,aAAa,KAAK,CAAC,GAAG,OAAO;AAAA,IACxD,CAAC;AACD,SAAK,GAAG,gBAAgB,CAAC,UAAU,GAAG,kBAAkB,KAAK,IAAI,MAAM,CAAC;AACxE,WAAO;AAAA,EACT;AAAA,EAEA,aACE,OACA,QACA,WACA,QACA;AACA,WAAO,KAAK,mBAAmB,OAAO,QAAQ,CAAC,SAAS,GAAG,CAAC,MAAM,CAAC;AAAA,EACrE;AAAA,EAEA,SAAS,QAAoC,eAA8B;AACzE,UAAM,CAAC,SAAS,IAAI,KAAK,GAAG;AAAA,MAC1B,KAAK,GAAG;AAAA,MACR,eAAe,KAAK,IAAI,CAAC,MAAM,CAAC;AAAA,IAClC;AACA,WAAO,KAAK,GAAG,SAAS;AAAA,MACtB,QAAQ;AAAA,MACR,WAAW,YAAY,KAAK,IAAI;AAAA,QAC9B,KAAK,GAAG,OAAO,wCAA0B;AAAA,QACzC;AAAA,QACA,kBAAkB,KAAK,IAAI,aAAa;AAAA,MAC1C,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AACF;;;AE/SA,oBAA0B;AAQ1B,oBAAsD;;;ACL/C,IAAM,iBAAN,MAAqB;AAAA,EAK1B,YAAY,OAAgE;AAC1E,SAAK,WAAW,MAAM;AACtB,SAAK,UAAU,MAAM;AACrB,SAAK,SAAS,MAAM;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,eAAwB;AACtB,WAAO,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,KAAK;AAAA,EAClC;AAAA,EAEA,YAA8B;AAC5B,QAAI,CAAC,KAAK,WAAW,CAAC,KAAK,QAAQ;AACjC,aAAO,KAAK;AAAA,IACd;AACA,WAAO;AAAA,MACL,OAAO;AAAA,MACP,QAAQ;AAAA,QACN,OAAO;AAAA,QACP,kBAAkB;AAAA,UAChB,UAAU,KAAK;AAAA,UACf,SAAS,KAAK;AAAA,UACd,QAAQ,KAAK;AAAA,QACf;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,qBAAqB,YAAyC;AAC5D,UAAM,UAAU,WAAW;AAC3B,QAAI,CAAC,SAAS;AACZ,YAAM,IAAI,MAAM,2BAA2B;AAAA,IAC7C;AACA,eAAW,UAAU,SAAS;AAC5B,UAAI,OAAO,SAAS,aAAa,OAAO,aAAa,KAAK,UAAU;AAClE,aAAK,SAAS,OAAO;AACrB,aAAK,UAAU,OAAO;AACtB;AAAA,MACF;AAAA,IACF;AACA,UAAM,IAAI,MAAM,gDAAgD;AAAA,EAClE;AACF;;;ACxDO,IAAM,kBAAN,MAAsB;AAAA,EAI3B,YAAY,OAIT;AACD,SAAK,WAAW,MAAM;AACtB,SAAK,uBAAuB,MAAM;AAAA,EACpC;AAAA,EAEA,UAAU,UAAmB,OAAyB;AACpD,QAAI,CAAC,KAAK,sBAAsB;AAC9B,aAAO,KAAK;AAAA,IACd;AACA,WAAO;AAAA,MACL,OAAO;AAAA,MACP,QAAQ;AAAA,QACN,OAAO;AAAA,QACP,cAAc;AAAA,UACZ,UAAU,KAAK;AAAA,UACf,sBAAsB,KAAK;AAAA,UAC3B;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;AC/BO,IAAM,QAAQ,CAAC,OACpB,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,EAAE,CAAC;;;AHiB3C,IAAM,gBAAN,MAAoB;AAAA,EAQzB,YAAY,cAAwB,SAAuB;AACzD,QAAI,aAAa,WAAW;AAC1B,YAAM,IAAI,MAAM,gCAAgC;AAClD,SAAK,YAAY;AACjB,SAAK,UAAU,aAAa,IAAI,CAAC,QAAQ,IAAI,wBAAU,EAAE,IAAI,CAAC,CAAC;AAC/D,SAAK,kBAAkB,aAAa,CAAC;AACrC,SAAK,gBAAgB,KAAK,QAAQ,CAAC;AACnC,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,qBAAqB;AACnB,UAAM,mBAAmB,KAAK,QAAQ,QAAQ,KAAK,aAAa;AAChE,SAAK,gBACH,KAAK,SAAS,mBAAmB,KAAK,KAAK,QAAQ,MAAM;AAC3D,SAAK,kBACH,KAAK,WAAW,mBAAmB,KAAK,KAAK,QAAQ,MAAM;AAAA,EAC/D;AAAA,EAEA,MAAM,OACJ,kBACA,WACsC;AACtC,UAAM,eAAmD;AAAA,MACvD,YAAY;AAAA,MACZ,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,oBAAoB;AAAA,IACtB;AAQA,eAAW,aAAa,KAAK,SAAS;AACpC,UAAI;AACF,eAAO,MAAM,KAAK,QAAQ,SAAS,EAAE,wBAAwB;AAAA,UAC3D;AAAA,UACA;AAAA,UACA,SAAS;AAAA,QACX,CAAC;AAAA,MACH,SAAS,KAAK;AACZ,gBAAQ;AAAA,UACN,4CAA4C,KAAK,UAAU,SAAS,CAAC,KAAK,GAAG;AAAA,QAC/E;AACA,cAAM,MAAM,GAAI;AAAA,MAClB;AAAA,IACF;AACA,UAAM,IAAI,MAAM,+CAA+C;AAAA,EACjE;AAAA,EAEA,MAAM,mBAAmB;AAAA,IACvB;AAAA,IACA,UAAU,KAAK;AAAA,IACf,eAAe,IAAI;AAAA,EACrB,GAIG;AACD,eAAW,aAAa,KAAK,SAAS;AACpC,UAAI;AACF,cAAM,eAAmD;AAAA,UACvD,YAAY;AAAA,UACZ,aAAa;AAAA,UACb,mBAAmB;AAAA,UACnB,oBAAoB;AAAA,QACtB;AAEA,eAAO,MAAM,KAAK,QAAQ,SAAS,EAAE,mBAAmB;AAAA,UACtD;AAAA,UACA;AAAA,UACA;AAAA,UACA,SAAS;AAAA,QACX,CAAC;AAAA,MACH,SAAS,KAAK;AACZ,gBAAQ;AAAA,UACN,gDAAgD,KAAK,UAAU,SAAS,CAAC,KAAK,GAAG;AAAA,QACnF;AACA,cAAM,MAAM,GAAI;AAAA,MAClB;AAAA,IACF;AACA,UAAM,IAAI,MAAM,mDAAmD;AAAA,EACrE;AAAA,EAEA,MAAM,WACJ,KACA,SAC0B;AAC1B,UAAM,OAA6B,WAAW;AAAA,MAC5C,aAAa;AAAA,MACb,aAAa;AAAA,MACb,UAAU;AAAA,MACV,WAAW;AAAA,IACb;AAEA,eAAW,aAAa,KAAK,SAAS;AACpC,UAAI;AACF,cAAM,UAAU,MAAM,KAAK,QAAQ,SAAS,EAAE,gBAAgB;AAAA,UAC5D;AAAA,UACA,SAAS;AAAA,QACX,CAAC;AACD,cAAM,gBAAgB,QACnB,IAAI,CAAC,WAAW;AACf,iBAAO,OAAO;AAAA,QAChB,CAAC,EACA,OAAO,CAAC,WAAW,WAAW,QAAQ,WAAW,MAAS;AAC7D,eAAO;AAAA,MACT,SAAS,KAAK;AACZ,cAAM,MAAM,GAAI;AAChB,gBAAQ;AAAA,UACN,uCAAuC,KAAK,UAAU,SAAS,CAAC,KAAK,GAAG;AAAA,QAC1E;AAAA,MACF;AAAA,IACF;AACA,UAAM,IAAI,MAAM,0CAA0C;AAAA,EAC5D;AAAA,EAEA,MAAM,UAAU,IAAY;AAC1B,UAAM,UAAU,MAAM,KAAK,WAAW,CAAC,EAAE,CAAC;AAC1C,WAAO,QAAQ,CAAC;AAAA,EAClB;AAAA,EAEA,MAAM,sBACJ,UACA,MACA;AACA,eAAW,aAAa,KAAK,SAAS;AACpC,UAAI;AACF,eAAO,MAAM,KAAK,QAAQ,SAAS,EAAE,sBAAsB;AAAA,UACzD;AAAA,UACA;AAAA,QACF,CAAC;AAAA,MACH,SAAS,KAAK;AACZ,cAAM,MAAM,GAAI;AAChB,gBAAQ;AAAA,UACN,kDAAkD,KAAK,UAAU,SAAS,CAAC,KAAK,GAAG;AAAA,QACrF;AAAA,MACF;AAAA,IACF;AACA,UAAM,IAAI,MAAM,qDAAqD;AAAA,EACvE;AAAA,EAEA,MAAM,iBAAiB,UAAkB,QAAiB,OAAgB;AACxE,eAAW,aAAa,KAAK,SAAS;AACpC,UAAI;AACF,eAAO,MAAM,KAAK,QAAQ,SAAS,EAAE,iBAAiB;AAAA,UACpD;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AAAA,MACH,SAAS,KAAK;AACZ,cAAM,MAAM,GAAI;AAChB,gBAAQ;AAAA,UACN,6CAA6C,KAAK,UAAU,SAAS,CAAC,KAAK,GAAG;AAAA,QAChF;AAAA,MACF;AAAA,IACF;AACA,UAAM,IAAI,MAAM,gDAAgD;AAAA,EAClE;AAAA,EAEA,MAAM,aAAa,QAAgB;AACjC,eAAW,aAAa,KAAK,SAAS;AACpC,UAAI;AACF,cAAM,eAAmD;AAAA,UACvD,YAAY;AAAA,UACZ,aAAa;AAAA,UACb,mBAAmB;AAAA,UACnB,oBAAoB;AAAA,QACtB;AAEA,eAAO,MAAM,KAAK,QAAQ,SAAS,EAAE,oBAAoB;AAAA,UACvD;AAAA,UACA,SAAS;AAAA,QACX,CAAC;AAAA,MACH,SAAS,KAAK;AACZ,cAAM,MAAM,GAAI;AAChB,gBAAQ;AAAA,UACN,iDAAiD,KAAK,UAAU,SAAS,CAAC,KAAK,GAAG;AAAA,QACpF;AAAA,MACF;AAAA,IACF;AACA,UAAM,IAAI,MAAM,oDAAoD;AAAA,EACtE;AAAA,EAEA,MAAM,gBAAgB,OAAe,QAAiB,OAAgB;AACpE,eAAW,aAAa,KAAK,SAAS;AACpC,UAAI;AACF,eAAO,MAAM,KAAK,QAAQ,SAAS,EAAE,gBAAgB;AAAA,UACnD;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AAAA,MACH,SAAS,KAAK;AACZ,cAAM,MAAM,GAAI;AAChB,gBAAQ;AAAA,UACN,4CAA4C,KAAK,UAAU,SAAS,CAAC,KAAK,GAAG;AAAA,QAC/E;AAAA,MACF;AAAA,IACF;AACA,UAAM,IAAI,MAAM,+CAA+C;AAAA,EACjE;AAAA,EAEA,MAAM,kCAAkC,WAAmB;AACzD,eAAW,aAAa,KAAK,SAAS;AACpC,UAAI;AACF,eAAO,MAAM,KAAK,QAAQ,SAAS,EAAE,kCAAkC;AAAA,UACrE,SAAS;AAAA,QACX,CAAC;AAAA,MACH,SAAS,KAAK;AACZ,cAAM,MAAM,GAAI;AAChB,gBAAQ;AAAA,UACN,qDAAqD,KAAK,UAAU,SAAS,CAAC,KAAK,GAAG;AAAA,QACxF;AAAA,MACF;AAAA,IACF;AACA,UAAM,IAAI,MAAM,wDAAwD;AAAA,EAC1E;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,cAAc,YAAkD;AACpE,UAAM,YAAY,WAAW,IAAI,CAAC,QAAQ,IAAI,QAAQ;AACtD,UAAM,UAAU,MAAM,KAAK,WAAW,SAAS;AAC/C,eAAW,UAAU,SAAS;AAC5B,YAAM,YAAY,WAAW;AAAA,QAC3B,CAAC,QAAQ,IAAI,aAAa,QAAQ;AAAA,MACpC;AACA,UAAI,qBAAqB,iBAAiB;AACxC,YACE,OAAO,SACP,OAAO,OAAO,UAAU,YACxB,YAAY,OAAO,OACnB;AACA,oBAAU,uBACR,OAAO,MAAM,OAAO;AAAA,QACxB,OAAO;AACL,oBAAU,uBAAuB;AAAA,QACnC;AAAA,MACF,WAAW,qBAAqB,gBAAgB;AAC9C,kBAAU,UAAU,QAAQ;AAC5B,kBAAU,SAAS,QAAQ;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,YACJ,MACA,QACA,WAAmB,iBACnB;AACA,UAAM,gBAKA,CAAC;AACP,QAAI,cAAc;AAClB,QAAI,UAAU,MACZ,aAAwC;AAC1C,WAAO,WAAW,cAAc,QAAQ;AACtC,YAAM,QAAQ,MAAM,KAAK,cAAc,SAAS;AAAA,QAC9C,OAAO;AAAA,QACP;AAAA,QACA,QAAQ;AAAA,MACV,CAAC;AAED,YAAM,KAAK,KAAK,CAAC,GAAG,MAAM,SAAS,EAAE,OAAO,IAAI,SAAS,EAAE,OAAO,CAAC;AACnE,iBAAW,YAAY,MAAM,MAAM;AACjC,sBAAc,KAAK;AAAA,UACjB,UAAU,SAAS;AAAA,UACnB,QAAQ,SAAS;AAAA,UACjB,SAAS,SAAS;AAAA,UAClB,SAAS,SAAS;AAAA,QACpB,CAAC;AACD,sBAAc,cAAc,SAAS,SAAS,OAAO;AACrD,YAAI,eAAe,QAAQ;AACzB;AAAA,QACF;AAAA,MACF;AAEA,mBAAa,MAAM;AACnB,gBAAU,MAAM;AAAA,IAClB;AAEA,QAAI,CAAC,cAAc,QAAQ;AACzB,YAAM,IAAI,MAAM,2CAA2C;AAAA,IAC7D;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,cAAc,MAAc,YAAoB;AACpD,UAAM,kBAAkB,CAAC;AACzB,QAAI,UAAU,MACZ,aAAwC;AAC1C,WAAO,SAAS;AACd,YAAM,eAAe,MAAM,KAAK,cAAc,gBAAgB;AAAA,QAC5D,OAAO;AAAA,QACP,QAAQ;AAAA,MACV,CAAC;AAED,iBAAW,cAAc,aAAa,MAAM;AAC1C,cAAM,eAAe,MAAM,KAAK,UAAU,WAAW,KAAM,QAAQ;AACnE,YAAI,aAAa,SAAS,YAAY;AACpC,0BAAgB,KAAK,YAAY;AAAA,QACnC;AAAA,MACF;AAEA,mBAAa,aAAa;AAC1B,gBAAU,aAAa;AAAA,IACzB;AAEA,QAAI,CAAC,gBAAgB,QAAQ;AAC3B,YAAM,IAAI,MAAM,gDAAgD;AAAA,IAClE;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,cAAc,SAAiB,SAA4B;AAC/D,cAAM,sCAAuB;AAAA,MAC3B,UAAM,6BAAc,OAAO;AAAA,MAC3B,WAAW;AAAA,IACb,CAAC;AAAA,EACH;AACF;;;AIhWO,IAAM,gBAAgB,CAC3B,cAA2B,cACT;AAClB,UAAQ,aAAa;AAAA,IACnB,KAAK;AACH,aAAO;AAAA,QACL,UAAU;AAAA,QACV,SAAS;AAAA,QACT,SAAS;AAAA,QACT,YACE;AAAA,QACF,iBACE;AAAA,QACF,UAAU;AAAA,QACV,YAAY;AAAA,MACd;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,UAAU;AAAA,QACV,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,iBAAiB;AAAA,QACjB,UAAU;AAAA,QACV,YAAY;AAAA,MACd;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,UAAU;AAAA,QACV,SAAS;AAAA,QACT,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,iBAAiB;AAAA,QACjB,UAAU;AAAA,QACV,YAAY;AAAA,MACd;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,UAAU;AAAA,QACV,SAAS;AAAA,QACT,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,iBAAiB;AAAA,QACjB,UAAU;AAAA,QACV,YAAY;AAAA,MACd;AAAA,IACF;AACE,aAAO;AAAA,QACL,UAAU;AAAA,QACV,SAAS;AAAA,QACT,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,iBAAiB;AAAA,QACjB,UAAU;AAAA,QACV,YAAY;AAAA,MACd;AAAA,EACJ;AACF;;;ACzCO,IAAM,qBAAN,MAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAc9B,YAAY,EAAE,WAAW,SAAS,IAA2B,CAAC,GAAG;AAG/D,SAAK,YAAY,aAAa;AAC9B,SAAK,WAAW,YAAY;AAAA,EAC9B;AAAA,EAEA,oBAAoB,YAAoB;AACtC,WAAO,OAAO,KAAK,QAAoC,EAAE;AAAA,MACvD,CAAC,UAAU;AACT,cAAM,OAAO;AACb,gBAAQ,IAAI,gBAAgB,KAAK,IAAI,EAAE;AAEvC,eAAO,QAAQ,KAAK,gBAAgB,EAAE,QAAQ,CAAC,CAAC,KAAKC,MAAK,MAAM;AAC9D,kBAAQ,IAAI,eAAgB,GAAG,EAAE;AACjC,iBAAO,OAAOA,OAAM,UAAU,EAAE,QAAQ,CAAC,WAAW;AAAA,UAEpD,CAAC;AAAA,QACH,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAAA,EAEA,aAAa;AACX,WAAO,OAAO,KAAK,QAAoC,EAAE;AAAA,MACvD,CAAC,UAAU;AACT,cAAM,OAAO;AACb,gBAAQ,IAAI,gBAAgB,KAAK,IAAI,EAAE;AAEvC,eAAO,QAAQ,KAAK,gBAAgB,EAAE,QAAQ,CAAC,CAAC,KAAKA,MAAK,MAAM;AAC9D,kBAAQ,IAAI,eAAgB,GAAG,EAAE;AACjC,kBAAQ,IAAI,KAAOA,OAAM,WAAW,MAAM,EAAE;AAC5C,iBAAO,OAAOA,OAAM,UAAU,EAAE,QAAQ,CAAC,WAAW;AAElD,oBAAQ,IAAI,WAAa,MAAM,EAAE;AAAA,UACnC,CAAC;AAAA,QACH,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAAA,EAEA,eAAe;AACb,WAAO,OAAO,KAAK,QAAoC,EAAE;AAAA,MACvD,CAAC,OAAO,UAAU;AAChB,cAAM,OAAO;AACb,gBAAQ,IAAI,GAAG,KAAK,KAAK,KAAK,IAAI,EAAE;AAAA,MACtC;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAwBF;;;AC7GO,SAAS,oBAAoB,OAA8B;AAChE,QAAM,WAAW;AAEjB,MAAI,SAAS,KAAK,KAAK,GAAG;AACxB,QAAI,MAAM,WAAW,IAAI,GAAG;AAC1B,aAAO;AAAA,IACT,OAAO;AACL,aAAO,OAAO;AAAA,IAChB;AAAA,EACF,OAAO;AACL,WAAO;AAAA,EACT;AACF;AAEO,SAAS,mBAAmB,KAAqB;AACtD,QAAM,MAAM,IAAI,SAAS,EAAE;AAC3B,QAAM,YAAY,OAAO,IAAI,SAAS,IAAI,GAAG;AAC7C,SAAO;AACT;AAEO,SAAS,mBAAmB,OAAuB;AACxD,QAAM,aAAa,MAAM,WAAW,IAAI,IAAI,QAAQ,OAAO;AAC3D,QAAM,gBAAgB,WAAW,MAAM,CAAC;AACxC,QAAM,aAAa,cAAc,QAAQ,OAAO,EAAE;AAClD,SAAO,OAAO;AAChB;AAEO,SAAS,uBAAuB,KAAqB;AAC1D,MAAI,IAAI,WAAW,UAAU,GAAG;AAC9B,WAAO,IAAI,QAAQ,YAAY,QAAQ;AAAA,EACzC,WAAW,IAAI,WAAW,SAAS,GAAG;AACpC,WAAO,IAAI,QAAQ,WAAW,OAAO;AAAA,EACvC;AACA,SAAO;AACT;;;AbUA,IAAAC,cAAoC;;;AchD7B,IAAM,2BAAN,cAAuC,MAAM;AAAA,EAMlD,YAAY,WAAgB;AAC1B,UAAM,QAAQ,WAAW,SAAS,QAAQ,SAAS;AACnD,UAAM,gBAAgB,QAClB,MAAM,MAAM,kCAAkC,IAC9C;AACJ,UAAM,cAAc,QAAQ,MAAM,MAAM,yBAAyB,IAAI;AAErE,UAAM,eAAe,gBAAgB,cAAc,CAAC,IAAI;AACxD,UAAM,gBAAgB,cAAc,OAAO,YAAY,CAAC,IAAI;AAC5D,UAAM,eAAe,UAAU,QAAQ,UAAU,QAAQ;AAEzD,UAAM,UAAU;AAAA,MACd;AAAA,cAAiB,YAAY;AAAA,MAC7B,qBAAqB,aAAa;AAAA,MAClC,oBAAoB,YAAY;AAAA,IAClC,EAAE,KAAK,IAAI;AAEX,UAAM,OAAO;AAEb,SAAK,YAAY;AACjB,SAAK,eAAe;AACpB,SAAK,gBAAgB;AACrB,SAAK,eAAe;AAAA,EACtB;AACF;;;AC0BO,IAAM,mBAAN,MAAuB;AAAA,EAG5B,YAAY,MAAY;AACtB,SAAK,OAAO;AAAA,EACd;AAAA,EAEA,MAAc,aAAgB,OAAe,WAA6B;AACxE,WAAO,KAAK,KAAK,aAAa,EAAE,OAAO,UAAU,CAAC;AAAA,EACpD;AAAA,EAEA,MAAM,gBAAgB,QAQnB;AACD,UAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBd,UAAM,WAAW,MAAM,KAAK,aAEzB,OAAO,MAAM;AAChB,WAAO,SAAS;AAAA,EAClB;AAAA,EAEA,MAAM,WAAW,QAUuB;AACtC,UAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA4Bd,UAAM,WAAW,MAAM,KAAK,aAEzB,OAAO,MAAM;AAChB,WAAO,SAAS;AAAA,EAClB;AAAA,EAEA,MAAM,UAAU,QASb;AACD,UAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAwBd,UAAM,WAAW,MAAM,KAAK,aAEzB,OAAO,MAAM;AAChB,WAAO,SAAS;AAAA,EAClB;AAAA,EAEA,MAAM,WAAW;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAUwC;AACtC,UAAM,UAAU,MAAM,KAAK,WAAW;AAAA,MACpC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,UACJ,OACA,YACoB;AACpB,WAAO,KAAK,KAAK,UAAU,OAAO,UAAU;AAAA,EAC9C;AACF;;;ACvOO,IAAM,YAAN,cAAwB,MAAM;AAAA,EACnC,YAAY,SAAwB,MAAqB,MAAc;AACrE,UAAM,OAAO;AADqB;AAAqB;AAEvD,SAAK,OAAO,KAAK,YAAY;AAAA,EAC/B;AACF;AAEO,IAAM,YAAN,cAAwB,UAAU;AAAA,EACvC,YAAY,SAAiB,MAAc;AACzC,UAAM,SAAS,MAAM,YAAY;AAAA,EACnC;AACF;AAEO,IAAM,eAAN,cAA2B,UAAU;AAAA,EAC1C,YAAY,SAAiB;AAC3B,UAAM,SAAS,KAAK,eAAe;AAAA,EACrC;AACF;AAcO,IAAM,aAAN,cAAyB,UAAU;AAAA,EACxC,YAAY,SAAiB;AAC3B,UAAM,SAAS,KAAK,aAAa;AAAA,EACnC;AACF;;;AC7BO,SAAS,sBAAsB,KAAgC;AACpE,MAAI,OAAO,WAAW,aAAa;AAEjC,WAAO,IAAI,UAAU,GAAG;AAAA,EAC1B,OAAO;AAEL,QAAI;AACF,sBAAgB,IAAI;AACpB,YAAMC,aAAY,QAAQ,IAAI;AAC9B,aAAO,IAAIA,WAAU,GAAG;AAAA,IAC1B,SAAS,GAAG;AACV,cAAQ,MAAM,4CAA4C,CAAC;AAC3D,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;ACdO,IAAM,OAAN,MAAW;AAAA,EAMhB,YACE,aACA,YACQ,aACR,gBACA;AAFQ;AAGR,SAAK,cAAc;AACnB,SAAK,kBAAkB,cAAc;AACrC,SAAK,aAAa;AAClB,SAAK,iBAAiB;AAAA,EACxB;AAAA,EAEQ,WAAW;AACjB,WAAO,KAAK,eAAe;AAAA,EAC7B;AAAA,EAEA,MAAM,MAAM,KAAgC;AAC1C,QAAI;AACF,YAAM,UAAU,KAAK,SAAS;AAC9B,YAAM,WAAW,MAAM,QAAQ,KAAK;AAAA,QAClC,GAAG,KAAK;AAAA,MACV,CAAC;AAED,UAAI,CAAC,SAAS,IAAI;AAChB,cAAM,IAAI;AAAA,UACR,uBAAuB,SAAS,MAAM;AAAA,UACtC,SAAS;AAAA,QACX;AAAA,MACF;AAEA,aAAO;AAAA,IACT,SAAS,OAAO;AACd,UAAI,iBAAiB,WAAW;AAC9B,cAAM;AAAA,MACR;AACA,YAAM,IAAI,UAAU,oBAAqB,MAAgB,OAAO,IAAI,GAAG;AAAA,IACzE;AAAA,EACF;AAAA,EAEA,MAAM,aAAgB;AAAA,IACpB;AAAA,IACA;AAAA,EACF,GAGe;AACb,QAAI;AACF,YAAM,cAAc,WAAW,UAAU;AACzC,YAAM,UAAU,KAAK,SAAS;AAC9B,YAAM,WAAW,MAAM,QAAQ,KAAK,iBAAiB;AAAA,QACnD,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,gBAAgB;AAAA,UAChB,QAAQ;AAAA,QACV;AAAA,QACA,MAAM,KAAK,UAAU;AAAA,UACnB;AAAA,UACA,WAAW;AAAA,YACT,GAAG;AAAA,YACH,OAAO,cAAc,SAAY,WAAW;AAAA,UAC9C;AAAA,QACF,CAAC;AAAA,QACD,GAAG,KAAK;AAAA,MACV,CAAC;AAED,UAAI,CAAC,SAAS,IAAI;AAChB,cAAM,YAAY,MAAM,SAAS,KAAK;AAEtC,YAAI,UAAU,SAAS,CAAC,GAAG,SAAS,SAAS,cAAc,GAAG;AAC5D,gBAAM,IAAI;AAAA,YACR,yBAAyB,UAAU,OAAO,CAAC,EAAE,OAAO;AAAA,UACtD;AAAA,QACF;AAEA,YAAI,UAAU,QAAQ,SAAS,GAAG;AAChC,gBAAM,IAAI;AAAA,YACR,UAAU,OAAO,CAAC,EAAE,WAAW;AAAA,UACjC;AAAA,QACF;AAEA,cAAM,IAAI;AAAA,UACR,eAAe,KAAK,UAAU,SAAS,CAAC;AAAA,UACxC,SAAS;AAAA,QACX;AAAA,MACF;AACA,YAAM,OAAO,MAAM,SAAS,KAAK;AAEjC,UAAI,KAAK,QAAQ;AACf,cAAM,IAAI;AAAA,UACR,KAAK,OAAO,CAAC,GAAG,WAAW;AAAA,QAC7B;AAAA,MACF;AAEA,aAAO,KAAK;AAAA,IACd,SAAS,OAAO;AACd,UAAI,iBAAiB,WAAW;AAC9B,cAAM;AAAA,MACR;AACA,UAAI,iBAAiB,aAAa;AAChC,cAAM,IAAI,WAAW,+BAA+B;AAAA,MACtD;AACA,YAAM,IAAI;AAAA,QACR,4BAA6B,MAAgB,OAAO;AAAA,QACpD;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,UACJ,OACA,YAC4B;AAC5B,UAAM,KAAK,sBAAsB,KAAK,UAAU;AAEhD,OAAG,SAAS,MAAM;AAChB,cAAQ,IAAI,mCAAmC;AAC/C,YAAM,mBAAmB,KAAK,UAAU;AAAA,QACtC,MAAM;AAAA,QACN;AAAA,MACF,CAAC;AACD,SAAG,KAAK,gBAAgB;AAAA,IAC1B;AAEA,OAAG,YAAY,CAAC,UAAU;AACxB,iBAAW,KAAK,MAAM,MAAM,KAAK,SAAS,CAAC,CAAC;AAAA,IAC9C;AAEA,OAAG,UAAU,MAAM;AACjB,cAAQ,IAAI,wCAAwC;AAAA,IACtD;AAEA,OAAG,UAAU,CAAC,UAAU;AACtB,cAAQ,MAAM,oBAAoB,KAAK;AAAA,IACzC;AAEA,WAAO;AAAA,EACT;AACF;;;AlB9FO,SAAS,YAAY,OAAqC;AAC/D,SAAO,UAAU;AACnB;AAEO,SAAS,SACd,MACA,SACG;AACH,EAAC,QAAc,OAAO;AAEtB,SAAO;AACT;AAEA,SAAS,YACP,MACA,IAMe;AACf,SAAO;AAAA,IACL;AAAA,IACA,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,MAKsD;AACpD,YAAM,SAAS,MAAM,GAAG,IAAI,QAAQ,eAAe,KAAK;AACxD,aAAO;AAAA,IACT;AAAA,EACF;AACF;AAEA,SAAS,SACP,MACA,IAMY;AACZ,SAAO;AAAA,IACL;AAAA,IACA,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,MAKgE;AAC9D,aAAO,MAAM,GAAG,IAAI,QAAQ,eAAe,KAAK;AAAA,IAClD;AAAA,EACF;AACF;AA5HA;AAkIO,IAAM,QAAN,MAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgHjB,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAiB,CAAC,GAAG;AAm4BrB;AAr/BA,uBAAS,QAA6B,CAAC;AACvC,uBAAS,KAAuB,CAAC;AACjC,uBAAS,SAA2B;AAAA,MAClC,SAAS,gBAAI,MAAM,EAAE,EAAE,UAAU;AAAA;AAAA,QAE/B,OAAO,CAAC,YAAgB,qBAAQ,GAAG;AAAA,QACnC,QAAQ,CAAC,YAAQ,mBAAM,GAAG;AAAA,MAC5B,CAAC;AAAA,MACD,IAAI,gBAAI,GAAG;AAAA,MACX,KAAK,gBAAI,IAAI;AAAA,MACb,KAAK,gBAAI,IAAI;AAAA,MACb,KAAK,gBAAI,IAAI;AAAA,MACb,MAAM,gBAAI,KAAK;AAAA,MACf,MAAM,gBAAI,KAAK;AAAA,MACf,MAAM,gBAAI,KAAK;AAAA,MACf,sBAAsB,gBAAI,OAAO;AAAA,MACjC,uBAAuB,gBAAI,OAAO;AAAA,MAClC,gCAAgC,gBAAI;AAAA,QAClC,gBAAI,MAAM,EAAE,EAAE,UAAU;AAAA;AAAA,UAEtB,OAAO,CAAC,YAAgB,qBAAQ,GAAG;AAAA,UACnC,QAAQ,CAAC,YAAQ,mBAAM,GAAG;AAAA,QAC5B,CAAC;AAAA,MACH;AAAA,MACA,2BAA2B,gBAAI,OAAO,gBAAI,GAAG,CAAC;AAAA,MAC9C,4BAA4B,gBAAI,OAAO,gBAAI,IAAI,CAAC;AAAA,MAChD,4BAA4B,gBAAI,OAAO,gBAAI,IAAI,CAAC;AAAA,MAChD,4BAA4B,gBAAI,OAAO,gBAAI,IAAI,CAAC;AAAA,MAChD,6BAA6B,gBAAI,OAAO,gBAAI,KAAK,CAAC;AAAA,MAClD,6BAA6B,gBAAI,OAAO,gBAAI,KAAK,CAAC;AAAA,MAClD,6BAA6B,gBAAI,OAAO,gBAAI,KAAK,CAAC;AAAA,MAClD,wCAAwC,gBAAI;AAAA,QAC1C,gBAAI;AAAA,UACF,gBAAI,MAAM,EAAE,EAAE,UAAU;AAAA;AAAA,YAEtB,OAAO,CAAC,YAAgB,qBAAQ,GAAG;AAAA,YACnC,QAAQ,CAAC,YAAQ,mBAAM,GAAG;AAAA,UAC5B,CAAC;AAAA,QACH;AAAA,MACF;AAAA,MACA,mCAAmC,gBAAI,OAAO,gBAAI,OAAO,gBAAI,GAAG,CAAC,CAAC;AAAA,MAClE,oCAAoC,gBAAI,OAAO,gBAAI,OAAO,gBAAI,IAAI,CAAC,CAAC;AAAA,MACpE,oCAAoC,gBAAI,OAAO,gBAAI,OAAO,gBAAI,IAAI,CAAC,CAAC;AAAA,MACpE,oCAAoC,gBAAI,OAAO,gBAAI,OAAO,gBAAI,IAAI,CAAC,CAAC;AAAA,MACpE,qCAAqC,gBAAI,OAAO,gBAAI,OAAO,gBAAI,KAAK,CAAC,CAAC;AAAA,MACtE,qCAAqC,gBAAI,OAAO,gBAAI,OAAO,gBAAI,KAAK,CAAC,CAAC;AAAA,MACtE,qCAAqC,gBAAI,OAAO,gBAAI,OAAO,gBAAI,KAAK,CAAC,CAAC;AAAA,MACtE,mBAAmB,gBAAI;AAAA,QACrB,gBAAI,MAAM,EAAE,EAAE,UAAU;AAAA;AAAA,UAEtB,OAAO,CAAC,YAAgB,qBAAQ,GAAG;AAAA,UACnC,QAAQ,CAAC,YAAQ,mBAAM,GAAG;AAAA,QAC5B,CAAC;AAAA,MACH;AAAA,MACA,cAAc,gBAAI,OAAO,gBAAI,GAAG,CAAC;AAAA,MACjC,eAAe,gBAAI,OAAO,gBAAI,IAAI,CAAC;AAAA,MACnC,eAAe,gBAAI,OAAO,gBAAI,IAAI,CAAC;AAAA,MACnC,eAAe,gBAAI,OAAO,gBAAI,IAAI,CAAC;AAAA,MACnC,gBAAgB,gBAAI,OAAO,gBAAI,KAAK,CAAC;AAAA,MACrC,gBAAgB,gBAAI,OAAO,gBAAI,KAAK,CAAC;AAAA,MACrC,gBAAgB,gBAAI,OAAO,gBAAI,KAAK,CAAC;AAAA,MACrC,2BAA2B,gBAAI;AAAA,QAC7B,gBAAI;AAAA,UACF,gBAAI,MAAM,EAAE,EAAE,UAAU;AAAA;AAAA,YAEtB,OAAO,CAAC,YAAgB,qBAAQ,GAAG;AAAA,YACnC,QAAQ,CAAC,YAAQ,mBAAM,GAAG;AAAA,UAC5B,CAAC;AAAA,QACH;AAAA,MACF;AAAA,MACA,sBAAsB,gBAAI,OAAO,gBAAI,OAAO,gBAAI,GAAG,CAAC,CAAC;AAAA,MACrD,uBAAuB,gBAAI,OAAO,gBAAI,OAAO,gBAAI,IAAI,CAAC,CAAC;AAAA,MACvD,uBAAuB,gBAAI,OAAO,gBAAI,OAAO,gBAAI,IAAI,CAAC,CAAC;AAAA,MACvD,uBAAuB,gBAAI,OAAO,gBAAI,OAAO,gBAAI,IAAI,CAAC,CAAC;AAAA,MACvD,wBAAwB,gBAAI,OAAO,gBAAI,OAAO,gBAAI,KAAK,CAAC,CAAC;AAAA,MACzD,wBAAwB,gBAAI,OAAO,gBAAI,OAAO,gBAAI,KAAK,CAAC,CAAC;AAAA,MACzD,wBAAwB,gBAAI,OAAO,gBAAI,OAAO,gBAAI,KAAK,CAAC,CAAC;AAAA,MACzD,sBAAsB,gBAAI,OAAO,QAAQ;AAAA,QACvC,IAAI,gBAAI,WAAW,IAAI,gBAAI,GAAG,CAAC,EAAE,UAAU;AAAA,UACzC,OAAO,CAAC,WAAe,qBAAQ,EAAE;AAAA,UACjC,QAAQ,CAAC,WAAO,mBAAM,WAAW,KAAK,EAAE,CAAC;AAAA,QAC3C,CAAC;AAAA,QACD,SAAS,gBAAI,OAAO,WAAW;AAAA,UAC7B,OAAO,gBAAI,IAAI;AAAA,QACjB,CAAC;AAAA,MACH,CAAC;AAAA,MACD,4BAA4B,gBAAI,OAAO,WAAW;AAAA,QAChD,OAAO,gBAAI,IAAI;AAAA,MACjB,CAAC;AAAA,IACH;AA+JA,8BAAQ,OACN,MACA,IACA,QACA,eACA,UACG;AACH,UAAI,UAAU,MAAM;AAClB,eAAO,GAAG,SAAS;AAAA,UACjB,QAAQ,GAAG,KAAK,gBAAgB,SAAS,KAAK,KAAK,UAAU,KAAK,KAAK,QAAQ;AAAA,UAC/E,WAAW;AAAA,UACX;AAAA,QACF,CAAC;AAAA,MACH;AAEA,SAAG,SAAS;AAAA,QACV,QAAQ,GAAG,KAAK,gBAAgB,SAAS,KAAK,KAAK,UAAU,KAAK,KAAK,QAAQ;AAAA,QAC/E,WAAW;AAAA,QACX;AAAA,MACF,CAAC;AACD,aAAO,MAAM,KAAK,eAAe,EAAE;AAAA,IACrC;AAEA,8BAAQ,OACN,MACA,IACA,QACA,eACA,UACG;AACH,UAAI,UAAU,MAAM;AAClB,eAAO,GAAG,SAAS;AAAA,UACjB,QAAQ,GAAG,KAAK,gBAAgB,SAAS,KAAK,KAAK,UAAU,KAAK,KAAK,QAAQ;AAAA,UAC/E,WAAW;AAAA,UACX;AAAA,QACF,CAAC;AAAA,MACH;AAEA,SAAG,SAAS;AAAA,QACV,QAAQ,GAAG,KAAK,gBAAgB,SAAS,KAAK,KAAK,UAAU,KAAK,KAAK,QAAQ;AAAA,QAC/E,WAAW;AAAA,QACX;AAAA,MACF,CAAC;AAED,aAAO,MAAM,KAAK,WAAW,EAAE;AAAA,IACjC;AAEA,wCAAkB,CAAC,UAAyC;AAC1D,UAAI,OAAO,UAAU,YAAY,YAAY,OAAO;AAClD,eAAO,IAAI,mBAAK,iBAAL,WAAqB,MAAM;AAAA,MACxC;AACA,aAAO;AAAA,IACT;AAEA,6BAAO,CAAC,YAA4B;AAClC,UAAI,WAAW;AACf,YAAM,UAA6C,CAAC;AACpD,aAAO,QAAQ,QAAQ,WAAW,MAAM,EAAE,QAAQ,CAAC,CAAC,OAAO,IAAI,MAAM;AACnE,cAAM,UAAU,KAAK;AACrB,cAAM,UAAiC,KAAK;AAC5C,gBAAQ,OAAO,SAAS;AAAA,UACtB,KAAK;AACH,uBAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,OAAO,GAAG;AAClD,sBAAQ,KAAK;AAAA,gBACX,KAAK;AACH,wBAAM,aAAa;AAMnB,sBACE,WAAW,YAAY,SACvB,WAAW,WAAW,WACtB,WAAW,SAAS,UACpB;AACA,4BAAQ,OAAO,IAAI,gBAAI,OAAO;AAC9B;AAAA,kBACF,WACE,WAAW,YAAY,SACvB,WAAW,WAAW,YACtB,WAAW,SAAS,OACpB;AACA,4BAAQ,OAAO,IAAI,gBAAI,WAAW,IAAI,gBAAI,GAAG,CAAC,EAAE,UAAU;AAAA,sBACxD,OAAO,CAAC,WAAe,qBAAQ,EAAE;AAAA,sBACjC,QAAQ,CAAC,WAAO,mBAAM,WAAW,KAAK,EAAE,CAAC;AAAA,oBAC3C,CAAC;AACD;AAAA,kBACF,WACE,WAAW,YAAY,SACvB,WAAW,WAAW,YACtB,WAAW,SAAS,MACpB;AACA,4BAAQ,OAAO,IAAI,gBAAI,WAAW,IAAI,gBAAI,GAAG,CAAC,EAAE,UAAU;AAAA,sBACxD,OAAO,CAAC,WAAe,qBAAQ,EAAE;AAAA,sBACjC,QAAQ,CAAC,WAAO,mBAAM,WAAW,KAAK,EAAE,CAAC;AAAA,oBAC3C,CAAC;AACD;AAAA,kBACF,WACE,WAAW,YAAY,SACvB,WAAW,WAAW,SACtB,WAAW,SAAS,OACpB;AACA,4BAAQ,OAAO,IAAI,gBAAI,WAAW,IAAI,gBAAI,GAAG,CAAC,EAAE,UAAU;AAAA,sBACxD,OAAO,CAAC,WAAe,qBAAQ,EAAE;AAAA,sBACjC,QAAQ,CAAC,WAAO,mBAAM,WAAW,KAAK,EAAE,CAAC;AAAA,oBAC3C,CAAC;AACD;AAAA,kBACF,WACE,WAAW,YAAY,SACvB,WAAW,WAAW,YACtB,WAAW,SAAS,UACpB;AACA,4BAAQ,WAAW,cAAc,CAAC,GAAG;AAAA,sBACnC,KAAK;AACH,gCAAQ,OAAO,IAAI,gBAAI,OAAO,gBAAI,GAAG,CAAC;AACtC;AAAA,sBACF,KAAK;AACH,gCAAQ,OAAO,IAAI,gBAAI,OAAO,gBAAI,IAAI,CAAC;AACvC;AAAA,sBACF,KAAK;AACH,gCAAQ,OAAO,IAAI,gBAAI,OAAO,gBAAI,IAAI,CAAC;AACvC;AAAA,sBACF,KAAK;AACH,gCAAQ,OAAO,IAAI,gBAAI,OAAO,gBAAI,IAAI,CAAC;AACvC;AAAA,sBACF,KAAK;AACH,gCAAQ,OAAO,IAAI,gBAAI,OAAO,gBAAI,KAAK,CAAC;AACxC;AAAA,sBACF,KAAK;AACH,gCAAQ,OAAO,IAAI,gBAAI,OAAO,gBAAI,KAAK,CAAC;AACxC;AAAA,sBACF,KAAK;AACH,gCAAQ,OAAO,IAAI,gBAAI,OAAO,gBAAI,KAAK,CAAC;AACxC;AAAA,sBACF,KAAK;AACH,gCAAQ,OAAO,IAAI,gBAAI;AAAA,0BACrB,gBAAI,MAAM,EAAE,EAAE,UAAU;AAAA;AAAA,4BAEtB,OAAO,CAAC,YAAgB,qBAAQ,GAAG;AAAA,4BACnC,QAAQ,CAAC,YAAQ,mBAAM,GAAG;AAAA,0BAC5B,CAAC;AAAA,wBACH;AACA;AAAA,sBACF;AAAA,oBAEF;AAAA,kBACF,OAAO;AACL,wBACE,KAAK,OACH,GAAG,WAAW,OAAO,KAAK,WAAW,MAAM,KAAK,WAAW,IAAI,EACjE,MAAM,QACN;AACA,iCAAW;AAAA,oBACb,OAAO;AACL,8BAAQ,OAAO,IACb,KAAK,OACH,GAAG,WAAW,OAAO,KAAK,WAAW,MAAM,KAAK,WAAW,IAAI,EACjE;AACF;AAAA,oBACF;AAAA,kBACF;AACA;AAAA,gBACF,KAAK;AACH,sBAAI,OAAO,UAAU,UAAU;AAC7B,4BAAQ,OAAO;AAAA,sBACb,KAAK;AACH,gCAAQ,OAAO,IAAI,gBAAI,OAAO,gBAAI,GAAG,CAAC;AACtC;AAAA,sBACF,KAAK;AACH,gCAAQ,OAAO,IAAI,gBAAI,OAAO,gBAAI,IAAI,CAAC;AACvC;AAAA,sBACF,KAAK;AACH,gCAAQ,OAAO,IAAI,gBAAI,OAAO,gBAAI,IAAI,CAAC;AACvC;AAAA,sBACF,KAAK;AACH,gCAAQ,OAAO,IAAI,gBAAI,OAAO,gBAAI,IAAI,CAAC;AACvC;AAAA,sBACF,KAAK;AACH,gCAAQ,OAAO,IAAI,gBAAI,OAAO,gBAAI,KAAK,CAAC;AACxC;AAAA,sBACF,KAAK;AACH,gCAAQ,OAAO,IAAI,gBAAI,OAAO,gBAAI,KAAK,CAAC;AACxC;AAAA,sBACF,KAAK;AACH,gCAAQ,OAAO,IAAI,gBAAI,OAAO,gBAAI,KAAK,CAAC;AACxC;AAAA,sBACF,KAAK;AACH,gCAAQ,OAAO,IAAI,gBAAI;AAAA,0BACrB,gBAAI,MAAM,EAAE,EAAE,UAAU;AAAA;AAAA,4BAEtB,OAAO,CAAC,YAAgB,qBAAQ,GAAG;AAAA,4BACnC,QAAQ,CAAC,YAAQ,mBAAM,GAAG;AAAA,0BAC5B,CAAC;AAAA,wBACH;AACA;AAAA,sBACF;AAAA,oBAEF;AAAA,kBACF;AACA,sBAAI,OAAO,UAAU,UAAU;AAC7B,0BAAM,cAAc,mBAAK,iBAAL,WAAqB;AACzC,wBAAI,YAAY;AAChB,6BAAS,IAAI,GAAG,IAAI,aAAa,KAAK;AACpC,kCAAY,UAAU;AAAA,oBACxB;AAEA,wBAAI,YAAY,WAAW;AACzB,4BAAMC,cAAa,UAAU;AAC7B,4BAAM,WAAW,GAAGA,YAAW,OAAO,KAAKA,YAAW,MAAM,KAAKA,YAAW,IAAI;AAEhF,0BAAI,UAAU,mBAAK,SAAQ,QAAQ;AACnC,0BAAI,CAAC,SAAS;AACZ,mCAAW;AACX;AAAA,sBACF;AACA,0BAAI,WAAW;AACf,+BAAS,IAAI,GAAG,KAAK,aAAa,KAAK;AACrC,mCAAW,gBAAI,OAAO,QAAQ;AAAA,sBAChC;AAEA,8BAAQ,OAAO,IAAI;AACnB;AAAA,oBACF;AAAA,kBACF;AACA;AAAA,gBACF,KAAK;AACH,0BAAQ,OAAO,IAAI,gBAAI,KAAK;AAC5B;AAAA,gBAKF;AACE,wBAAM,IAAI,MAAM,kBAAkB;AAAA,cACtC;AAAA,YACF;AACA;AAAA,UACF,KAAK;AACH,oBAAQ,SAAS;AAAA,cACf,KAAK;AACH,wBAAQ,OAAO,IAAI,gBAAI,GAAG;AAC1B;AAAA,cACF,KAAK;AACH,wBAAQ,OAAO,IAAI,gBAAI,IAAI;AAC3B;AAAA,cACF,KAAK;AACH,wBAAQ,OAAO,IAAI,gBAAI,IAAI;AAC3B;AAAA,cACF,KAAK;AACH,wBAAQ,OAAO,IAAI,gBAAI,IAAI;AAC3B;AAAA,cACF,KAAK;AACH,wBAAQ,OAAO,IAAI,gBAAI,KAAK;AAC5B;AAAA,cACF,KAAK;AACH,wBAAQ,OAAO,IAAI,gBAAI,KAAK;AAC5B;AAAA,cACF,KAAK;AACH,wBAAQ,OAAO,IAAI,gBAAI,KAAK;AAC5B;AAAA,cACF,KAAK;AACH,wBAAQ,OAAO,IAAI,gBAAI,MAAM,EAAE,EAAE,UAAU;AAAA;AAAA,kBAEzC,OAAO,CAAC,YAAgB,qBAAQ,GAAG;AAAA,kBACnC,QAAQ,CAAC,YAAQ,mBAAM,GAAG;AAAA,gBAC5B,CAAC;AACD;AAAA,cACF;AACE;AAAA,YACJ;AAAA,UACF;AACE,kBAAM,IAAI,MAAM,kBAAkB;AAAA,QACtC;AAAA,MACF,CAAC;AAED,aAAO;AAAA,QACL,KAAK,gBAAI,OAAO,QAAQ,YAAY,OAAO;AAAA,QAC3C;AAAA,MACF;AAAA,IACF;AAEA,iCAAW,CAAC,YAA0B;AACpC,UAAI,WAAW;AACf,YAAM,cAAwD,CAAC;AAa/D,aAAO,QAAQ,QAAQ,WAAW,QAAQ,EAAE,QAAQ,CAAC,CAAC,MAAM,IAAI,MAAM;AACpE,YAAI,KAAK,SAAS,GAAG;AACnB,iBAAO,QAAQ,IAAI,EAAE,QAAQ,CAAC,CAAC,OAAO,KAAK,MAAM;AAC/C,kBAAM,UAAiC,MAAM;AAC7C,kBAAM,UAAU,MAAM;AACtB,oBAAQ,OAAO,SAAS;AAAA,cACtB,KAAK;AACH,2BAAW,CAAC,KAAKC,MAAK,KAAK,OAAO,QAAQ,OAAO,GAAG;AAClD,0BAAQ,KAAK;AAAA,oBACX,KAAK;AACH,4BAAM,aAAaA;AAMnB,0BACE,WAAW,YAAY,SACvB,WAAW,WAAW,WACtB,WAAW,SAAS,UACpB;AACA,oCAAY,OAAO,IAAI,gBAAI,OAAO;AAClC;AAAA,sBACF,WACE,WAAW,YAAY,SACvB,WAAW,WAAW,YACtB,WAAW,SAAS,OACpB;AACA,oCAAY,OAAO,IAAI,gBACpB,WAAW,IAAI,gBAAI,GAAG,CAAC,EACvB,UAAU;AAAA,0BACT,OAAO,CAAC,WAAe,qBAAQ,EAAE;AAAA,0BACjC,QAAQ,CAAC,WAAO,mBAAM,WAAW,KAAK,EAAE,CAAC;AAAA,wBAC3C,CAAC;AACH;AAAA,sBACF,WACE,WAAW,YAAY,SACvB,WAAW,WAAW,YACtB,WAAW,SAAS,MACpB;AACA,oCAAY,OAAO,IAAI,gBACpB,WAAW,IAAI,gBAAI,GAAG,CAAC,EACvB,UAAU;AAAA,0BACT,OAAO,CAAC,WAAe,qBAAQ,EAAE;AAAA,0BACjC,QAAQ,CAAC,WAAO,mBAAM,WAAW,KAAK,EAAE,CAAC;AAAA,wBAC3C,CAAC;AACH;AAAA,sBACF,WACE,WAAW,YAAY,SACvB,WAAW,WAAW,SACtB,WAAW,SAAS,OACpB;AACA,oCAAY,OAAO,IAAI,gBACpB,WAAW,IAAI,gBAAI,GAAG,CAAC,EACvB,UAAU;AAAA,0BACT,OAAO,CAAC,WAAe,qBAAQ,EAAE;AAAA,0BACjC,QAAQ,CAAC,WAAO,mBAAM,WAAW,KAAK,EAAE,CAAC;AAAA,wBAC3C,CAAC;AACH;AAAA,sBACF,WACE,WAAW,YAAY,SACvB,WAAW,WAAW,YACtB,WAAW,SAAS,UACpB;AACA,gCAAQ,WAAW,cAAc,CAAC,GAAG;AAAA,0BACnC,KAAK;AACH,wCAAY,OAAO,IAAI,gBAAI,OAAO,gBAAI,GAAG,CAAC;AAC1C;AAAA,0BACF,KAAK;AACH,wCAAY,OAAO,IAAI,gBAAI,OAAO,gBAAI,IAAI,CAAC;AAC3C;AAAA,0BACF,KAAK;AACH,wCAAY,OAAO,IAAI,gBAAI,OAAO,gBAAI,IAAI,CAAC;AAC3C;AAAA,0BACF,KAAK;AACH,wCAAY,OAAO,IAAI,gBAAI,OAAO,gBAAI,IAAI,CAAC;AAC3C;AAAA,0BACF,KAAK;AACH,wCAAY,OAAO,IAAI,gBAAI,OAAO,gBAAI,KAAK,CAAC;AAC5C;AAAA,0BACF,KAAK;AACH,wCAAY,OAAO,IAAI,gBAAI,OAAO,gBAAI,KAAK,CAAC;AAC5C;AAAA,0BACF,KAAK;AACH,wCAAY,OAAO,IAAI,gBAAI,OAAO,gBAAI,KAAK,CAAC;AAC5C;AAAA,0BACF,KAAK;AACH,wCAAY,OAAO,IAAI,gBAAI;AAAA,8BACzB,gBAAI,MAAM,EAAE,EAAE,UAAU;AAAA;AAAA,gCAEtB,OAAO,CAAC,YAAgB,qBAAQ,GAAG;AAAA,gCACnC,QAAQ,CAAC,YAAQ,mBAAM,GAAG;AAAA,8BAC5B,CAAC;AAAA,4BACH;AACA;AAAA,0BACF;AAAA,wBAEF;AAAA,sBACF,OAAO;AACL,4BACE,KAAK,OACH,GAAG,WAAW,OAAO,KAAK,WAAW,MAAM,KAAK,WAAW,IAAI,EACjE,MAAM,QACN;AACA,qCAAW;AAAA,wBACb,OAAO;AACL,sCAAY,OAAO,IACjB,KAAK,OACH,GAAG,WAAW,OAAO,KAAK,WAAW,MAAM,KAAK,WAAW,IAAI,EACjE;AACF;AAAA,wBACF;AAAA,sBACF;AACA;AAAA,oBACF,KAAK;AACH,0BAAI,OAAOA,WAAU,UAAU;AAC7B,gCAAQA,QAAO;AAAA,0BACb,KAAK;AACH,wCAAY,OAAO,IAAI,gBAAI,OAAO,gBAAI,GAAG,CAAC;AAC1C;AAAA,0BACF,KAAK;AACH,wCAAY,OAAO,IAAI,gBAAI,OAAO,gBAAI,IAAI,CAAC;AAC3C;AAAA,0BACF,KAAK;AACH,wCAAY,OAAO,IAAI,gBAAI,OAAO,gBAAI,IAAI,CAAC;AAC3C;AAAA,0BACF,KAAK;AACH,wCAAY,OAAO,IAAI,gBAAI,OAAO,gBAAI,IAAI,CAAC;AAC3C;AAAA,0BACF,KAAK;AACH,wCAAY,OAAO,IAAI,gBAAI,OAAO,gBAAI,KAAK,CAAC;AAC5C;AAAA,0BACF,KAAK;AACH,wCAAY,OAAO,IAAI,gBAAI,OAAO,gBAAI,KAAK,CAAC;AAC5C;AAAA,0BACF,KAAK;AACH,wCAAY,OAAO,IAAI,gBAAI,OAAO,gBAAI,KAAK,CAAC;AAC5C;AAAA,0BACF,KAAK;AACH,wCAAY,OAAO,IAAI,gBAAI;AAAA,8BACzB,gBAAI,MAAM,EAAE,EAAE,UAAU;AAAA;AAAA,gCAEtB,OAAO,CAAC,YAAgB,qBAAQ,GAAG;AAAA,gCACnC,QAAQ,CAAC,YAAQ,mBAAM,GAAG;AAAA,8BAC5B,CAAC;AAAA,4BACH;AACA;AAAA,0BACF;AAAA,wBAEF;AAAA,sBACF;AAAA,oBAGF,KAAK;AACH,kCAAY,OAAO,IAAI,gBAAI,KAAK;AAChC;AAAA,oBAKF;AACE,4BAAM,IAAI,MAAM,kBAAkB;AAAA,kBACtC;AAAA,gBACF;AACA;AAAA,cACF,KAAK;AACH,wBAAQ,SAAS;AAAA,kBACf,KAAK;AACH,gCAAY,OAAO,IAAI,gBAAI,GAAG;AAC9B;AAAA,kBACF,KAAK;AACH,gCAAY,OAAO,IAAI,gBAAI,IAAI;AAC/B;AAAA,kBACF,KAAK;AACH,gCAAY,OAAO,IAAI,gBAAI,IAAI;AAC/B;AAAA,kBACF,KAAK;AACH,gCAAY,OAAO,IAAI,gBAAI,IAAI;AAC/B;AAAA,kBACF,KAAK;AACH,gCAAY,OAAO,IAAI,gBAAI,KAAK;AAChC;AAAA,kBACF,KAAK;AACH,gCAAY,OAAO,IAAI,gBAAI,KAAK;AAChC;AAAA,kBACF,KAAK;AACH,gCAAY,OAAO,IAAI,gBAAI,KAAK;AAChC;AAAA,kBACF,KAAK;AACH,gCAAY,OAAO,IAAI,gBAAI,MAAM,EAAE,EAAE,UAAU;AAAA;AAAA,sBAE7C,OAAO,CAAC,YAAgB,qBAAQ,GAAG;AAAA,sBACnC,QAAQ,CAAC,YAAQ,mBAAM,GAAG;AAAA,oBAC5B,CAAC;AACD;AAAA,kBACF;AACE;AAAA,gBACJ;AAAA,cACF;AACE,sBAAM,IAAI,MAAM,kBAAkB;AAAA,YACtC;AAAA,UACF,CAAC;AAAA,QACH,OAAO;AACL,sBAAY,IAAI,IAAI;AAAA,QACtB;AAAA,MACF,CAAC;AACD,aAAO;AAAA,QACL,KAAK,gBAAI,KAAK,QAAQ,YAAY,WAAW;AAAA,QAC7C;AAAA,MACF;AAAA,IACF;AAhoBE,kBAAc,eAAe;AAE7B,UAAM,gBAAgB,cAAc,WAAW;AAG/C,SAAK,iBAAiB,IAAI,kBAAkB,EAAE,WAAW,UAAU,CAAC;AAEpE,mBAAe,gBAAgB,CAAC,cAAc,QAAQ;AACtD,SAAK,gBAAgB,IAAI,cAAc,cAAc,WAAW;AAEhE,iBAAa,cAAc,cAAc;AACzC,mBAAe,gBAAgB,uBAAuB,UAAU;AAChE,SAAK,OAAO,IAAI,KAAK,YAAY,cAAc,aAAa,cAAc;AAE1E,SAAK,mBAAmB,IAAI,iBAAiB,KAAK,IAAI;AAEtD,SAAK,YAAY,YAAY,mBAAmB,SAAS,IAAI;AAC7D,QAAI,aAAa,QAAW;AAC1B,WAAK,WAAW;AAEhB,YAAM,aAAa;AACnB,UAAI,UAAU;AACd,UAAI,kBAAkB;AACtB,aAAO,oBAAoB,QAAQ,WAAW,YAAY;AACxD,YAAI,WAAW;AACf,eAAO,OAAO,QAAoC,EAAE;AAAA,UAClD,CAAC,gBAAgB;AACf,kBAAM,OAAO;AACb,kBAAM,aAAa,KAAK;AACxB,kBAAM,cAAc,GAAG,SAAS,KAAK,UAAU;AAE/C,gBAAI,KAAK,OAAO;AACd,qBAAO,QAAQ,KAAK,KAAK,EAAE,QAAQ,CAAC,CAAC,UAAU,QAAQ,MAAM;AAC3D,sBAAM,WAAW,GAAG,WAAW,KAAK,QAAQ;AAC5C,sBAAM,UAAwB;AAAA,kBAC5B;AAAA,kBACA,YAAY;AAAA,kBACZ,YAAY;AAAA,gBACd;AAIA,oBAAI,SAAS,mBAAK,UAAL,WAAc;AAC3B,oBAAI,OAAO,aAAa,MAAM;AAC5B,6BAAW,OAAO;AAAA,gBACpB;AACA,oBAAI,mBAAK,SAAQ,QAAQ,MAAM,QAAW;AACxC,qCAAK,SAAQ,QAAQ,IAAI,OAAO;AAChC,qCAAK,SAAQ,UAAU,QAAQ,GAAG,IAAI,gBAAI,OAAO,OAAO,GAAG;AAC3D,qCAAK,SAAQ,iBAAiB,QAAQ,IAAI,IAAI,gBAAI;AAAA,oBAChD,gBAAI,OAAO,OAAO,GAAG;AAAA,kBACvB;AACA,qCAAK,SAAQ,uBAAuB,QAAQ,GAAG,IAAI,gBAAI;AAAA,oBACrD,OAAO;AAAA,kBACT;AAAA,gBACF;AAAA,cACF,CAAC;AAAA,YACH;AAEA,mBAAO,QAAQ,KAAK,OAAO,EAAE,QAAQ,CAAC,CAAC,YAAY,UAAU,MAAM;AACjE,oBAAM,WAAW,GAAG,WAAW,KAAK,UAAU;AAC9C,oBAAM,UAA0B;AAAA,gBAC9B;AAAA,gBACA;AAAA,gBACA;AAAA,cACF;AAEA,kBAAI,SAAS,mBAAK,MAAL,WAAU;AACvB,kBAAI,OAAO,aAAa,MAAM;AAC5B,2BAAW,OAAO;AAAA,cACpB;AAEA,iCAAK,SAAQ,QAAQ,IAAI,OAAO;AAEhC,iCAAK,SAAQ,UAAU,QAAQ,GAAG,IAAI,gBAAI,OAAO,OAAO,GAAG;AAC3D,iCAAK,SAAQ,uBAAuB,QAAQ,GAAG,IAAI,gBAAI;AAAA,gBACrD,OAAO;AAAA,cACT;AAAA,YACF,CAAC;AAED,mBAAO,QAAQ,KAAK,gBAAgB,EAAE;AAAA,cACpC,CAAC,CAAC,UAAU,SAAS,MAAM;AACzB,sBAAM,OAAO;AACb,qBAAK,aAAa;AAClB,qBAAK,WAAW;AAChB,oBAAI,YAAY,mBAAK,QAAO,UAAU,CAAC,GAAG;AACxC,qCAAK,QAAO,UAAU,IAAI,CAAC;AAAA,gBAC7B;AACA,oBAAI,YAAY,mBAAK,QAAO,UAAU,EAAE,QAAQ,CAAC,GAAG;AAClD,qCAAK,QAAO,UAAU,EAAE,QAAQ,IAAI;AAAA,oBAClC;AAAA,oBACA,CAAC,IAAI,GAAG,eAAe,UACrB,mBAAK,OAAL,WAAW,MAAM,IAAI,GAAG,eAAe;AAAA,kBAC3C;AAAA,gBACF;AAEA,oBAAI,YAAY,mBAAK,KAAI,UAAU,CAAC,GAAG;AACrC,qCAAK,KAAI,UAAU,IAAI,CAAC;AAAA,gBAC1B;AACA,oBAAI,YAAY,mBAAK,KAAI,UAAU,EAAE,QAAQ,CAAC,GAAG;AAC/C,qCAAK,KAAI,UAAU,EAAE,QAAQ,IAAI;AAAA,oBAC/B;AAAA,oBACA,CAAC,IAAI,GAAG,eAAe,UACrB,mBAAK,OAAL,WAAW,MAAM,IAAI,GAAG,eAAe;AAAA,kBAC3C;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,0BAAkB;AAClB;AAAA,MACF;AAAA,IACF;AACA,SAAK,kBAAkB,IAAI,mBAAmB;AAAA,MAC5C;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,IAAW,QAA4B;AACrC,WAAO,mBAAK;AAAA,EACd;AAAA,EAEA,IAAW,KAAsB;AAC/B,WAAO,mBAAK;AAAA,EACd;AAAA,EAEA,IAAW,SAA0B;AACnC,WAAO,mBAAK;AAAA,EACd;AAAA,EA+fA,KAAK,WAA8B;AACjC,QAAI,eAAe,CAAC;AAEpB,QAAI,UAAU,QAAQ,OAAO,WAAW,WAAW;AACjD,YAAM,aAAa,UAAU,QAAS,CAAC,EAAE;AAEzC,iBAAW,OAAO,YAAY;AAC5B,YAAI,YAAY,IAAI,CAAC;AACrB,YAAI,WAAW,IAAI,CAAC;AACpB,cAAM,QAAQ,WAAW,KAAK,SAAS;AAEvC,cAAM,oBAAoB,SAAS;AAAA,UACjC;AAAA,QACF;AACA,YAAI,mBAAmB;AACrB,gBAAM,YAAY,kBAAkB,CAAC;AACrC,cAAI,mBAAK,SAAQ,SAAS,GAAG;AAC3B,kBAAM,kBAAkB,gBAAI,OAAO,gBAAgB;AAAA,cACjD,UAAU,gBAAI;AAAA,gBACZ,gBAAI,OAAO,SAAS;AAAA,kBAClB,OAAO,mBAAK,SAAQ,SAAS;AAAA,gBAC/B,CAAC;AAAA,cACH;AAAA,YACF,CAAC;AACD,yBAAa,KAAK,gBAAgB,MAAM,KAAK,CAAC;AAC9C;AAAA,UACF;AAAA,QACF;AAEA,cAAM,kBAAkB,SAAS;AAAA,UAC/B;AAAA,QACF;AACA,YAAI,iBAAiB;AACnB,gBAAM,YAAY,gBAAgB,CAAC;AACnC,gBAAM,CAAC,SAAS,SAAS,IAAI,UAC1B,MAAM,GAAG,EACT,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC;AAC5B,cAAI,mBAAK,SAAQ,OAAO,KAAK,mBAAK,SAAQ,SAAS,GAAG;AACpD,kBAAM,gBAAgB,gBAAI,OAAO,cAAc;AAAA,cAC7C,UAAU,gBAAI;AAAA,gBACZ,gBAAI,OAAO,SAAS;AAAA,kBAClB,KAAK,mBAAK,SAAQ,OAAO;AAAA,kBACzB,OAAO,mBAAK,SAAQ,SAAS;AAAA,gBAC/B,CAAC;AAAA,cACH;AAAA,YACF,CAAC;AACD,yBAAa,KAAK,cAAc,MAAM,KAAK,CAAC;AAC5C;AAAA,UACF;AAAA,QACF;AAEA,cAAM,wBAAwB,SAAS;AAAA,UACrC;AAAA,QACF;AACA,YAAI,uBAAuB;AACzB,gBAAM,YAAY,sBAAsB,CAAC;AACzC,gBAAM,CAAC,MAAM,MAAM,SAAS,IAAI,UAC7B,MAAM,GAAG,EACT,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC;AAC5B,cACE,mBAAK,SAAQ,IAAI,KACjB,mBAAK,SAAQ,IAAI,KACjB,mBAAK,SAAQ,SAAS,GACtB;AACA,kBAAM,sBAAsB,gBAAI,OAAO,oBAAoB;AAAA,cACzD,UAAU,gBAAI;AAAA,gBACZ,gBAAI,OAAO,SAAS;AAAA,kBAClB,MAAM,mBAAK,SAAQ,IAAI;AAAA,kBACvB,MAAM,mBAAK,SAAQ,IAAI;AAAA,kBACvB,OAAO,mBAAK,SAAQ,SAAS;AAAA,gBAC/B,CAAC;AAAA,cACH;AAAA,YACF,CAAC;AACD,yBAAa,KAAK,oBAAoB,MAAM,KAAK,CAAC;AAClD;AAAA,UACF;AAAA,QACF;AAEA,YAAI,mBAAK,SAAQ,QAAQ,GAAG;AAK1B,uBAAa,KAAK,mBAAK,SAAQ,QAAQ,EAAE,MAAM,KAAK,CAAC;AACrD;AAAA,QACF;AAEA,cAAM,eAAe,SAAS,MAAM,iBAAiB;AACrD,YAAI,cAAc;AAChB,gBAAM,CAAC,GAAG,aAAa,aAAa,IAAI;AACxC,gBAAM,aAAa,GAAG,WAAW;AAEjC,cAAI,mBAAK,SAAQ,UAAU,GAAG;AAC5B,yBAAa,KAAK,mBAAK,SAAQ,UAAU,EAAE,MAAM,KAAK,CAAC;AACvD;AAAA,UACF;AAAA,QACF;AAEA,gBAAQ;AAAA,UACN;AAAA,QACF;AACA,gBAAQ,IAAI,qPAAuD;AACnE,gBAAQ,IAAI,wCAAmC,QAAQ,UAAU;AACjE,YAAI,cAAc;AAChB,kBAAQ;AAAA,YACN,qDAAgD,aAAa,CAAC,CAAC;AAAA,UACjE;AAAA,QACF;AACA,gBAAQ,IAAI,0CAAqC;AACjD,eAAO,KAAK,mBAAK,QAAO,EAAE,QAAQ,CAAC,SAAS;AAC1C,kBAAQ,IAAI,2BAAsB,IAAI,EAAE;AAAA,QAC1C,CAAC;AACD,gBAAQ,IAAI,oDAA6C;AACzD,gBAAQ;AAAA,UACN;AAAA,QACF;AACA,gBAAQ;AAAA,UACN,2BAA2B,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,QACrC;AACA,gBAAQ,IAAI,uPAAyD;AACrE,cAAM,IAAI,MAAM,qBAAqB,QAAQ,EAAE;AAAA,MACjD;AACA,aAAO;AAAA,IACT,OAAO;AACL,YAAM,IAAI,yBAAyB,SAAS;AAAA,IAC9C;AAAA,EACF;AAAA,EAEA,MAAM,MAAM;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAI+B;AAC7B,UAAM,aAAa;AACnB,UAAM,eAAe,OAAO,MAAM;AAElC,QAAI,gBAAgB;AACpB,QAAI;AACF,sBAAiB,MAAM,KAAK,MAAM,UAAU,EAAE,YAAY,EAAE;AAAA,QAC1D;AAAA,QACA;AAAA,MACF,CAAC;AAED,UAAI,cAAc,QAAQ,OAAO,WAAW,WAAW;AACrD,eAAO;AAAA,MACT;AAAA,IACF,QAAQ;AACN,aAAO;AAAA,IACT;AACA,WAAO,KAAK,KAAK,aAAa;AAAA,EAChC;AAAA,EAEA,MAAM,WAAW;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAK+B;AAC7B,UAAM,KAAK,IAAI,iCAAY;AAC3B,UAAM,eAAe,GAAG,OAAO,QAAQ;AAEvC,UAAM,oBAAoB,YAAY,MAAM,sBAAsB;AAClE,UAAM,kBAAkB,YAAY,MAAM,4BAA4B;AACtE,UAAM,wBAAwB,YAAY;AAAA,MACxC;AAAA,IACF;AAEA,QAAI,kBAAgE;AAAA,MAClE;AAAA,IACF;AAEA,QAAI,mBAAmB;AAErB,UAAI,OAAO,SAAS,GAAG;AACrB,gBAAQ;AAAA,UACN;AAAA,QACF;AAAA,MACF;AAAA,IACF,WAAW,iBAAiB;AAE1B,UAAI,OAAO,WAAW,GAAG;AACvB,cAAM,IAAI,MAAM,+CAA+C;AAAA,MACjE;AACA,YAAM,UAAU,gBAAgB,CAAC,EAAE,KAAK;AACxC,sBAAgB,KAAK,sBAAK,8CAAL,WAA0B,IAAI,SAAS,OAAO,CAAC,EAAE;AAAA,IACxE,WAAW,uBAAuB;AAEhC,UAAI,OAAO,WAAW,GAAG;AACvB,cAAM,IAAI,MAAM,sDAAsD;AAAA,MACxE;AACA,YAAM,WAAW,sBAAsB,CAAC,EAAE,KAAK;AAC/C,YAAM,WAAW,sBAAsB,CAAC,EAAE,KAAK;AAC/C,sBAAgB,KAAK,sBAAK,8CAAL,WAA0B,IAAI,UAAU,OAAO,CAAC,EAAE;AACvE,sBAAgB,KAAK,sBAAK,8CAAL,WAA0B,IAAI,UAAU,OAAO,CAAC,EAAE;AAAA,IACzE,OAAO;AACL,YAAM,IAAI;AAAA,QACR,yBAAyB,WAAW;AAAA,MACtC;AAAA,IACF;AACA,WAAO,KAAK,MAAM;AAAA,MAChB;AAAA,MACA;AAAA,MACA,QAAQ;AAAA,IACV,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,WAAW;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAUwC;AACtC,WAAO,MAAM,KAAK,iBAAiB,WAAW;AAAA,MAC5C;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,UACJ,OACA,YACoB;AACpB,WAAO,KAAK,iBAAiB,UAAU,OAAO,UAAU;AAAA,EAC1D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmDA,UAAU,kBAAqC;AAC7C,WAAO,KAAK,eAAe,WAAW,gBAAgB;AAAA,EACxD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,cAAc,kBAAoC;AAChD,SAAK,eAAe,cAAc,gBAAgB;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,WAAW,kBAAqC;AAC9C,WAAO,KAAK,eAAe,WAAW,gBAAgB;AAAA,EACxD;AAAA,EAEA,iBAAiB;AACf,WAAO,KAAK,eAAe;AAAA,EAC7B;AAAA,EAEA,eAAe;AACb,WAAO,KAAK,gBAAgB;AAAA,EAC9B;AAAA,EAEA,cAAc;AACZ,WAAO,KAAK,gBAAgB;AAAA,EAC9B;AAAA,EAEA,aAAa;AACX,WAAO,KAAK,cAAc;AAAA,EAC5B;AAAA,EAEA,mBAAkC;AAChC,WAAO,cAAc,KAAK,WAAW,CAAC;AAAA,EACxC;AAAA,EAEA,iBAAiB,QAAgB;AAC/B,WAAO,KAAK,iBAAiB,EAAE,WAAW,QAAQ,WAAW,MAAM;AAAA,EACrE;AAAA,EAEA,sBAAsB,SAAiB;AACrC,WAAO,KAAK,iBAAiB,EAAE,gBAAgB,QAAQ,YAAY,OAAO;AAAA,EAC5E;AAAA,EAEA,iBAAiB;AACf,WAAO,KAAK,iBAAiB,EAAE;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,cACJ,SACA,SACA,kBACA;AACA,QAAI,YAAY,QAAW;AACzB,gBAAU,KAAK,eAAe,WAAW,gBAAgB;AAAA,IAC3D;AACA,QAAI,YAAY,QAAW;AACzB,gBAAU,KAAK,WAAW;AAAA,IAG5B;AAEA,WAAO,KAAK,cAAc,cAAc,SAAS,OAAO;AAAA,EAC1D;AAAA,EAEA,MAAM,WAAW,UAAmB,kBAAqC;AACvE,UAAM,QAAQ,KAAK,eAAe,WAAW,gBAAgB;AAC7D,WAAO,KAAK,cAAc,cAAc,WAAW,EAAE,OAAO,SAAS,CAAC;AAAA,EACxE;AAAA,EAEA,MAAM,UACJ,gBACA,UACA,kBACA;AACA,QAAI,mBAAmB,QAAW;AAChC,uBAAiB,KAAK,eAAe,WAAW,gBAAgB;AAAA,IAClE;AACA,UAAM,QAAQ;AACd,WAAO,KAAK,cAAc,cAAc,WAAW,EAAE,OAAO,SAAS,CAAC;AAAA,EACxE;AAAA,EAEA,SAAS;AACP,WAAO,KAAK,cAAc;AAAA,EAC5B;AAAA,EAEA,gBAAgB;AACd,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAM,UAAU,UAAkB;AAChC,WAAO,KAAK,cAAc,UAAU,QAAQ;AAAA,EAC9C;AAAA,EAEA,MAAM,WAAW,WAAqB;AACpC,WAAO,KAAK,cAAc,WAAW,SAAS;AAAA,EAChD;AAAA,EAEA,MAAM,QACJ,IACA,kBACA;AACA,QAAI,cAAc,SAAS,cAAc,kCAAa;AACpD,SAAG,UAAU,KAAK,WAAW,gBAAgB,CAAC;AAAA,IAChD;AACA,UAAM,UAAU,cAAc,QAAQ,GAAG,KAAK;AAC9C,UAAM,UACJ,mBAAmB,mCACf,MAAM,QAAQ,MAAM,EAAE,QAAQ,KAAK,OAAO,EAAE,CAAC,IAC7C;AACN,UAAM,UAAU,KAAK,UAAU,gBAAgB;AAC/C,WAAO,MAAM,QAAQ,gBAAgB,OAAO;AAAA,EAC9C;AAAA,EAEA,MAAM,eACJ,IACA,kBACsC;AACtC,UAAM,EAAE,OAAO,UAAU,IAAI,MAAM,KAAK,QAAQ,IAAI,gBAAgB;AACpE,WAAO,KAAK,OAAO,OAAO,SAAS;AAAA,EACrC;AAAA,EAEA,MAAM,OACJ,aACA,WACsC;AACtC,WAAO,KAAK,cAAc,OAAO,aAAa,SAAS;AAAA,EACzD;AAAA,EAEA,MAAM,mBAAmB,QAAgB;AACvC,WAAO,KAAK,cAAc,mBAAmB,EAAE,OAAO,CAAC;AAAA,EACzD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,YACJ,WACA,QACA,kBACA;AACA,UAAM,KAAK,IAAI,MAAM;AACrB,OAAG,YAAY,WAAW,MAAM;AAChC,WAAO,KAAK,eAAe,IAAI,gBAAgB;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,kBACJ,YACA,SACA,kBACA;AACA,UAAM,KAAK,IAAI,MAAM;AACrB,OAAG,kBAAkB,YAAY,OAAO;AACxC,WAAO,KAAK,eAAe,IAAI,gBAAgB;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,mBACJ,YACA,SACA,UACA,kBACA;AACA,UAAM,KAAK,IAAI,MAAM;AACrB,UAAM,QAAQ,KAAK,eAAe,WAAW,gBAAgB;AAC7D,UAAM,cAAc,QAAQ,OAAO,CAAC,GAAG,MAAM,IAAI,GAAG,CAAC;AACrD,UAAM,QAAQ,MAAM,KAAK,cAAc;AAAA,MACrC;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,OAAG;AAAA,MACD,MAAM,IAAI,CAAC,MAAM,EAAE,QAAQ;AAAA,MAC3B;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,WAAO,KAAK,eAAe,IAAI,gBAAgB;AAAA,EACjD;AAAA,EAEA,MAAM,aACJ,WACA,QACA,UACA,kBACA;AACA,WAAO,KAAK;AAAA,MACV,CAAC,SAAS;AAAA,MACV,CAAC,MAAM;AAAA,MACP;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,gBACJ,SACA,WACA,kBACA;AACA,UAAM,KAAK,IAAI,MAAM;AACrB,OAAG,gBAAgB,SAAS,SAAS;AACrC,WAAO,KAAK,eAAe,IAAI,gBAAgB;AAAA,EACjD;AAAA,EAEA,MAAM,SAAS,YAKZ;AACD,UAAM;AAAA,MACJ;AAAA,MACA,WAAW,OAAO,CAAC;AAAA,MACnB,gBAAgB,CAAC;AAAA,MACjB;AAAA,IACF,IAAI;AACJ,UAAM,KAAK,IAAI,MAAM;AACrB,OAAG,SAAS,QAAQ,MAAM,aAAa;AACvC,WAAO,KAAK,eAAe,IAAI,gBAAgB;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,sBACJ,QACA,UACA,OACA;AACA,YAAQ,SAAS,KAAK,eAAe;AACrC,UAAM,QAAQ,MAAM,KAAK,cAAc,YAAY,OAAO,QAAQ,QAAQ;AAC1E,WAAO,MAAM,IAAI,CAAC,MAAM,EAAE,QAAQ;AAAA,EACpC;AAAA,EAEA,MAAM,sBAAsB,YAAoB,OAAgB;AAC9D,YAAQ,SAAS,KAAK,eAAe;AACrC,UAAM,UAAU,MAAM,KAAK,cAAc,cAAc,OAAO,UAAU;AACxE,WAAO,QAAQ,IAAI,CAAC,MAAM,EAAE,QAAQ;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,SACJ,QACA,eACA,kBACA;AACA,UAAM,KAAK,IAAI,MAAM;AACrB,OAAG,SAAS,QAAQ,aAAa;AACjC,WAAO,KAAK,eAAe,IAAI,gBAAgB;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,WACJ,IACA,kBAC4B;AAC5B,UAAM,UAAU,cAAc,QAAQ,GAAG,KAAK;AAC9C,WAAO,KAAK,cAAc,cAAc,2BAA2B;AAAA,MACjE,kBAAkB;AAAA,MAClB,QAAQ,KAAK,WAAW,gBAAgB;AAAA,IAC1C,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,gBAAgB,OAAe,QAAiB,OAAgB;AACpE,UAAM,eAAe,MAAM,KAAK,cAAc;AAAA,MAC5C;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,UAAM,kBAAmC,CAAC;AAE1C,eAAW,UAAU,aAAa,MAAM;AACtC,YAAM,eAAe,MAAM,KAAK,UAAU,OAAO,KAAM,QAAQ;AAC/D,UACE,aAAa,KAAM,MAAM,IAAI,EAAE,CAAC,MAAM,KAAK,gBAAgB,WAC3D;AACA,wBAAgB,KAAK,YAAY;AAAA,MACnC;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,uBAAuB,UAAkB;AAC7C,UAAM,gBAAgB,oBAAoB,QAAQ;AAClD,QAAI,kBAAkB,MAAM;AAC1B,iBAAW;AACX,aAAO;AAAA,IACT,OAAO;AACL,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAM,sBAAsB,OAAqC;AAC/D,UAAM,gBAAY,iBAAAC,SAAU,KAAK;AACjC,UAAM,cAAwB,MAAM,KAAK,SAAS;AAClD,UAAM,QAAQ,WAAW,KAAK,WAAW;AACzC,UAAM,UAAU,gBAAI,MAAM,EAAE,EAAE,UAAU;AAAA;AAAA,MAEtC,OAAO,CAAC,YAAgB,qBAAQ,GAAG;AAAA,MACnC,QAAQ,CAAC,YAAQ,mBAAM,GAAG;AAAA,IAC5B,CAAC;AACD,UAAM,OAAO,QAAQ,MAAM,KAAK;AAChC,WAAO,OAAO;AAAA,EAChB;AAAA,EAEA,MAAM,kCAAkC,UAAkB,MAAc;AACtE,UAAM,gBAAgB,oBAAoB,QAAQ;AAClD,QAAI,kBAAkB,MAAM;AAC1B,iBAAW;AACX,YAAM,QAAQ,OAAO,KAAK,SAAS,MAAM,CAAC,GAAG,KAAK;AAClD,YAAM,YAAY,OAAO,OAAO,CAAC,OAAO,OAAO,KAAK,MAAM,OAAO,CAAC,CAAC;AACnE,aAAO,KAAK,sBAAsB,SAAS;AAAA,IAC7C,OAAO;AACL,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAM,kCAAkC,UAAkB,GAAW;AACnE,UAAM,gBAAgB,oBAAoB,QAAQ;AAClD,QAAI,kBAAkB,MAAM;AAC1B,iBAAW;AACX,YAAM,QAAQ,OAAO,KAAK,SAAS,MAAM,CAAC,GAAG,KAAK;AAElD,YAAM,cAAc,gBAAI,KAAK,EAAE,UAAU,CAAC,EAAE,QAAQ;AAEpD,aAAO,KAAK,sBAAsB,OAAO,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC;AAAA,IACvE,OAAO;AACL,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAM,qBAAqB,GAAW;AACpC,WAAO,mBAAmB,CAAC;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA;AAMF;AA/5CW;AACA;AACA;AAsPT;AAuBA;AAwBA;AAOA;AAoOA;AAmeA;AAAA,yBAAoB,SAAC,IAAiB,SAAiB,OAAY;AAEjE,UAAQ,QAAQ,YAAY,GAAG;AAAA,IAC7B,KAAK;AACH,aAAO,GAAG,KAAK,GAAG,KAAK;AAAA,IACzB,KAAK;AACH,aAAO,GAAG,KAAK,IAAI,KAAK;AAAA,IAC1B,KAAK;AACH,aAAO,GAAG,KAAK,IAAI,KAAK;AAAA,IAC1B,KAAK;AACH,aAAO,GAAG,KAAK,IAAI,KAAK;AAAA,IAC1B,KAAK;AACH,aAAO,GAAG,KAAK,KAAK,KAAK;AAAA,IAC3B,KAAK;AACH,aAAO,GAAG,KAAK,KAAK,KAAK;AAAA,IAC3B,KAAK;AACH,aAAO,GAAG,KAAK,KAAK,KAAK;AAAA,IAC3B,KAAK;AACH,aAAO,GAAG,KAAK,QAAQ,KAAK;AAAA,IAC9B;AAEE,UAAI,QAAQ,SAAS,IAAI,GAAG;AAE1B,eAAO,GAAG,OAAO,KAAK;AAAA,MACxB;AAGA,cAAQ;AAAA,QACN;AAAA,MACF;AACA,cAAQ,IAAI,qPAAuD;AACnE,cAAQ,IAAI,wCAAmC,OAAO,UAAU;AAChE,cAAQ,IAAI,+CAA0C;AACtD,cAAQ,IAAI,uDAAkD;AAC9D,cAAQ,IAAI,8BAAyB;AACrC,cAAQ,IAAI,iCAA4B;AACxC,cAAQ;AAAA,QACN;AAAA,MACF;AACA,cAAQ,IAAI,uPAAyD;AACrE,YAAM,IAAI,MAAM,yBAAyB,OAAO,EAAE;AAAA,EACtD;AACF;;;AmB1qCF,sBAAkC;;;ACClC,IAAAC,kBAAiC;AACjC,IAAAC,gBAAwB;AAEjB,SAAS,2BAA2B,WAA8B;AACvE,MAAI,YAAQ,uBAAQ,SAAS;AAE7B,MAAI,MAAM,WAAW,MAAM,MAAM,WAAW;AAAI,UAAM;AACtD,UAAQ,MAAM,WAAW,KAAK,MAAM,MAAM,CAAC,IAAI;AAC/C,SAAO,IAAI,iCAAiB,KAAK;AACnC;;;ADDO,IAAM,iBAAN,MAAM,gBAAe;AAAA,EAI1B,YAAY,KAA4B,WAAmB;AACzD,SAAK,iBAAiB;AACtB,SAAK,YAAY;AACjB,SAAK,oBAAoB,kCAAkB,eAAe;AAAA,MACxD,WAAW,KAAK;AAAA,MAChB,YAAY,KAAK;AAAA,IACnB,CAAC;AAAA,EACH;AAAA,EAEA,OAAO,yBACL,eACA,SACA,WACgB;AAChB,UAAM,MAAM,cAAc,IAAI,CAAC,cAAc,MAAM;AACjD,aAAO;AAAA,QACL,WAAW,2BAA2B,YAAY;AAAA,QAClD,QAAQ,QAAQ,CAAC;AAAA,MACnB;AAAA,IACF,CAAC;AACD,WAAO,IAAI,gBAAe,KAAK,SAAS;AAAA,EAC1C;AAAA,EAEA,kBAA0B;AACxB,WAAO,KAAK,kBAAkB,aAAa;AAAA,EAC7C;AAAA,EAEA,mBAAmB,MAAwB;AACzC,WAAO,KAAK,kBAAkB,yBAAyB,IAAI;AAAA,EAC7D;AACF;;;AE1CA,IAAAC,iBAA+B;AAK/B,eAAsB,aACpB,aACA,WACA,cACA;AAEA,iBAAe,gBAAgB,KAAC,+BAAe,WAAW,CAAC;AAC3D,QAAM,gBAAgB,IAAI,cAAc,YAAY;AACpD,MAAI,cAAc,QAAW;AAC3B,UAAM,WAAW,MAAM,cAAc;AAAA,MACnC;AAAA,IACF;AAEA,WAAO;AAAA,EACT,OAAO;AACL,YAAQ,MAAM,6BAA6B;AAAA,EAC7C;AACF;","names":["import_bcs","import_transactions","import_bcs","import_ed25519","genMnemonic","import_transactions","import_utils","import_utils","value","import_bcs","WebSocket","structType","value","keccak256","import_ed25519","import_utils","import_client"]}