sshclient-wasm 0.1.2 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.cjs.js","sources":["../lib/transport.ts","../node_modules/.pnpm/@protobufjs+aspromise@1.1.2/node_modules/@protobufjs/aspromise/index.js","../node_modules/.pnpm/@protobufjs+base64@1.1.2/node_modules/@protobufjs/base64/index.js","../node_modules/.pnpm/@protobufjs+eventemitter@1.1.0/node_modules/@protobufjs/eventemitter/index.js","../node_modules/.pnpm/@protobufjs+float@1.0.2/node_modules/@protobufjs/float/index.js","../node_modules/.pnpm/@protobufjs+inquire@1.1.0/node_modules/@protobufjs/inquire/index.js","../node_modules/.pnpm/@protobufjs+utf8@1.1.0/node_modules/@protobufjs/utf8/index.js","../node_modules/.pnpm/@protobufjs+pool@1.1.0/node_modules/@protobufjs/pool/index.js","../node_modules/.pnpm/protobufjs@7.5.4/node_modules/protobufjs/src/util/longbits.js","../node_modules/.pnpm/protobufjs@7.5.4/node_modules/protobufjs/src/util/minimal.js","../node_modules/.pnpm/protobufjs@7.5.4/node_modules/protobufjs/src/writer.js","../node_modules/.pnpm/protobufjs@7.5.4/node_modules/protobufjs/src/writer_buffer.js","../node_modules/.pnpm/protobufjs@7.5.4/node_modules/protobufjs/src/reader.js","../node_modules/.pnpm/protobufjs@7.5.4/node_modules/protobufjs/src/reader_buffer.js","../node_modules/.pnpm/protobufjs@7.5.4/node_modules/protobufjs/src/rpc/service.js","../node_modules/.pnpm/protobufjs@7.5.4/node_modules/protobufjs/src/rpc.js","../node_modules/.pnpm/protobufjs@7.5.4/node_modules/protobufjs/src/roots.js","../node_modules/.pnpm/protobufjs@7.5.4/node_modules/protobufjs/src/index-minimal.js","../node_modules/.pnpm/protobufjs@7.5.4/node_modules/protobufjs/minimal.js","../lib/aws-iot-tunnel/protobuf-messages.js","../lib/aws-iot-tunnel.ts","../lib/index.ts"],"sourcesContent":["export interface Transport {\n id: string;\n connect(): Promise<void>;\n disconnect(): Promise<void>;\n send(data: Uint8Array): Promise<void>;\n onData?: (data: Uint8Array) => void;\n onError?: (error: Error) => void;\n onClose?: () => void;\n}\n\nexport interface TransportCallbacks {\n onWrite?: (data: Uint8Array) => void;\n onClose?: () => void;\n}\n\n/**\n * WebSocketTransport implements Transport over WebSocket\n */\nexport class WebSocketTransport implements Transport {\n public id: string;\n private ws: WebSocket | null = null;\n private url: string;\n private protocols?: string | string[];\n private callbacks: TransportCallbacks = {};\n\n // Callbacks for transport events\n public onData?: (data: Uint8Array) => void;\n public onError?: (error: Error) => void;\n public onClose?: () => void;\n\n constructor(id: string, url: string, protocols?: string | string[]) {\n this.id = id;\n this.url = url;\n this.protocols = protocols;\n }\n\n async connect(): Promise<void> {\n return new Promise((resolve, reject) => {\n try {\n this.ws = new WebSocket(this.url, this.protocols);\n this.ws.binaryType = \"arraybuffer\";\n\n this.ws.onopen = () => {\n resolve();\n };\n\n this.ws.onerror = (event) => {\n const error = new Error(\"WebSocket error\");\n if (this.onError) {\n this.onError(error);\n }\n reject(error);\n };\n\n this.ws.onmessage = (event) => {\n if (event.data instanceof ArrayBuffer) {\n const data = new Uint8Array(event.data);\n if (this.onData) {\n this.onData(data);\n }\n }\n };\n\n this.ws.onclose = () => {\n if (this.onClose) {\n this.onClose();\n }\n };\n } catch (error) {\n reject(error);\n }\n });\n }\n\n async disconnect(): Promise<void> {\n if (this.ws) {\n this.ws.close();\n this.ws = null;\n }\n }\n\n async send(data: Uint8Array): Promise<void> {\n if (!this.ws || this.ws.readyState !== WebSocket.OPEN) {\n throw new Error(\"WebSocket is not connected\");\n }\n this.ws.send(data.buffer);\n }\n\n setCallbacks(callbacks: TransportCallbacks): void {\n this.callbacks = callbacks;\n }\n}\n\n/**\n * CustomTransport allows implementing custom transport mechanisms\n */\nexport class CustomTransport implements Transport {\n public id: string;\n private isConnected = false;\n\n // Callbacks for transport events\n public onData?: (data: Uint8Array) => void;\n public onError?: (error: Error) => void;\n public onClose?: () => void;\n\n // Custom implementation callbacks\n private connectImpl?: () => Promise<void>;\n private disconnectImpl?: () => Promise<void>;\n private sendImpl?: (data: Uint8Array) => Promise<void>;\n\n constructor(\n id: string,\n connectImpl?: () => Promise<void>,\n disconnectImpl?: () => Promise<void>,\n sendImpl?: (data: Uint8Array) => Promise<void>\n ) {\n this.id = id;\n this.connectImpl = connectImpl;\n this.disconnectImpl = disconnectImpl;\n this.sendImpl = sendImpl;\n }\n\n async connect(): Promise<void> {\n if (this.connectImpl) {\n await this.connectImpl();\n }\n this.isConnected = true;\n }\n\n async disconnect(): Promise<void> {\n if (this.disconnectImpl) {\n await this.disconnectImpl();\n }\n this.isConnected = false;\n if (this.onClose) {\n this.onClose();\n }\n }\n\n async send(data: Uint8Array): Promise<void> {\n if (!this.isConnected) {\n throw new Error(\"Transport is not connected\");\n }\n if (this.sendImpl) {\n await this.sendImpl(data);\n }\n }\n\n // Method to inject received data\n injectData(data: Uint8Array): void {\n if (this.onData) {\n this.onData(data);\n }\n }\n}\n\n/**\n * TransportManager manages the bridge between JavaScript transports and WASM\n */\nexport class TransportManager {\n private static instance: TransportManager;\n private transports = new Map<string, Transport>();\n private wasmInstance: any;\n\n private constructor() {}\n\n static getInstance(): TransportManager {\n if (!TransportManager.instance) {\n TransportManager.instance = new TransportManager();\n }\n return TransportManager.instance;\n }\n\n setWasmInstance(wasmInstance: any): void {\n this.wasmInstance = wasmInstance;\n }\n\n async createTransport(transport: Transport): Promise<void> {\n if (!this.wasmInstance) {\n throw new Error(\"WASM instance not set\");\n }\n\n console.log(\"Creating transport with ID:\", transport.id);\n console.log(\"WASM instance available:\", !!this.wasmInstance);\n console.log(\n \"WASM createTransport function:\",\n typeof this.wasmInstance.createTransport\n );\n\n // Register the transport with WASM\n const callbacks = {\n onWrite: (data: Uint8Array) => {\n // Data from WASM to be sent over transport\n transport.send(data).catch((error) => {\n if (transport.onError) {\n transport.onError(error);\n }\n });\n },\n onClose: () => {\n transport.disconnect().catch(console.error);\n },\n };\n\n try {\n const result = this.wasmInstance.createTransport(transport.id, callbacks);\n console.log(\"WASM createTransport result:\", result);\n } catch (error) {\n console.error(\"Error calling WASM createTransport:\", error);\n throw error;\n }\n\n // Set up data reception callback\n transport.onData = (data: Uint8Array) => {\n // Data received from transport, inject into WASM\n this.wasmInstance.injectTransportData(transport.id, data);\n };\n\n this.transports.set(transport.id, transport);\n }\n\n async closeTransport(id: string): Promise<void> {\n const transport = this.transports.get(id);\n if (transport) {\n await transport.disconnect();\n if (this.wasmInstance) {\n this.wasmInstance.closeTransport(id);\n }\n this.transports.delete(id);\n }\n }\n\n getTransport(id: string): Transport | undefined {\n return this.transports.get(id);\n }\n}\n","\"use strict\";\r\nmodule.exports = asPromise;\r\n\r\n/**\r\n * Callback as used by {@link util.asPromise}.\r\n * @typedef asPromiseCallback\r\n * @type {function}\r\n * @param {Error|null} error Error, if any\r\n * @param {...*} params Additional arguments\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Returns a promise from a node-style callback function.\r\n * @memberof util\r\n * @param {asPromiseCallback} fn Function to call\r\n * @param {*} ctx Function context\r\n * @param {...*} params Function arguments\r\n * @returns {Promise<*>} Promisified function\r\n */\r\nfunction asPromise(fn, ctx/*, varargs */) {\r\n var params = new Array(arguments.length - 1),\r\n offset = 0,\r\n index = 2,\r\n pending = true;\r\n while (index < arguments.length)\r\n params[offset++] = arguments[index++];\r\n return new Promise(function executor(resolve, reject) {\r\n params[offset] = function callback(err/*, varargs */) {\r\n if (pending) {\r\n pending = false;\r\n if (err)\r\n reject(err);\r\n else {\r\n var params = new Array(arguments.length - 1),\r\n offset = 0;\r\n while (offset < params.length)\r\n params[offset++] = arguments[offset];\r\n resolve.apply(null, params);\r\n }\r\n }\r\n };\r\n try {\r\n fn.apply(ctx || null, params);\r\n } catch (err) {\r\n if (pending) {\r\n pending = false;\r\n reject(err);\r\n }\r\n }\r\n });\r\n}\r\n","\"use strict\";\r\n\r\n/**\r\n * A minimal base64 implementation for number arrays.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar base64 = exports;\r\n\r\n/**\r\n * Calculates the byte length of a base64 encoded string.\r\n * @param {string} string Base64 encoded string\r\n * @returns {number} Byte length\r\n */\r\nbase64.length = function length(string) {\r\n var p = string.length;\r\n if (!p)\r\n return 0;\r\n var n = 0;\r\n while (--p % 4 > 1 && string.charAt(p) === \"=\")\r\n ++n;\r\n return Math.ceil(string.length * 3) / 4 - n;\r\n};\r\n\r\n// Base64 encoding table\r\nvar b64 = new Array(64);\r\n\r\n// Base64 decoding table\r\nvar s64 = new Array(123);\r\n\r\n// 65..90, 97..122, 48..57, 43, 47\r\nfor (var i = 0; i < 64;)\r\n s64[b64[i] = i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i - 59 | 43] = i++;\r\n\r\n/**\r\n * Encodes a buffer to a base64 encoded string.\r\n * @param {Uint8Array} buffer Source buffer\r\n * @param {number} start Source start\r\n * @param {number} end Source end\r\n * @returns {string} Base64 encoded string\r\n */\r\nbase64.encode = function encode(buffer, start, end) {\r\n var parts = null,\r\n chunk = [];\r\n var i = 0, // output index\r\n j = 0, // goto index\r\n t; // temporary\r\n while (start < end) {\r\n var b = buffer[start++];\r\n switch (j) {\r\n case 0:\r\n chunk[i++] = b64[b >> 2];\r\n t = (b & 3) << 4;\r\n j = 1;\r\n break;\r\n case 1:\r\n chunk[i++] = b64[t | b >> 4];\r\n t = (b & 15) << 2;\r\n j = 2;\r\n break;\r\n case 2:\r\n chunk[i++] = b64[t | b >> 6];\r\n chunk[i++] = b64[b & 63];\r\n j = 0;\r\n break;\r\n }\r\n if (i > 8191) {\r\n (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));\r\n i = 0;\r\n }\r\n }\r\n if (j) {\r\n chunk[i++] = b64[t];\r\n chunk[i++] = 61;\r\n if (j === 1)\r\n chunk[i++] = 61;\r\n }\r\n if (parts) {\r\n if (i)\r\n parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));\r\n return parts.join(\"\");\r\n }\r\n return String.fromCharCode.apply(String, chunk.slice(0, i));\r\n};\r\n\r\nvar invalidEncoding = \"invalid encoding\";\r\n\r\n/**\r\n * Decodes a base64 encoded string to a buffer.\r\n * @param {string} string Source string\r\n * @param {Uint8Array} buffer Destination buffer\r\n * @param {number} offset Destination offset\r\n * @returns {number} Number of bytes written\r\n * @throws {Error} If encoding is invalid\r\n */\r\nbase64.decode = function decode(string, buffer, offset) {\r\n var start = offset;\r\n var j = 0, // goto index\r\n t; // temporary\r\n for (var i = 0; i < string.length;) {\r\n var c = string.charCodeAt(i++);\r\n if (c === 61 && j > 1)\r\n break;\r\n if ((c = s64[c]) === undefined)\r\n throw Error(invalidEncoding);\r\n switch (j) {\r\n case 0:\r\n t = c;\r\n j = 1;\r\n break;\r\n case 1:\r\n buffer[offset++] = t << 2 | (c & 48) >> 4;\r\n t = c;\r\n j = 2;\r\n break;\r\n case 2:\r\n buffer[offset++] = (t & 15) << 4 | (c & 60) >> 2;\r\n t = c;\r\n j = 3;\r\n break;\r\n case 3:\r\n buffer[offset++] = (t & 3) << 6 | c;\r\n j = 0;\r\n break;\r\n }\r\n }\r\n if (j === 1)\r\n throw Error(invalidEncoding);\r\n return offset - start;\r\n};\r\n\r\n/**\r\n * Tests if the specified string appears to be base64 encoded.\r\n * @param {string} string String to test\r\n * @returns {boolean} `true` if probably base64 encoded, otherwise false\r\n */\r\nbase64.test = function test(string) {\r\n return /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(string);\r\n};\r\n","\"use strict\";\r\nmodule.exports = EventEmitter;\r\n\r\n/**\r\n * Constructs a new event emitter instance.\r\n * @classdesc A minimal event emitter.\r\n * @memberof util\r\n * @constructor\r\n */\r\nfunction EventEmitter() {\r\n\r\n /**\r\n * Registered listeners.\r\n * @type {Object.<string,*>}\r\n * @private\r\n */\r\n this._listeners = {};\r\n}\r\n\r\n/**\r\n * Registers an event listener.\r\n * @param {string} evt Event name\r\n * @param {function} fn Listener\r\n * @param {*} [ctx] Listener context\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.on = function on(evt, fn, ctx) {\r\n (this._listeners[evt] || (this._listeners[evt] = [])).push({\r\n fn : fn,\r\n ctx : ctx || this\r\n });\r\n return this;\r\n};\r\n\r\n/**\r\n * Removes an event listener or any matching listeners if arguments are omitted.\r\n * @param {string} [evt] Event name. Removes all listeners if omitted.\r\n * @param {function} [fn] Listener to remove. Removes all listeners of `evt` if omitted.\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.off = function off(evt, fn) {\r\n if (evt === undefined)\r\n this._listeners = {};\r\n else {\r\n if (fn === undefined)\r\n this._listeners[evt] = [];\r\n else {\r\n var listeners = this._listeners[evt];\r\n for (var i = 0; i < listeners.length;)\r\n if (listeners[i].fn === fn)\r\n listeners.splice(i, 1);\r\n else\r\n ++i;\r\n }\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * Emits an event by calling its listeners with the specified arguments.\r\n * @param {string} evt Event name\r\n * @param {...*} args Arguments\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.emit = function emit(evt) {\r\n var listeners = this._listeners[evt];\r\n if (listeners) {\r\n var args = [],\r\n i = 1;\r\n for (; i < arguments.length;)\r\n args.push(arguments[i++]);\r\n for (i = 0; i < listeners.length;)\r\n listeners[i].fn.apply(listeners[i++].ctx, args);\r\n }\r\n return this;\r\n};\r\n","\"use strict\";\r\n\r\nmodule.exports = factory(factory);\r\n\r\n/**\r\n * Reads / writes floats / doubles from / to buffers.\r\n * @name util.float\r\n * @namespace\r\n */\r\n\r\n/**\r\n * Writes a 32 bit float to a buffer using little endian byte order.\r\n * @name util.float.writeFloatLE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Writes a 32 bit float to a buffer using big endian byte order.\r\n * @name util.float.writeFloatBE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Reads a 32 bit float from a buffer using little endian byte order.\r\n * @name util.float.readFloatLE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Reads a 32 bit float from a buffer using big endian byte order.\r\n * @name util.float.readFloatBE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Writes a 64 bit double to a buffer using little endian byte order.\r\n * @name util.float.writeDoubleLE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Writes a 64 bit double to a buffer using big endian byte order.\r\n * @name util.float.writeDoubleBE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Reads a 64 bit double from a buffer using little endian byte order.\r\n * @name util.float.readDoubleLE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Reads a 64 bit double from a buffer using big endian byte order.\r\n * @name util.float.readDoubleBE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n// Factory function for the purpose of node-based testing in modified global environments\r\nfunction factory(exports) {\r\n\r\n // float: typed array\r\n if (typeof Float32Array !== \"undefined\") (function() {\r\n\r\n var f32 = new Float32Array([ -0 ]),\r\n f8b = new Uint8Array(f32.buffer),\r\n le = f8b[3] === 128;\r\n\r\n function writeFloat_f32_cpy(val, buf, pos) {\r\n f32[0] = val;\r\n buf[pos ] = f8b[0];\r\n buf[pos + 1] = f8b[1];\r\n buf[pos + 2] = f8b[2];\r\n buf[pos + 3] = f8b[3];\r\n }\r\n\r\n function writeFloat_f32_rev(val, buf, pos) {\r\n f32[0] = val;\r\n buf[pos ] = f8b[3];\r\n buf[pos + 1] = f8b[2];\r\n buf[pos + 2] = f8b[1];\r\n buf[pos + 3] = f8b[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.writeFloatLE = le ? writeFloat_f32_cpy : writeFloat_f32_rev;\r\n /* istanbul ignore next */\r\n exports.writeFloatBE = le ? writeFloat_f32_rev : writeFloat_f32_cpy;\r\n\r\n function readFloat_f32_cpy(buf, pos) {\r\n f8b[0] = buf[pos ];\r\n f8b[1] = buf[pos + 1];\r\n f8b[2] = buf[pos + 2];\r\n f8b[3] = buf[pos + 3];\r\n return f32[0];\r\n }\r\n\r\n function readFloat_f32_rev(buf, pos) {\r\n f8b[3] = buf[pos ];\r\n f8b[2] = buf[pos + 1];\r\n f8b[1] = buf[pos + 2];\r\n f8b[0] = buf[pos + 3];\r\n return f32[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.readFloatLE = le ? readFloat_f32_cpy : readFloat_f32_rev;\r\n /* istanbul ignore next */\r\n exports.readFloatBE = le ? readFloat_f32_rev : readFloat_f32_cpy;\r\n\r\n // float: ieee754\r\n })(); else (function() {\r\n\r\n function writeFloat_ieee754(writeUint, val, buf, pos) {\r\n var sign = val < 0 ? 1 : 0;\r\n if (sign)\r\n val = -val;\r\n if (val === 0)\r\n writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos);\r\n else if (isNaN(val))\r\n writeUint(2143289344, buf, pos);\r\n else if (val > 3.4028234663852886e+38) // +-Infinity\r\n writeUint((sign << 31 | 2139095040) >>> 0, buf, pos);\r\n else if (val < 1.1754943508222875e-38) // denormal\r\n writeUint((sign << 31 | Math.round(val / 1.401298464324817e-45)) >>> 0, buf, pos);\r\n else {\r\n var exponent = Math.floor(Math.log(val) / Math.LN2),\r\n mantissa = Math.round(val * Math.pow(2, -exponent) * 8388608) & 8388607;\r\n writeUint((sign << 31 | exponent + 127 << 23 | mantissa) >>> 0, buf, pos);\r\n }\r\n }\r\n\r\n exports.writeFloatLE = writeFloat_ieee754.bind(null, writeUintLE);\r\n exports.writeFloatBE = writeFloat_ieee754.bind(null, writeUintBE);\r\n\r\n function readFloat_ieee754(readUint, buf, pos) {\r\n var uint = readUint(buf, pos),\r\n sign = (uint >> 31) * 2 + 1,\r\n exponent = uint >>> 23 & 255,\r\n mantissa = uint & 8388607;\r\n return exponent === 255\r\n ? mantissa\r\n ? NaN\r\n : sign * Infinity\r\n : exponent === 0 // denormal\r\n ? sign * 1.401298464324817e-45 * mantissa\r\n : sign * Math.pow(2, exponent - 150) * (mantissa + 8388608);\r\n }\r\n\r\n exports.readFloatLE = readFloat_ieee754.bind(null, readUintLE);\r\n exports.readFloatBE = readFloat_ieee754.bind(null, readUintBE);\r\n\r\n })();\r\n\r\n // double: typed array\r\n if (typeof Float64Array !== \"undefined\") (function() {\r\n\r\n var f64 = new Float64Array([-0]),\r\n f8b = new Uint8Array(f64.buffer),\r\n le = f8b[7] === 128;\r\n\r\n function writeDouble_f64_cpy(val, buf, pos) {\r\n f64[0] = val;\r\n buf[pos ] = f8b[0];\r\n buf[pos + 1] = f8b[1];\r\n buf[pos + 2] = f8b[2];\r\n buf[pos + 3] = f8b[3];\r\n buf[pos + 4] = f8b[4];\r\n buf[pos + 5] = f8b[5];\r\n buf[pos + 6] = f8b[6];\r\n buf[pos + 7] = f8b[7];\r\n }\r\n\r\n function writeDouble_f64_rev(val, buf, pos) {\r\n f64[0] = val;\r\n buf[pos ] = f8b[7];\r\n buf[pos + 1] = f8b[6];\r\n buf[pos + 2] = f8b[5];\r\n buf[pos + 3] = f8b[4];\r\n buf[pos + 4] = f8b[3];\r\n buf[pos + 5] = f8b[2];\r\n buf[pos + 6] = f8b[1];\r\n buf[pos + 7] = f8b[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.writeDoubleLE = le ? writeDouble_f64_cpy : writeDouble_f64_rev;\r\n /* istanbul ignore next */\r\n exports.writeDoubleBE = le ? writeDouble_f64_rev : writeDouble_f64_cpy;\r\n\r\n function readDouble_f64_cpy(buf, pos) {\r\n f8b[0] = buf[pos ];\r\n f8b[1] = buf[pos + 1];\r\n f8b[2] = buf[pos + 2];\r\n f8b[3] = buf[pos + 3];\r\n f8b[4] = buf[pos + 4];\r\n f8b[5] = buf[pos + 5];\r\n f8b[6] = buf[pos + 6];\r\n f8b[7] = buf[pos + 7];\r\n return f64[0];\r\n }\r\n\r\n function readDouble_f64_rev(buf, pos) {\r\n f8b[7] = buf[pos ];\r\n f8b[6] = buf[pos + 1];\r\n f8b[5] = buf[pos + 2];\r\n f8b[4] = buf[pos + 3];\r\n f8b[3] = buf[pos + 4];\r\n f8b[2] = buf[pos + 5];\r\n f8b[1] = buf[pos + 6];\r\n f8b[0] = buf[pos + 7];\r\n return f64[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.readDoubleLE = le ? readDouble_f64_cpy : readDouble_f64_rev;\r\n /* istanbul ignore next */\r\n exports.readDoubleBE = le ? readDouble_f64_rev : readDouble_f64_cpy;\r\n\r\n // double: ieee754\r\n })(); else (function() {\r\n\r\n function writeDouble_ieee754(writeUint, off0, off1, val, buf, pos) {\r\n var sign = val < 0 ? 1 : 0;\r\n if (sign)\r\n val = -val;\r\n if (val === 0) {\r\n writeUint(0, buf, pos + off0);\r\n writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos + off1);\r\n } else if (isNaN(val)) {\r\n writeUint(0, buf, pos + off0);\r\n writeUint(2146959360, buf, pos + off1);\r\n } else if (val > 1.7976931348623157e+308) { // +-Infinity\r\n writeUint(0, buf, pos + off0);\r\n writeUint((sign << 31 | 2146435072) >>> 0, buf, pos + off1);\r\n } else {\r\n var mantissa;\r\n if (val < 2.2250738585072014e-308) { // denormal\r\n mantissa = val / 5e-324;\r\n writeUint(mantissa >>> 0, buf, pos + off0);\r\n writeUint((sign << 31 | mantissa / 4294967296) >>> 0, buf, pos + off1);\r\n } else {\r\n var exponent = Math.floor(Math.log(val) / Math.LN2);\r\n if (exponent === 1024)\r\n exponent = 1023;\r\n mantissa = val * Math.pow(2, -exponent);\r\n writeUint(mantissa * 4503599627370496 >>> 0, buf, pos + off0);\r\n writeUint((sign << 31 | exponent + 1023 << 20 | mantissa * 1048576 & 1048575) >>> 0, buf, pos + off1);\r\n }\r\n }\r\n }\r\n\r\n exports.writeDoubleLE = writeDouble_ieee754.bind(null, writeUintLE, 0, 4);\r\n exports.writeDoubleBE = writeDouble_ieee754.bind(null, writeUintBE, 4, 0);\r\n\r\n function readDouble_ieee754(readUint, off0, off1, buf, pos) {\r\n var lo = readUint(buf, pos + off0),\r\n hi = readUint(buf, pos + off1);\r\n var sign = (hi >> 31) * 2 + 1,\r\n exponent = hi >>> 20 & 2047,\r\n mantissa = 4294967296 * (hi & 1048575) + lo;\r\n return exponent === 2047\r\n ? mantissa\r\n ? NaN\r\n : sign * Infinity\r\n : exponent === 0 // denormal\r\n ? sign * 5e-324 * mantissa\r\n : sign * Math.pow(2, exponent - 1075) * (mantissa + 4503599627370496);\r\n }\r\n\r\n exports.readDoubleLE = readDouble_ieee754.bind(null, readUintLE, 0, 4);\r\n exports.readDoubleBE = readDouble_ieee754.bind(null, readUintBE, 4, 0);\r\n\r\n })();\r\n\r\n return exports;\r\n}\r\n\r\n// uint helpers\r\n\r\nfunction writeUintLE(val, buf, pos) {\r\n buf[pos ] = val & 255;\r\n buf[pos + 1] = val >>> 8 & 255;\r\n buf[pos + 2] = val >>> 16 & 255;\r\n buf[pos + 3] = val >>> 24;\r\n}\r\n\r\nfunction writeUintBE(val, buf, pos) {\r\n buf[pos ] = val >>> 24;\r\n buf[pos + 1] = val >>> 16 & 255;\r\n buf[pos + 2] = val >>> 8 & 255;\r\n buf[pos + 3] = val & 255;\r\n}\r\n\r\nfunction readUintLE(buf, pos) {\r\n return (buf[pos ]\r\n | buf[pos + 1] << 8\r\n | buf[pos + 2] << 16\r\n | buf[pos + 3] << 24) >>> 0;\r\n}\r\n\r\nfunction readUintBE(buf, pos) {\r\n return (buf[pos ] << 24\r\n | buf[pos + 1] << 16\r\n | buf[pos + 2] << 8\r\n | buf[pos + 3]) >>> 0;\r\n}\r\n","\"use strict\";\r\nmodule.exports = inquire;\r\n\r\n/**\r\n * Requires a module only if available.\r\n * @memberof util\r\n * @param {string} moduleName Module to require\r\n * @returns {?Object} Required module if available and not empty, otherwise `null`\r\n */\r\nfunction inquire(moduleName) {\r\n try {\r\n var mod = eval(\"quire\".replace(/^/,\"re\"))(moduleName); // eslint-disable-line no-eval\r\n if (mod && (mod.length || Object.keys(mod).length))\r\n return mod;\r\n } catch (e) {} // eslint-disable-line no-empty\r\n return null;\r\n}\r\n","\"use strict\";\r\n\r\n/**\r\n * A minimal UTF8 implementation for number arrays.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar utf8 = exports;\r\n\r\n/**\r\n * Calculates the UTF8 byte length of a string.\r\n * @param {string} string String\r\n * @returns {number} Byte length\r\n */\r\nutf8.length = function utf8_length(string) {\r\n var len = 0,\r\n c = 0;\r\n for (var i = 0; i < string.length; ++i) {\r\n c = string.charCodeAt(i);\r\n if (c < 128)\r\n len += 1;\r\n else if (c < 2048)\r\n len += 2;\r\n else if ((c & 0xFC00) === 0xD800 && (string.charCodeAt(i + 1) & 0xFC00) === 0xDC00) {\r\n ++i;\r\n len += 4;\r\n } else\r\n len += 3;\r\n }\r\n return len;\r\n};\r\n\r\n/**\r\n * Reads UTF8 bytes as a string.\r\n * @param {Uint8Array} buffer Source buffer\r\n * @param {number} start Source start\r\n * @param {number} end Source end\r\n * @returns {string} String read\r\n */\r\nutf8.read = function utf8_read(buffer, start, end) {\r\n var len = end - start;\r\n if (len < 1)\r\n return \"\";\r\n var parts = null,\r\n chunk = [],\r\n i = 0, // char offset\r\n t; // temporary\r\n while (start < end) {\r\n t = buffer[start++];\r\n if (t < 128)\r\n chunk[i++] = t;\r\n else if (t > 191 && t < 224)\r\n chunk[i++] = (t & 31) << 6 | buffer[start++] & 63;\r\n else if (t > 239 && t < 365) {\r\n t = ((t & 7) << 18 | (buffer[start++] & 63) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63) - 0x10000;\r\n chunk[i++] = 0xD800 + (t >> 10);\r\n chunk[i++] = 0xDC00 + (t & 1023);\r\n } else\r\n chunk[i++] = (t & 15) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63;\r\n if (i > 8191) {\r\n (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));\r\n i = 0;\r\n }\r\n }\r\n if (parts) {\r\n if (i)\r\n parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));\r\n return parts.join(\"\");\r\n }\r\n return String.fromCharCode.apply(String, chunk.slice(0, i));\r\n};\r\n\r\n/**\r\n * Writes a string as UTF8 bytes.\r\n * @param {string} string Source string\r\n * @param {Uint8Array} buffer Destination buffer\r\n * @param {number} offset Destination offset\r\n * @returns {number} Bytes written\r\n */\r\nutf8.write = function utf8_write(string, buffer, offset) {\r\n var start = offset,\r\n c1, // character 1\r\n c2; // character 2\r\n for (var i = 0; i < string.length; ++i) {\r\n c1 = string.charCodeAt(i);\r\n if (c1 < 128) {\r\n buffer[offset++] = c1;\r\n } else if (c1 < 2048) {\r\n buffer[offset++] = c1 >> 6 | 192;\r\n buffer[offset++] = c1 & 63 | 128;\r\n } else if ((c1 & 0xFC00) === 0xD800 && ((c2 = string.charCodeAt(i + 1)) & 0xFC00) === 0xDC00) {\r\n c1 = 0x10000 + ((c1 & 0x03FF) << 10) + (c2 & 0x03FF);\r\n ++i;\r\n buffer[offset++] = c1 >> 18 | 240;\r\n buffer[offset++] = c1 >> 12 & 63 | 128;\r\n buffer[offset++] = c1 >> 6 & 63 | 128;\r\n buffer[offset++] = c1 & 63 | 128;\r\n } else {\r\n buffer[offset++] = c1 >> 12 | 224;\r\n buffer[offset++] = c1 >> 6 & 63 | 128;\r\n buffer[offset++] = c1 & 63 | 128;\r\n }\r\n }\r\n return offset - start;\r\n};\r\n","\"use strict\";\r\nmodule.exports = pool;\r\n\r\n/**\r\n * An allocator as used by {@link util.pool}.\r\n * @typedef PoolAllocator\r\n * @type {function}\r\n * @param {number} size Buffer size\r\n * @returns {Uint8Array} Buffer\r\n */\r\n\r\n/**\r\n * A slicer as used by {@link util.pool}.\r\n * @typedef PoolSlicer\r\n * @type {function}\r\n * @param {number} start Start offset\r\n * @param {number} end End offset\r\n * @returns {Uint8Array} Buffer slice\r\n * @this {Uint8Array}\r\n */\r\n\r\n/**\r\n * A general purpose buffer pool.\r\n * @memberof util\r\n * @function\r\n * @param {PoolAllocator} alloc Allocator\r\n * @param {PoolSlicer} slice Slicer\r\n * @param {number} [size=8192] Slab size\r\n * @returns {PoolAllocator} Pooled allocator\r\n */\r\nfunction pool(alloc, slice, size) {\r\n var SIZE = size || 8192;\r\n var MAX = SIZE >>> 1;\r\n var slab = null;\r\n var offset = SIZE;\r\n return function pool_alloc(size) {\r\n if (size < 1 || size > MAX)\r\n return alloc(size);\r\n if (offset + size > SIZE) {\r\n slab = alloc(SIZE);\r\n offset = 0;\r\n }\r\n var buf = slice.call(slab, offset, offset += size);\r\n if (offset & 7) // align to 32 bit\r\n offset = (offset | 7) + 1;\r\n return buf;\r\n };\r\n}\r\n","\"use strict\";\nmodule.exports = LongBits;\n\nvar util = require(\"../util/minimal\");\n\n/**\n * Constructs new long bits.\n * @classdesc Helper class for working with the low and high bits of a 64 bit value.\n * @memberof util\n * @constructor\n * @param {number} lo Low 32 bits, unsigned\n * @param {number} hi High 32 bits, unsigned\n */\nfunction LongBits(lo, hi) {\n\n // note that the casts below are theoretically unnecessary as of today, but older statically\n // generated converter code might still call the ctor with signed 32bits. kept for compat.\n\n /**\n * Low bits.\n * @type {number}\n */\n this.lo = lo >>> 0;\n\n /**\n * High bits.\n * @type {number}\n */\n this.hi = hi >>> 0;\n}\n\n/**\n * Zero bits.\n * @memberof util.LongBits\n * @type {util.LongBits}\n */\nvar zero = LongBits.zero = new LongBits(0, 0);\n\nzero.toNumber = function() { return 0; };\nzero.zzEncode = zero.zzDecode = function() { return this; };\nzero.length = function() { return 1; };\n\n/**\n * Zero hash.\n * @memberof util.LongBits\n * @type {string}\n */\nvar zeroHash = LongBits.zeroHash = \"\\0\\0\\0\\0\\0\\0\\0\\0\";\n\n/**\n * Constructs new long bits from the specified number.\n * @param {number} value Value\n * @returns {util.LongBits} Instance\n */\nLongBits.fromNumber = function fromNumber(value) {\n if (value === 0)\n return zero;\n var sign = value < 0;\n if (sign)\n value = -value;\n var lo = value >>> 0,\n hi = (value - lo) / 4294967296 >>> 0;\n if (sign) {\n hi = ~hi >>> 0;\n lo = ~lo >>> 0;\n if (++lo > 4294967295) {\n lo = 0;\n if (++hi > 4294967295)\n hi = 0;\n }\n }\n return new LongBits(lo, hi);\n};\n\n/**\n * Constructs new long bits from a number, long or string.\n * @param {Long|number|string} value Value\n * @returns {util.LongBits} Instance\n */\nLongBits.from = function from(value) {\n if (typeof value === \"number\")\n return LongBits.fromNumber(value);\n if (util.isString(value)) {\n /* istanbul ignore else */\n if (util.Long)\n value = util.Long.fromString(value);\n else\n return LongBits.fromNumber(parseInt(value, 10));\n }\n return value.low || value.high ? new LongBits(value.low >>> 0, value.high >>> 0) : zero;\n};\n\n/**\n * Converts this long bits to a possibly unsafe JavaScript number.\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {number} Possibly unsafe number\n */\nLongBits.prototype.toNumber = function toNumber(unsigned) {\n if (!unsigned && this.hi >>> 31) {\n var lo = ~this.lo + 1 >>> 0,\n hi = ~this.hi >>> 0;\n if (!lo)\n hi = hi + 1 >>> 0;\n return -(lo + hi * 4294967296);\n }\n return this.lo + this.hi * 4294967296;\n};\n\n/**\n * Converts this long bits to a long.\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long} Long\n */\nLongBits.prototype.toLong = function toLong(unsigned) {\n return util.Long\n ? new util.Long(this.lo | 0, this.hi | 0, Boolean(unsigned))\n /* istanbul ignore next */\n : { low: this.lo | 0, high: this.hi | 0, unsigned: Boolean(unsigned) };\n};\n\nvar charCodeAt = String.prototype.charCodeAt;\n\n/**\n * Constructs new long bits from the specified 8 characters long hash.\n * @param {string} hash Hash\n * @returns {util.LongBits} Bits\n */\nLongBits.fromHash = function fromHash(hash) {\n if (hash === zeroHash)\n return zero;\n return new LongBits(\n ( charCodeAt.call(hash, 0)\n | charCodeAt.call(hash, 1) << 8\n | charCodeAt.call(hash, 2) << 16\n | charCodeAt.call(hash, 3) << 24) >>> 0\n ,\n ( charCodeAt.call(hash, 4)\n | charCodeAt.call(hash, 5) << 8\n | charCodeAt.call(hash, 6) << 16\n | charCodeAt.call(hash, 7) << 24) >>> 0\n );\n};\n\n/**\n * Converts this long bits to a 8 characters long hash.\n * @returns {string} Hash\n */\nLongBits.prototype.toHash = function toHash() {\n return String.fromCharCode(\n this.lo & 255,\n this.lo >>> 8 & 255,\n this.lo >>> 16 & 255,\n this.lo >>> 24 ,\n this.hi & 255,\n this.hi >>> 8 & 255,\n this.hi >>> 16 & 255,\n this.hi >>> 24\n );\n};\n\n/**\n * Zig-zag encodes this long bits.\n * @returns {util.LongBits} `this`\n */\nLongBits.prototype.zzEncode = function zzEncode() {\n var mask = this.hi >> 31;\n this.hi = ((this.hi << 1 | this.lo >>> 31) ^ mask) >>> 0;\n this.lo = ( this.lo << 1 ^ mask) >>> 0;\n return this;\n};\n\n/**\n * Zig-zag decodes this long bits.\n * @returns {util.LongBits} `this`\n */\nLongBits.prototype.zzDecode = function zzDecode() {\n var mask = -(this.lo & 1);\n this.lo = ((this.lo >>> 1 | this.hi << 31) ^ mask) >>> 0;\n this.hi = ( this.hi >>> 1 ^ mask) >>> 0;\n return this;\n};\n\n/**\n * Calculates the length of this longbits when encoded as a varint.\n * @returns {number} Length\n */\nLongBits.prototype.length = function length() {\n var part0 = this.lo,\n part1 = (this.lo >>> 28 | this.hi << 4) >>> 0,\n part2 = this.hi >>> 24;\n return part2 === 0\n ? part1 === 0\n ? part0 < 16384\n ? part0 < 128 ? 1 : 2\n : part0 < 2097152 ? 3 : 4\n : part1 < 16384\n ? part1 < 128 ? 5 : 6\n : part1 < 2097152 ? 7 : 8\n : part2 < 128 ? 9 : 10;\n};\n","\"use strict\";\nvar util = exports;\n\n// used to return a Promise where callback is omitted\nutil.asPromise = require(\"@protobufjs/aspromise\");\n\n// converts to / from base64 encoded strings\nutil.base64 = require(\"@protobufjs/base64\");\n\n// base class of rpc.Service\nutil.EventEmitter = require(\"@protobufjs/eventemitter\");\n\n// float handling accross browsers\nutil.float = require(\"@protobufjs/float\");\n\n// requires modules optionally and hides the call from bundlers\nutil.inquire = require(\"@protobufjs/inquire\");\n\n// converts to / from utf8 encoded strings\nutil.utf8 = require(\"@protobufjs/utf8\");\n\n// provides a node-like buffer pool in the browser\nutil.pool = require(\"@protobufjs/pool\");\n\n// utility to work with the low and high bits of a 64 bit value\nutil.LongBits = require(\"./longbits\");\n\n/**\n * Whether running within node or not.\n * @memberof util\n * @type {boolean}\n */\nutil.isNode = Boolean(typeof global !== \"undefined\"\n && global\n && global.process\n && global.process.versions\n && global.process.versions.node);\n\n/**\n * Global object reference.\n * @memberof util\n * @type {Object}\n */\nutil.global = util.isNode && global\n || typeof window !== \"undefined\" && window\n || typeof self !== \"undefined\" && self\n || this; // eslint-disable-line no-invalid-this\n\n/**\n * An immuable empty array.\n * @memberof util\n * @type {Array.<*>}\n * @const\n */\nutil.emptyArray = Object.freeze ? Object.freeze([]) : /* istanbul ignore next */ []; // used on prototypes\n\n/**\n * An immutable empty object.\n * @type {Object}\n * @const\n */\nutil.emptyObject = Object.freeze ? Object.freeze({}) : /* istanbul ignore next */ {}; // used on prototypes\n\n/**\n * Tests if the specified value is an integer.\n * @function\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is an integer\n */\nutil.isInteger = Number.isInteger || /* istanbul ignore next */ function isInteger(value) {\n return typeof value === \"number\" && isFinite(value) && Math.floor(value) === value;\n};\n\n/**\n * Tests if the specified value is a string.\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is a string\n */\nutil.isString = function isString(value) {\n return typeof value === \"string\" || value instanceof String;\n};\n\n/**\n * Tests if the specified value is a non-null object.\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is a non-null object\n */\nutil.isObject = function isObject(value) {\n return value && typeof value === \"object\";\n};\n\n/**\n * Checks if a property on a message is considered to be present.\n * This is an alias of {@link util.isSet}.\n * @function\n * @param {Object} obj Plain object or message instance\n * @param {string} prop Property name\n * @returns {boolean} `true` if considered to be present, otherwise `false`\n */\nutil.isset =\n\n/**\n * Checks if a property on a message is considered to be present.\n * @param {Object} obj Plain object or message instance\n * @param {string} prop Property name\n * @returns {boolean} `true` if considered to be present, otherwise `false`\n */\nutil.isSet = function isSet(obj, prop) {\n var value = obj[prop];\n if (value != null && obj.hasOwnProperty(prop)) // eslint-disable-line eqeqeq, no-prototype-builtins\n return typeof value !== \"object\" || (Array.isArray(value) ? value.length : Object.keys(value).length) > 0;\n return false;\n};\n\n/**\n * Any compatible Buffer instance.\n * This is a minimal stand-alone definition of a Buffer instance. The actual type is that exported by node's typings.\n * @interface Buffer\n * @extends Uint8Array\n */\n\n/**\n * Node's Buffer class if available.\n * @type {Constructor<Buffer>}\n */\nutil.Buffer = (function() {\n try {\n var Buffer = util.inquire(\"buffer\").Buffer;\n // refuse to use non-node buffers if not explicitly assigned (perf reasons):\n return Buffer.prototype.utf8Write ? Buffer : /* istanbul ignore next */ null;\n } catch (e) {\n /* istanbul ignore next */\n return null;\n }\n})();\n\n// Internal alias of or polyfull for Buffer.from.\nutil._Buffer_from = null;\n\n// Internal alias of or polyfill for Buffer.allocUnsafe.\nutil._Buffer_allocUnsafe = null;\n\n/**\n * Creates a new buffer of whatever type supported by the environment.\n * @param {number|number[]} [sizeOrArray=0] Buffer size or number array\n * @returns {Uint8Array|Buffer} Buffer\n */\nutil.newBuffer = function newBuffer(sizeOrArray) {\n /* istanbul ignore next */\n return typeof sizeOrArray === \"number\"\n ? util.Buffer\n ? util._Buffer_allocUnsafe(sizeOrArray)\n : new util.Array(sizeOrArray)\n : util.Buffer\n ? util._Buffer_from(sizeOrArray)\n : typeof Uint8Array === \"undefined\"\n ? sizeOrArray\n : new Uint8Array(sizeOrArray);\n};\n\n/**\n * Array implementation used in the browser. `Uint8Array` if supported, otherwise `Array`.\n * @type {Constructor<Uint8Array>}\n */\nutil.Array = typeof Uint8Array !== \"undefined\" ? Uint8Array /* istanbul ignore next */ : Array;\n\n/**\n * Any compatible Long instance.\n * This is a minimal stand-alone definition of a Long instance. The actual type is that exported by long.js.\n * @interface Long\n * @property {number} low Low bits\n * @property {number} high High bits\n * @property {boolean} unsigned Whether unsigned or not\n */\n\n/**\n * Long.js's Long class if available.\n * @type {Constructor<Long>}\n */\nutil.Long = /* istanbul ignore next */ util.global.dcodeIO && /* istanbul ignore next */ util.global.dcodeIO.Long\n || /* istanbul ignore next */ util.global.Long\n || util.inquire(\"long\");\n\n/**\n * Regular expression used to verify 2 bit (`bool`) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key2Re = /^true|false|0|1$/;\n\n/**\n * Regular expression used to verify 32 bit (`int32` etc.) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key32Re = /^-?(?:0|[1-9][0-9]*)$/;\n\n/**\n * Regular expression used to verify 64 bit (`int64` etc.) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key64Re = /^(?:[\\\\x00-\\\\xff]{8}|-?(?:0|[1-9][0-9]*))$/;\n\n/**\n * Converts a number or long to an 8 characters long hash string.\n * @param {Long|number} value Value to convert\n * @returns {string} Hash\n */\nutil.longToHash = function longToHash(value) {\n return value\n ? util.LongBits.from(value).toHash()\n : util.LongBits.zeroHash;\n};\n\n/**\n * Converts an 8 characters long hash string to a long or number.\n * @param {string} hash Hash\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long|number} Original value\n */\nutil.longFromHash = function longFromHash(hash, unsigned) {\n var bits = util.LongBits.fromHash(hash);\n if (util.Long)\n return util.Long.fromBits(bits.lo, bits.hi, unsigned);\n return bits.toNumber(Boolean(unsigned));\n};\n\n/**\n * Merges the properties of the source object into the destination object.\n * @memberof util\n * @param {Object.<string,*>} dst Destination object\n * @param {Object.<string,*>} src Source object\n * @param {boolean} [ifNotSet=false] Merges only if the key is not already set\n * @returns {Object.<string,*>} Destination object\n */\nfunction merge(dst, src, ifNotSet) { // used by converters\n for (var keys = Object.keys(src), i = 0; i < keys.length; ++i)\n if (dst[keys[i]] === undefined || !ifNotSet)\n dst[keys[i]] = src[keys[i]];\n return dst;\n}\n\nutil.merge = merge;\n\n/**\n * Converts the first character of a string to lower case.\n * @param {string} str String to convert\n * @returns {string} Converted string\n */\nutil.lcFirst = function lcFirst(str) {\n return str.charAt(0).toLowerCase() + str.substring(1);\n};\n\n/**\n * Creates a custom error constructor.\n * @memberof util\n * @param {string} name Error name\n * @returns {Constructor<Error>} Custom error constructor\n */\nfunction newError(name) {\n\n function CustomError(message, properties) {\n\n if (!(this instanceof CustomError))\n return new CustomError(message, properties);\n\n // Error.call(this, message);\n // ^ just returns a new error instance because the ctor can be called as a function\n\n Object.defineProperty(this, \"message\", { get: function() { return message; } });\n\n /* istanbul ignore next */\n if (Error.captureStackTrace) // node\n Error.captureStackTrace(this, CustomError);\n else\n Object.defineProperty(this, \"stack\", { value: new Error().stack || \"\" });\n\n if (properties)\n merge(this, properties);\n }\n\n CustomError.prototype = Object.create(Error.prototype, {\n constructor: {\n value: CustomError,\n writable: true,\n enumerable: false,\n configurable: true,\n },\n name: {\n get: function get() { return name; },\n set: undefined,\n enumerable: false,\n // configurable: false would accurately preserve the behavior of\n // the original, but I'm guessing that was not intentional.\n // For an actual error subclass, this property would\n // be configurable.\n configurable: true,\n },\n toString: {\n value: function value() { return this.name + \": \" + this.message; },\n writable: true,\n enumerable: false,\n configurable: true,\n },\n });\n\n return CustomError;\n}\n\nutil.newError = newError;\n\n/**\n * Constructs a new protocol error.\n * @classdesc Error subclass indicating a protocol specifc error.\n * @memberof util\n * @extends Error\n * @template T extends Message<T>\n * @constructor\n * @param {string} message Error message\n * @param {Object.<string,*>} [properties] Additional properties\n * @example\n * try {\n * MyMessage.decode(someBuffer); // throws if required fields are missing\n * } catch (e) {\n * if (e instanceof ProtocolError && e.instance)\n * console.log(\"decoded so far: \" + JSON.stringify(e.instance));\n * }\n */\nutil.ProtocolError = newError(\"ProtocolError\");\n\n/**\n * So far decoded message instance.\n * @name util.ProtocolError#instance\n * @type {Message<T>}\n */\n\n/**\n * A OneOf getter as returned by {@link util.oneOfGetter}.\n * @typedef OneOfGetter\n * @type {function}\n * @returns {string|undefined} Set field name, if any\n */\n\n/**\n * Builds a getter for a oneof's present field name.\n * @param {string[]} fieldNames Field names\n * @returns {OneOfGetter} Unbound getter\n */\nutil.oneOfGetter = function getOneOf(fieldNames) {\n var fieldMap = {};\n for (var i = 0; i < fieldNames.length; ++i)\n fieldMap[fieldNames[i]] = 1;\n\n /**\n * @returns {string|undefined} Set field name, if any\n * @this Object\n * @ignore\n */\n return function() { // eslint-disable-line consistent-return\n for (var keys = Object.keys(this), i = keys.length - 1; i > -1; --i)\n if (fieldMap[keys[i]] === 1 && this[keys[i]] !== undefined && this[keys[i]] !== null)\n return keys[i];\n };\n};\n\n/**\n * A OneOf setter as returned by {@link util.oneOfSetter}.\n * @typedef OneOfSetter\n * @type {function}\n * @param {string|undefined} value Field name\n * @returns {undefined}\n */\n\n/**\n * Builds a setter for a oneof's present field name.\n * @param {string[]} fieldNames Field names\n * @returns {OneOfSetter} Unbound setter\n */\nutil.oneOfSetter = function setOneOf(fieldNames) {\n\n /**\n * @param {string} name Field name\n * @returns {undefined}\n * @this Object\n * @ignore\n */\n return function(name) {\n for (var i = 0; i < fieldNames.length; ++i)\n if (fieldNames[i] !== name)\n delete this[fieldNames[i]];\n };\n};\n\n/**\n * Default conversion options used for {@link Message#toJSON} implementations.\n *\n * These options are close to proto3's JSON mapping with the exception that internal types like Any are handled just like messages. More precisely:\n *\n * - Longs become strings\n * - Enums become string keys\n * - Bytes become base64 encoded strings\n * - (Sub-)Messages become plain objects\n * - Maps become plain objects with all string keys\n * - Repeated fields become arrays\n * - NaN and Infinity for float and double fields become strings\n *\n * @type {IConversionOptions}\n * @see https://developers.google.com/protocol-buffers/docs/proto3?hl=en#json\n */\nutil.toJSONOptions = {\n longs: String,\n enums: String,\n bytes: String,\n json: true\n};\n\n// Sets up buffer utility according to the environment (called in index-minimal)\nutil._configure = function() {\n var Buffer = util.Buffer;\n /* istanbul ignore if */\n if (!Buffer) {\n util._Buffer_from = util._Buffer_allocUnsafe = null;\n return;\n }\n // because node 4.x buffers are incompatible & immutable\n // see: https://github.com/dcodeIO/protobuf.js/pull/665\n util._Buffer_from = Buffer.from !== Uint8Array.from && Buffer.from ||\n /* istanbul ignore next */\n function Buffer_from(value, encoding) {\n return new Buffer(value, encoding);\n };\n util._Buffer_allocUnsafe = Buffer.allocUnsafe ||\n /* istanbul ignore next */\n function Buffer_allocUnsafe(size) {\n return new Buffer(size);\n };\n};\n","\"use strict\";\nmodule.exports = Writer;\n\nvar util = require(\"./util/minimal\");\n\nvar BufferWriter; // cyclic\n\nvar LongBits = util.LongBits,\n base64 = util.base64,\n utf8 = util.utf8;\n\n/**\n * Constructs a new writer operation instance.\n * @classdesc Scheduled writer operation.\n * @constructor\n * @param {function(*, Uint8Array, number)} fn Function to call\n * @param {number} len Value byte length\n * @param {*} val Value to write\n * @ignore\n */\nfunction Op(fn, len, val) {\n\n /**\n * Function to call.\n * @type {function(Uint8Array, number, *)}\n */\n this.fn = fn;\n\n /**\n * Value byte length.\n * @type {number}\n */\n this.len = len;\n\n /**\n * Next operation.\n * @type {Writer.Op|undefined}\n */\n this.next = undefined;\n\n /**\n * Value to write.\n * @type {*}\n */\n this.val = val; // type varies\n}\n\n/* istanbul ignore next */\nfunction noop() {} // eslint-disable-line no-empty-function\n\n/**\n * Constructs a new writer state instance.\n * @classdesc Copied writer state.\n * @memberof Writer\n * @constructor\n * @param {Writer} writer Writer to copy state from\n * @ignore\n */\nfunction State(writer) {\n\n /**\n * Current head.\n * @type {Writer.Op}\n */\n this.head = writer.head;\n\n /**\n * Current tail.\n * @type {Writer.Op}\n */\n this.tail = writer.tail;\n\n /**\n * Current buffer length.\n * @type {number}\n */\n this.len = writer.len;\n\n /**\n * Next state.\n * @type {State|null}\n */\n this.next = writer.states;\n}\n\n/**\n * Constructs a new writer instance.\n * @classdesc Wire format writer using `Uint8Array` if available, otherwise `Array`.\n * @constructor\n */\nfunction Writer() {\n\n /**\n * Current length.\n * @type {number}\n */\n this.len = 0;\n\n /**\n * Operations head.\n * @type {Object}\n */\n this.head = new Op(noop, 0, 0);\n\n /**\n * Operations tail\n * @type {Object}\n */\n this.tail = this.head;\n\n /**\n * Linked forked states.\n * @type {Object|null}\n */\n this.states = null;\n\n // When a value is written, the writer calculates its byte length and puts it into a linked\n // list of operations to perform when finish() is called. This both allows us to allocate\n // buffers of the exact required size and reduces the amount of work we have to do compared\n // to first calculating over objects and then encoding over objects. In our case, the encoding\n // part is just a linked list walk calling operations with already prepared values.\n}\n\nvar create = function create() {\n return util.Buffer\n ? function create_buffer_setup() {\n return (Writer.create = function create_buffer() {\n return new BufferWriter();\n })();\n }\n /* istanbul ignore next */\n : function create_array() {\n return new Writer();\n };\n};\n\n/**\n * Creates a new writer.\n * @function\n * @returns {BufferWriter|Writer} A {@link BufferWriter} when Buffers are supported, otherwise a {@link Writer}\n */\nWriter.create = create();\n\n/**\n * Allocates a buffer of the specified size.\n * @param {number} size Buffer size\n * @returns {Uint8Array} Buffer\n */\nWriter.alloc = function alloc(size) {\n return new util.Array(size);\n};\n\n// Use Uint8Array buffer pool in the browser, just like node does with buffers\n/* istanbul ignore else */\nif (util.Array !== Array)\n Writer.alloc = util.pool(Writer.alloc, util.Array.prototype.subarray);\n\n/**\n * Pushes a new operation to the queue.\n * @param {function(Uint8Array, number, *)} fn Function to call\n * @param {number} len Value byte length\n * @param {number} val Value to write\n * @returns {Writer} `this`\n * @private\n */\nWriter.prototype._push = function push(fn, len, val) {\n this.tail = this.tail.next = new Op(fn, len, val);\n this.len += len;\n return this;\n};\n\nfunction writeByte(val, buf, pos) {\n buf[pos] = val & 255;\n}\n\nfunction writeVarint32(val, buf, pos) {\n while (val > 127) {\n buf[pos++] = val & 127 | 128;\n val >>>= 7;\n }\n buf[pos] = val;\n}\n\n/**\n * Constructs a new varint writer operation instance.\n * @classdesc Scheduled varint writer operation.\n * @extends Op\n * @constructor\n * @param {number} len Value byte length\n * @param {number} val Value to write\n * @ignore\n */\nfunction VarintOp(len, val) {\n this.len = len;\n this.next = undefined;\n this.val = val;\n}\n\nVarintOp.prototype = Object.create(Op.prototype);\nVarintOp.prototype.fn = writeVarint32;\n\n/**\n * Writes an unsigned 32 bit value as a varint.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.uint32 = function write_uint32(value) {\n // here, the call to this.push has been inlined and a varint specific Op subclass is used.\n // uint32 is by far the most frequently used operation and benefits significantly from this.\n this.len += (this.tail = this.tail.next = new VarintOp(\n (value = value >>> 0)\n < 128 ? 1\n : value < 16384 ? 2\n : value < 2097152 ? 3\n : value < 268435456 ? 4\n : 5,\n value)).len;\n return this;\n};\n\n/**\n * Writes a signed 32 bit value as a varint.\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.int32 = function write_int32(value) {\n return value < 0\n ? this._push(writeVarint64, 10, LongBits.fromNumber(value)) // 10 bytes per spec\n : this.uint32(value);\n};\n\n/**\n * Writes a 32 bit value as a varint, zig-zag encoded.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sint32 = function write_sint32(value) {\n return this.uint32((value << 1 ^ value >> 31) >>> 0);\n};\n\nfunction writeVarint64(val, buf, pos) {\n while (val.hi) {\n buf[pos++] = val.lo & 127 | 128;\n val.lo = (val.lo >>> 7 | val.hi << 25) >>> 0;\n val.hi >>>= 7;\n }\n while (val.lo > 127) {\n buf[pos++] = val.lo & 127 | 128;\n val.lo = val.lo >>> 7;\n }\n buf[pos++] = val.lo;\n}\n\n/**\n * Writes an unsigned 64 bit value as a varint.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.uint64 = function write_uint64(value) {\n var bits = LongBits.from(value);\n return this._push(writeVarint64, bits.length(), bits);\n};\n\n/**\n * Writes a signed 64 bit value as a varint.\n * @function\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.int64 = Writer.prototype.uint64;\n\n/**\n * Writes a signed 64 bit value as a varint, zig-zag encoded.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.sint64 = function write_sint64(value) {\n var bits = LongBits.from(value).zzEncode();\n return this._push(writeVarint64, bits.length(), bits);\n};\n\n/**\n * Writes a boolish value as a varint.\n * @param {boolean} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bool = function write_bool(value) {\n return this._push(writeByte, 1, value ? 1 : 0);\n};\n\nfunction writeFixed32(val, buf, pos) {\n buf[pos ] = val & 255;\n buf[pos + 1] = val >>> 8 & 255;\n buf[pos + 2] = val >>> 16 & 255;\n buf[pos + 3] = val >>> 24;\n}\n\n/**\n * Writes an unsigned 32 bit value as fixed 32 bits.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.fixed32 = function write_fixed32(value) {\n return this._push(writeFixed32, 4, value >>> 0);\n};\n\n/**\n * Writes a signed 32 bit value as fixed 32 bits.\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sfixed32 = Writer.prototype.fixed32;\n\n/**\n * Writes an unsigned 64 bit value as fixed 64 bits.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.fixed64 = function write_fixed64(value) {\n var bits = LongBits.from(value);\n return this._push(writeFixed32, 4, bits.lo)._push(writeFixed32, 4, bits.hi);\n};\n\n/**\n * Writes a signed 64 bit value as fixed 64 bits.\n * @function\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.sfixed64 = Writer.prototype.fixed64;\n\n/**\n * Writes a float (32 bit).\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.float = function write_float(value) {\n return this._push(util.float.writeFloatLE, 4, value);\n};\n\n/**\n * Writes a double (64 bit float).\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.double = function write_double(value) {\n return this._push(util.float.writeDoubleLE, 8, value);\n};\n\nvar writeBytes = util.Array.prototype.set\n ? function writeBytes_set(val, buf, pos) {\n buf.set(val, pos); // also works for plain array values\n }\n /* istanbul ignore next */\n : function writeBytes_for(val, buf, pos) {\n for (var i = 0; i < val.length; ++i)\n buf[pos + i] = val[i];\n };\n\n/**\n * Writes a sequence of bytes.\n * @param {Uint8Array|string} value Buffer or base64 encoded string to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bytes = function write_bytes(value) {\n var len = value.length >>> 0;\n if (!len)\n return this._push(writeByte, 1, 0);\n if (util.isString(value)) {\n var buf = Writer.alloc(len = base64.length(value));\n base64.decode(value, buf, 0);\n value = buf;\n }\n return this.uint32(len)._push(writeBytes, len, value);\n};\n\n/**\n * Writes a string.\n * @param {string} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.string = function write_string(value) {\n var len = utf8.length(value);\n return len\n ? this.uint32(len)._push(utf8.write, len, value)\n : this._push(writeByte, 1, 0);\n};\n\n/**\n * Forks this writer's state by pushing it to a stack.\n * Calling {@link Writer#reset|reset} or {@link Writer#ldelim|ldelim} resets the writer to the previous state.\n * @returns {Writer} `this`\n */\nWriter.prototype.fork = function fork() {\n this.states = new State(this);\n this.head = this.tail = new Op(noop, 0, 0);\n this.len = 0;\n return this;\n};\n\n/**\n * Resets this instance to the last state.\n * @returns {Writer} `this`\n */\nWriter.prototype.reset = function reset() {\n if (this.states) {\n this.head = this.states.head;\n this.tail = this.states.tail;\n this.len = this.states.len;\n this.states = this.states.next;\n } else {\n this.head = this.tail = new Op(noop, 0, 0);\n this.len = 0;\n }\n return this;\n};\n\n/**\n * Resets to the last state and appends the fork state's current write length as a varint followed by its operations.\n * @returns {Writer} `this`\n */\nWriter.prototype.ldelim = function ldelim() {\n var head = this.head,\n tail = this.tail,\n len = this.len;\n this.reset().uint32(len);\n if (len) {\n this.tail.next = head.next; // skip noop\n this.tail = tail;\n this.len += len;\n }\n return this;\n};\n\n/**\n * Finishes the write operation.\n * @returns {Uint8Array} Finished buffer\n */\nWriter.prototype.finish = function finish() {\n var head = this.head.next, // skip noop\n buf = this.constructor.alloc(this.len),\n pos = 0;\n while (head) {\n head.fn(head.val, buf, pos);\n pos += head.len;\n head = head.next;\n }\n // this.head = this.tail = null;\n return buf;\n};\n\nWriter._configure = function(BufferWriter_) {\n BufferWriter = BufferWriter_;\n Writer.create = create();\n BufferWriter._configure();\n};\n","\"use strict\";\nmodule.exports = BufferWriter;\n\n// extends Writer\nvar Writer = require(\"./writer\");\n(BufferWriter.prototype = Object.create(Writer.prototype)).constructor = BufferWriter;\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new buffer writer instance.\n * @classdesc Wire format writer using node buffers.\n * @extends Writer\n * @constructor\n */\nfunction BufferWriter() {\n Writer.call(this);\n}\n\nBufferWriter._configure = function () {\n /**\n * Allocates a buffer of the specified size.\n * @function\n * @param {number} size Buffer size\n * @returns {Buffer} Buffer\n */\n BufferWriter.alloc = util._Buffer_allocUnsafe;\n\n BufferWriter.writeBytesBuffer = util.Buffer && util.Buffer.prototype instanceof Uint8Array && util.Buffer.prototype.set.name === \"set\"\n ? function writeBytesBuffer_set(val, buf, pos) {\n buf.set(val, pos); // faster than copy (requires node >= 4 where Buffers extend Uint8Array and set is properly inherited)\n // also works for plain array values\n }\n /* istanbul ignore next */\n : function writeBytesBuffer_copy(val, buf, pos) {\n if (val.copy) // Buffer values\n val.copy(buf, pos, 0, val.length);\n else for (var i = 0; i < val.length;) // plain array values\n buf[pos++] = val[i++];\n };\n};\n\n\n/**\n * @override\n */\nBufferWriter.prototype.bytes = function write_bytes_buffer(value) {\n if (util.isString(value))\n value = util._Buffer_from(value, \"base64\");\n var len = value.length >>> 0;\n this.uint32(len);\n if (len)\n this._push(BufferWriter.writeBytesBuffer, len, value);\n return this;\n};\n\nfunction writeStringBuffer(val, buf, pos) {\n if (val.length < 40) // plain js is faster for short strings (probably due to redundant assertions)\n util.utf8.write(val, buf, pos);\n else if (buf.utf8Write)\n buf.utf8Write(val, pos);\n else\n buf.write(val, pos);\n}\n\n/**\n * @override\n */\nBufferWriter.prototype.string = function write_string_buffer(value) {\n var len = util.Buffer.byteLength(value);\n this.uint32(len);\n if (len)\n this._push(writeStringBuffer, len, value);\n return this;\n};\n\n\n/**\n * Finishes the write operation.\n * @name BufferWriter#finish\n * @function\n * @returns {Buffer} Finished buffer\n */\n\nBufferWriter._configure();\n","\"use strict\";\nmodule.exports = Reader;\n\nvar util = require(\"./util/minimal\");\n\nvar BufferReader; // cyclic\n\nvar LongBits = util.LongBits,\n utf8 = util.utf8;\n\n/* istanbul ignore next */\nfunction indexOutOfRange(reader, writeLength) {\n return RangeError(\"index out of range: \" + reader.pos + \" + \" + (writeLength || 1) + \" > \" + reader.len);\n}\n\n/**\n * Constructs a new reader instance using the specified buffer.\n * @classdesc Wire format reader using `Uint8Array` if available, otherwise `Array`.\n * @constructor\n * @param {Uint8Array} buffer Buffer to read from\n */\nfunction Reader(buffer) {\n\n /**\n * Read buffer.\n * @type {Uint8Array}\n */\n this.buf = buffer;\n\n /**\n * Read buffer position.\n * @type {number}\n */\n this.pos = 0;\n\n /**\n * Read buffer length.\n * @type {number}\n */\n this.len = buffer.length;\n}\n\nvar create_array = typeof Uint8Array !== \"undefined\"\n ? function create_typed_array(buffer) {\n if (buffer instanceof Uint8Array || Array.isArray(buffer))\n return new Reader(buffer);\n throw Error(\"illegal buffer\");\n }\n /* istanbul ignore next */\n : function create_array(buffer) {\n if (Array.isArray(buffer))\n return new Reader(buffer);\n throw Error(\"illegal buffer\");\n };\n\nvar create = function create() {\n return util.Buffer\n ? function create_buffer_setup(buffer) {\n return (Reader.create = function create_buffer(buffer) {\n return util.Buffer.isBuffer(buffer)\n ? new BufferReader(buffer)\n /* istanbul ignore next */\n : create_array(buffer);\n })(buffer);\n }\n /* istanbul ignore next */\n : create_array;\n};\n\n/**\n * Creates a new reader using the specified buffer.\n * @function\n * @param {Uint8Array|Buffer} buffer Buffer to read from\n * @returns {Reader|BufferReader} A {@link BufferReader} if `buffer` is a Buffer, otherwise a {@link Reader}\n * @throws {Error} If `buffer` is not a valid buffer\n */\nReader.create = create();\n\nReader.prototype._slice = util.Array.prototype.subarray || /* istanbul ignore next */ util.Array.prototype.slice;\n\n/**\n * Reads a varint as an unsigned 32 bit value.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.uint32 = (function read_uint32_setup() {\n var value = 4294967295; // optimizer type-hint, tends to deopt otherwise (?!)\n return function read_uint32() {\n value = ( this.buf[this.pos] & 127 ) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 7) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 14) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 21) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 15) << 28) >>> 0; if (this.buf[this.pos++] < 128) return value;\n\n /* istanbul ignore if */\n if ((this.pos += 5) > this.len) {\n this.pos = this.len;\n throw indexOutOfRange(this, 10);\n }\n return value;\n };\n})();\n\n/**\n * Reads a varint as a signed 32 bit value.\n * @returns {number} Value read\n */\nReader.prototype.int32 = function read_int32() {\n return this.uint32() | 0;\n};\n\n/**\n * Reads a zig-zag encoded varint as a signed 32 bit value.\n * @returns {number} Value read\n */\nReader.prototype.sint32 = function read_sint32() {\n var value = this.uint32();\n return value >>> 1 ^ -(value & 1) | 0;\n};\n\n/* eslint-disable no-invalid-this */\n\nfunction readLongVarint() {\n // tends to deopt with local vars for octet etc.\n var bits = new LongBits(0, 0);\n var i = 0;\n if (this.len - this.pos > 4) { // fast route (lo)\n for (; i < 4; ++i) {\n // 1st..4th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n // 5th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << 28) >>> 0;\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) >> 4) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n i = 0;\n } else {\n for (; i < 3; ++i) {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n // 1st..3th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n // 4th\n bits.lo = (bits.lo | (this.buf[this.pos++] & 127) << i * 7) >>> 0;\n return bits;\n }\n if (this.len - this.pos > 4) { // fast route (hi)\n for (; i < 5; ++i) {\n // 6th..10th\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n } else {\n for (; i < 5; ++i) {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n // 6th..10th\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n }\n /* istanbul ignore next */\n throw Error(\"invalid varint encoding\");\n}\n\n/* eslint-enable no-invalid-this */\n\n/**\n * Reads a varint as a signed 64 bit value.\n * @name Reader#int64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a varint as an unsigned 64 bit value.\n * @name Reader#uint64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a zig-zag encoded varint as a signed 64 bit value.\n * @name Reader#sint64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a varint as a boolean.\n * @returns {boolean} Value read\n */\nReader.prototype.bool = function read_bool() {\n return this.uint32() !== 0;\n};\n\nfunction readFixed32_end(buf, end) { // note that this uses `end`, not `pos`\n return (buf[end - 4]\n | buf[end - 3] << 8\n | buf[end - 2] << 16\n | buf[end - 1] << 24) >>> 0;\n}\n\n/**\n * Reads fixed 32 bits as an unsigned 32 bit integer.\n * @returns {number} Value read\n */\nReader.prototype.fixed32 = function read_fixed32() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n return readFixed32_end(this.buf, this.pos += 4);\n};\n\n/**\n * Reads fixed 32 bits as a signed 32 bit integer.\n * @returns {number} Value read\n */\nReader.prototype.sfixed32 = function read_sfixed32() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n return readFixed32_end(this.buf, this.pos += 4) | 0;\n};\n\n/* eslint-disable no-invalid-this */\n\nfunction readFixed64(/* this: Reader */) {\n\n /* istanbul ignore if */\n if (this.pos + 8 > this.len)\n throw indexOutOfRange(this, 8);\n\n return new LongBits(readFixed32_end(this.buf, this.pos += 4), readFixed32_end(this.buf, this.pos += 4));\n}\n\n/* eslint-enable no-invalid-this */\n\n/**\n * Reads fixed 64 bits.\n * @name Reader#fixed64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads zig-zag encoded fixed 64 bits.\n * @name Reader#sfixed64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a float (32 bit) as a number.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.float = function read_float() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n var value = util.float.readFloatLE(this.buf, this.pos);\n this.pos += 4;\n return value;\n};\n\n/**\n * Reads a double (64 bit float) as a number.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.double = function read_double() {\n\n /* istanbul ignore if */\n if (this.pos + 8 > this.len)\n throw indexOutOfRange(this, 4);\n\n var value = util.float.readDoubleLE(this.buf, this.pos);\n this.pos += 8;\n return value;\n};\n\n/**\n * Reads a sequence of bytes preceeded by its length as a varint.\n * @returns {Uint8Array} Value read\n */\nReader.prototype.bytes = function read_bytes() {\n var length = this.uint32(),\n start = this.pos,\n end = this.pos + length;\n\n /* istanbul ignore if */\n if (end > this.len)\n throw indexOutOfRange(this, length);\n\n this.pos += length;\n if (Array.isArray(this.buf)) // plain array\n return this.buf.slice(start, end);\n\n if (start === end) { // fix for IE 10/Win8 and others' subarray returning array of size 1\n var nativeBuffer = util.Buffer;\n return nativeBuffer\n ? nativeBuffer.alloc(0)\n : new this.buf.constructor(0);\n }\n return this._slice.call(this.buf, start, end);\n};\n\n/**\n * Reads a string preceeded by its byte length as a varint.\n * @returns {string} Value read\n */\nReader.prototype.string = function read_string() {\n var bytes = this.bytes();\n return utf8.read(bytes, 0, bytes.length);\n};\n\n/**\n * Skips the specified number of bytes if specified, otherwise skips a varint.\n * @param {number} [length] Length if known, otherwise a varint is assumed\n * @returns {Reader} `this`\n */\nReader.prototype.skip = function skip(length) {\n if (typeof length === \"number\") {\n /* istanbul ignore if */\n if (this.pos + length > this.len)\n throw indexOutOfRange(this, length);\n this.pos += length;\n } else {\n do {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n } while (this.buf[this.pos++] & 128);\n }\n return this;\n};\n\n/**\n * Skips the next element of the specified wire type.\n * @param {number} wireType Wire type received\n * @returns {Reader} `this`\n */\nReader.prototype.skipType = function(wireType) {\n switch (wireType) {\n case 0:\n this.skip();\n break;\n case 1:\n this.skip(8);\n break;\n case 2:\n this.skip(this.uint32());\n break;\n case 3:\n while ((wireType = this.uint32() & 7) !== 4) {\n this.skipType(wireType);\n }\n break;\n case 5:\n this.skip(4);\n break;\n\n /* istanbul ignore next */\n default:\n throw Error(\"invalid wire type \" + wireType + \" at offset \" + this.pos);\n }\n return this;\n};\n\nReader._configure = function(BufferReader_) {\n BufferReader = BufferReader_;\n Reader.create = create();\n BufferReader._configure();\n\n var fn = util.Long ? \"toLong\" : /* istanbul ignore next */ \"toNumber\";\n util.merge(Reader.prototype, {\n\n int64: function read_int64() {\n return readLongVarint.call(this)[fn](false);\n },\n\n uint64: function read_uint64() {\n return readLongVarint.call(this)[fn](true);\n },\n\n sint64: function read_sint64() {\n return readLongVarint.call(this).zzDecode()[fn](false);\n },\n\n fixed64: function read_fixed64() {\n return readFixed64.call(this)[fn](true);\n },\n\n sfixed64: function read_sfixed64() {\n return readFixed64.call(this)[fn](false);\n }\n\n });\n};\n","\"use strict\";\nmodule.exports = BufferReader;\n\n// extends Reader\nvar Reader = require(\"./reader\");\n(BufferReader.prototype = Object.create(Reader.prototype)).constructor = BufferReader;\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new buffer reader instance.\n * @classdesc Wire format reader using node buffers.\n * @extends Reader\n * @constructor\n * @param {Buffer} buffer Buffer to read from\n */\nfunction BufferReader(buffer) {\n Reader.call(this, buffer);\n\n /**\n * Read buffer.\n * @name BufferReader#buf\n * @type {Buffer}\n */\n}\n\nBufferReader._configure = function () {\n /* istanbul ignore else */\n if (util.Buffer)\n BufferReader.prototype._slice = util.Buffer.prototype.slice;\n};\n\n\n/**\n * @override\n */\nBufferReader.prototype.string = function read_string_buffer() {\n var len = this.uint32(); // modifies pos\n return this.buf.utf8Slice\n ? this.buf.utf8Slice(this.pos, this.pos = Math.min(this.pos + len, this.len))\n : this.buf.toString(\"utf-8\", this.pos, this.pos = Math.min(this.pos + len, this.len));\n};\n\n/**\n * Reads a sequence of bytes preceeded by its length as a varint.\n * @name BufferReader#bytes\n * @function\n * @returns {Buffer} Value read\n */\n\nBufferReader._configure();\n","\"use strict\";\nmodule.exports = Service;\n\nvar util = require(\"../util/minimal\");\n\n// Extends EventEmitter\n(Service.prototype = Object.create(util.EventEmitter.prototype)).constructor = Service;\n\n/**\n * A service method callback as used by {@link rpc.ServiceMethod|ServiceMethod}.\n *\n * Differs from {@link RPCImplCallback} in that it is an actual callback of a service method which may not return `response = null`.\n * @typedef rpc.ServiceMethodCallback\n * @template TRes extends Message<TRes>\n * @type {function}\n * @param {Error|null} error Error, if any\n * @param {TRes} [response] Response message\n * @returns {undefined}\n */\n\n/**\n * A service method part of a {@link rpc.Service} as created by {@link Service.create}.\n * @typedef rpc.ServiceMethod\n * @template TReq extends Message<TReq>\n * @template TRes extends Message<TRes>\n * @type {function}\n * @param {TReq|Properties<TReq>} request Request message or plain object\n * @param {rpc.ServiceMethodCallback<TRes>} [callback] Node-style callback called with the error, if any, and the response message\n * @returns {Promise<Message<TRes>>} Promise if `callback` has been omitted, otherwise `undefined`\n */\n\n/**\n * Constructs a new RPC service instance.\n * @classdesc An RPC service as returned by {@link Service#create}.\n * @exports rpc.Service\n * @extends util.EventEmitter\n * @constructor\n * @param {RPCImpl} rpcImpl RPC implementation\n * @param {boolean} [requestDelimited=false] Whether requests are length-delimited\n * @param {boolean} [responseDelimited=false] Whether responses are length-delimited\n */\nfunction Service(rpcImpl, requestDelimited, responseDelimited) {\n\n if (typeof rpcImpl !== \"function\")\n throw TypeError(\"rpcImpl must be a function\");\n\n util.EventEmitter.call(this);\n\n /**\n * RPC implementation. Becomes `null` once the service is ended.\n * @type {RPCImpl|null}\n */\n this.rpcImpl = rpcImpl;\n\n /**\n * Whether requests are length-delimited.\n * @type {boolean}\n */\n this.requestDelimited = Boolean(requestDelimited);\n\n /**\n * Whether responses are length-delimited.\n * @type {boolean}\n */\n this.responseDelimited = Boolean(responseDelimited);\n}\n\n/**\n * Calls a service method through {@link rpc.Service#rpcImpl|rpcImpl}.\n * @param {Method|rpc.ServiceMethod<TReq,TRes>} method Reflected or static method\n * @param {Constructor<TReq>} requestCtor Request constructor\n * @param {Constructor<TRes>} responseCtor Response constructor\n * @param {TReq|Properties<TReq>} request Request message or plain object\n * @param {rpc.ServiceMethodCallback<TRes>} callback Service callback\n * @returns {undefined}\n * @template TReq extends Message<TReq>\n * @template TRes extends Message<TRes>\n */\nService.prototype.rpcCall = function rpcCall(method, requestCtor, responseCtor, request, callback) {\n\n if (!request)\n throw TypeError(\"request must be specified\");\n\n var self = this;\n if (!callback)\n return util.asPromise(rpcCall, self, method, requestCtor, responseCtor, request);\n\n if (!self.rpcImpl) {\n setTimeout(function() { callback(Error(\"already ended\")); }, 0);\n return undefined;\n }\n\n try {\n return self.rpcImpl(\n method,\n requestCtor[self.requestDelimited ? \"encodeDelimited\" : \"encode\"](request).finish(),\n function rpcCallback(err, response) {\n\n if (err) {\n self.emit(\"error\", err, method);\n return callback(err);\n }\n\n if (response === null) {\n self.end(/* endedByRPC */ true);\n return undefined;\n }\n\n if (!(response instanceof responseCtor)) {\n try {\n response = responseCtor[self.responseDelimited ? \"decodeDelimited\" : \"decode\"](response);\n } catch (err) {\n self.emit(\"error\", err, method);\n return callback(err);\n }\n }\n\n self.emit(\"data\", response, method);\n return callback(null, response);\n }\n );\n } catch (err) {\n self.emit(\"error\", err, method);\n setTimeout(function() { callback(err); }, 0);\n return undefined;\n }\n};\n\n/**\n * Ends this service and emits the `end` event.\n * @param {boolean} [endedByRPC=false] Whether the service has been ended by the RPC implementation.\n * @returns {rpc.Service} `this`\n */\nService.prototype.end = function end(endedByRPC) {\n if (this.rpcImpl) {\n if (!endedByRPC) // signal end to rpcImpl\n this.rpcImpl(null, null, null);\n this.rpcImpl = null;\n this.emit(\"end\").off();\n }\n return this;\n};\n","\"use strict\";\n\n/**\n * Streaming RPC helpers.\n * @namespace\n */\nvar rpc = exports;\n\n/**\n * RPC implementation passed to {@link Service#create} performing a service request on network level, i.e. by utilizing http requests or websockets.\n * @typedef RPCImpl\n * @type {function}\n * @param {Method|rpc.ServiceMethod<Message<{}>,Message<{}>>} method Reflected or static method being called\n * @param {Uint8Array} requestData Request data\n * @param {RPCImplCallback} callback Callback function\n * @returns {undefined}\n * @example\n * function rpcImpl(method, requestData, callback) {\n * if (protobuf.util.lcFirst(method.name) !== \"myMethod\") // compatible with static code\n * throw Error(\"no such method\");\n * asynchronouslyObtainAResponse(requestData, function(err, responseData) {\n * callback(err, responseData);\n * });\n * }\n */\n\n/**\n * Node-style callback as used by {@link RPCImpl}.\n * @typedef RPCImplCallback\n * @type {function}\n * @param {Error|null} error Error, if any, otherwise `null`\n * @param {Uint8Array|null} [response] Response data or `null` to signal end of stream, if there hasn't been an error\n * @returns {undefined}\n */\n\nrpc.Service = require(\"./rpc/service\");\n","\"use strict\";\nmodule.exports = {};\n\n/**\n * Named roots.\n * This is where pbjs stores generated structures (the option `-r, --root` specifies a name).\n * Can also be used manually to make roots available across modules.\n * @name roots\n * @type {Object.<string,Root>}\n * @example\n * // pbjs -r myroot -o compiled.js ...\n *\n * // in another module:\n * require(\"./compiled.js\");\n *\n * // in any subsequent module:\n * var root = protobuf.roots[\"myroot\"];\n */\n","\"use strict\";\nvar protobuf = exports;\n\n/**\n * Build type, one of `\"full\"`, `\"light\"` or `\"minimal\"`.\n * @name build\n * @type {string}\n * @const\n */\nprotobuf.build = \"minimal\";\n\n// Serialization\nprotobuf.Writer = require(\"./writer\");\nprotobuf.BufferWriter = require(\"./writer_buffer\");\nprotobuf.Reader = require(\"./reader\");\nprotobuf.BufferReader = require(\"./reader_buffer\");\n\n// Utility\nprotobuf.util = require(\"./util/minimal\");\nprotobuf.rpc = require(\"./rpc\");\nprotobuf.roots = require(\"./roots\");\nprotobuf.configure = configure;\n\n/* istanbul ignore next */\n/**\n * Reconfigures the library according to the environment.\n * @returns {undefined}\n */\nfunction configure() {\n protobuf.util._configure();\n protobuf.Writer._configure(protobuf.BufferWriter);\n protobuf.Reader._configure(protobuf.BufferReader);\n}\n\n// Set up buffer utility according to the environment\nconfigure();\n","// minimal library entry point.\n\n\"use strict\";\nmodule.exports = require(\"./src/index-minimal\");\n","/*eslint-disable block-scoped-var, id-length, no-control-regex, no-magic-numbers, no-prototype-builtins, no-redeclare, no-shadow, no-var, sort-vars*/\nimport * as $protobuf from \"protobufjs/minimal\";\n\n// Common aliases\nconst $Reader = $protobuf.Reader, $Writer = $protobuf.Writer, $util = $protobuf.util;\n\n// Exported root namespace\nconst $root = $protobuf.roots[\"default\"] || ($protobuf.roots[\"default\"] = {});\n\nexport const com = $root.com = (() => {\n\n /**\n * Namespace com.\n * @exports com\n * @namespace\n */\n const com = {};\n\n com.amazonaws = (function() {\n\n /**\n * Namespace amazonaws.\n * @memberof com\n * @namespace\n */\n const amazonaws = {};\n\n amazonaws.iot = (function() {\n\n /**\n * Namespace iot.\n * @memberof com.amazonaws\n * @namespace\n */\n const iot = {};\n\n iot.securedtunneling = (function() {\n\n /**\n * Namespace securedtunneling.\n * @memberof com.amazonaws.iot\n * @namespace\n */\n const securedtunneling = {};\n\n securedtunneling.ProtocolV1Message = (function() {\n\n /**\n * Properties of a ProtocolV1Message.\n * @memberof com.amazonaws.iot.securedtunneling\n * @interface IProtocolV1Message\n * @property {com.amazonaws.iot.securedtunneling.ProtocolV1Message.Type|null} [type] ProtocolV1Message type\n * @property {number|null} [streamId] ProtocolV1Message streamId\n * @property {boolean|null} [ignorable] ProtocolV1Message ignorable\n * @property {Uint8Array|null} [payload] ProtocolV1Message payload\n */\n\n /**\n * Constructs a new ProtocolV1Message.\n * @memberof com.amazonaws.iot.securedtunneling\n * @classdesc Represents a ProtocolV1Message.\n * @implements IProtocolV1Message\n * @constructor\n * @param {com.amazonaws.iot.securedtunneling.IProtocolV1Message=} [properties] Properties to set\n */\n function ProtocolV1Message(properties) {\n if (properties)\n for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null)\n this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * ProtocolV1Message type.\n * @member {com.amazonaws.iot.securedtunneling.ProtocolV1Message.Type} type\n * @memberof com.amazonaws.iot.securedtunneling.ProtocolV1Message\n * @instance\n */\n ProtocolV1Message.prototype.type = 0;\n\n /**\n * ProtocolV1Message streamId.\n * @member {number} streamId\n * @memberof com.amazonaws.iot.securedtunneling.ProtocolV1Message\n * @instance\n */\n ProtocolV1Message.prototype.streamId = 0;\n\n /**\n * ProtocolV1Message ignorable.\n * @member {boolean} ignorable\n * @memberof com.amazonaws.iot.securedtunneling.ProtocolV1Message\n * @instance\n */\n ProtocolV1Message.prototype.ignorable = false;\n\n /**\n * ProtocolV1Message payload.\n * @member {Uint8Array} payload\n * @memberof com.amazonaws.iot.securedtunneling.ProtocolV1Message\n * @instance\n */\n ProtocolV1Message.prototype.payload = $util.newBuffer([]);\n\n /**\n * Creates a new ProtocolV1Message instance using the specified properties.\n * @function create\n * @memberof com.amazonaws.iot.securedtunneling.ProtocolV1Message\n * @static\n * @param {com.amazonaws.iot.securedtunneling.IProtocolV1Message=} [properties] Properties to set\n * @returns {com.amazonaws.iot.securedtunneling.ProtocolV1Message} ProtocolV1Message instance\n */\n ProtocolV1Message.create = function create(properties) {\n return new ProtocolV1Message(properties);\n };\n\n /**\n * Encodes the specified ProtocolV1Message message. Does not implicitly {@link com.amazonaws.iot.securedtunneling.ProtocolV1Message.verify|verify} messages.\n * @function encode\n * @memberof com.amazonaws.iot.securedtunneling.ProtocolV1Message\n * @static\n * @param {com.amazonaws.iot.securedtunneling.IProtocolV1Message} message ProtocolV1Message message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n ProtocolV1Message.encode = function encode(message, writer) {\n if (!writer)\n writer = $Writer.create();\n if (message.type != null && Object.hasOwnProperty.call(message, \"type\"))\n writer.uint32(/* id 1, wireType 0 =*/8).int32(message.type);\n if (message.streamId != null && Object.hasOwnProperty.call(message, \"streamId\"))\n writer.uint32(/* id 2, wireType 0 =*/16).int32(message.streamId);\n if (message.ignorable != null && Object.hasOwnProperty.call(message, \"ignorable\"))\n writer.uint32(/* id 3, wireType 0 =*/24).bool(message.ignorable);\n if (message.payload != null && Object.hasOwnProperty.call(message, \"payload\"))\n writer.uint32(/* id 4, wireType 2 =*/34).bytes(message.payload);\n return writer;\n };\n\n /**\n * Encodes the specified ProtocolV1Message message, length delimited. Does not implicitly {@link com.amazonaws.iot.securedtunneling.ProtocolV1Message.verify|verify} messages.\n * @function encodeDelimited\n * @memberof com.amazonaws.iot.securedtunneling.ProtocolV1Message\n * @static\n * @param {com.amazonaws.iot.securedtunneling.IProtocolV1Message} message ProtocolV1Message message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n ProtocolV1Message.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes a ProtocolV1Message message from the specified reader or buffer.\n * @function decode\n * @memberof com.amazonaws.iot.securedtunneling.ProtocolV1Message\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {com.amazonaws.iot.securedtunneling.ProtocolV1Message} ProtocolV1Message\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n ProtocolV1Message.decode = function decode(reader, length, error) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n let end = length === undefined ? reader.len : reader.pos + length, message = new $root.com.amazonaws.iot.securedtunneling.ProtocolV1Message();\n while (reader.pos < end) {\n let tag = reader.uint32();\n if (tag === error)\n break;\n switch (tag >>> 3) {\n case 1: {\n message.type = reader.int32();\n break;\n }\n case 2: {\n message.streamId = reader.int32();\n break;\n }\n case 3: {\n message.ignorable = reader.bool();\n break;\n }\n case 4: {\n message.payload = reader.bytes();\n break;\n }\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n };\n\n /**\n * Decodes a ProtocolV1Message message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof com.amazonaws.iot.securedtunneling.ProtocolV1Message\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {com.amazonaws.iot.securedtunneling.ProtocolV1Message} ProtocolV1Message\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n ProtocolV1Message.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader))\n reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies a ProtocolV1Message message.\n * @function verify\n * @memberof com.amazonaws.iot.securedtunneling.ProtocolV1Message\n * @static\n * @param {Object.<string,*>} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n ProtocolV1Message.verify = function verify(message) {\n if (typeof message !== \"object\" || message === null)\n return \"object expected\";\n if (message.type != null && message.hasOwnProperty(\"type\"))\n switch (message.type) {\n default:\n return \"type: enum value expected\";\n case 0:\n case 1:\n case 2:\n case 3:\n break;\n }\n if (message.streamId != null && message.hasOwnProperty(\"streamId\"))\n if (!$util.isInteger(message.streamId))\n return \"streamId: integer expected\";\n if (message.ignorable != null && message.hasOwnProperty(\"ignorable\"))\n if (typeof message.ignorable !== \"boolean\")\n return \"ignorable: boolean expected\";\n if (message.payload != null && message.hasOwnProperty(\"payload\"))\n if (!(message.payload && typeof message.payload.length === \"number\" || $util.isString(message.payload)))\n return \"payload: buffer expected\";\n return null;\n };\n\n /**\n * Creates a ProtocolV1Message message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof com.amazonaws.iot.securedtunneling.ProtocolV1Message\n * @static\n * @param {Object.<string,*>} object Plain object\n * @returns {com.amazonaws.iot.securedtunneling.ProtocolV1Message} ProtocolV1Message\n */\n ProtocolV1Message.fromObject = function fromObject(object) {\n if (object instanceof $root.com.amazonaws.iot.securedtunneling.ProtocolV1Message)\n return object;\n let message = new $root.com.amazonaws.iot.securedtunneling.ProtocolV1Message();\n switch (object.type) {\n default:\n if (typeof object.type === \"number\") {\n message.type = object.type;\n break;\n }\n break;\n case \"UNKNOWN\":\n case 0:\n message.type = 0;\n break;\n case \"DATA\":\n case 1:\n message.type = 1;\n break;\n case \"STREAM_START\":\n case 2:\n message.type = 2;\n break;\n case \"STREAM_END\":\n case 3:\n message.type = 3;\n break;\n }\n if (object.streamId != null)\n message.streamId = object.streamId | 0;\n if (object.ignorable != null)\n message.ignorable = Boolean(object.ignorable);\n if (object.payload != null)\n if (typeof object.payload === \"string\")\n $util.base64.decode(object.payload, message.payload = $util.newBuffer($util.base64.length(object.payload)), 0);\n else if (object.payload.length >= 0)\n message.payload = object.payload;\n return message;\n };\n\n /**\n * Creates a plain object from a ProtocolV1Message message. Also converts values to other types if specified.\n * @function toObject\n * @memberof com.amazonaws.iot.securedtunneling.ProtocolV1Message\n * @static\n * @param {com.amazonaws.iot.securedtunneling.ProtocolV1Message} message ProtocolV1Message\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.<string,*>} Plain object\n */\n ProtocolV1Message.toObject = function toObject(message, options) {\n if (!options)\n options = {};\n let object = {};\n if (options.defaults) {\n object.type = options.enums === String ? \"UNKNOWN\" : 0;\n object.streamId = 0;\n object.ignorable = false;\n if (options.bytes === String)\n object.payload = \"\";\n else {\n object.payload = [];\n if (options.bytes !== Array)\n object.payload = $util.newBuffer(object.payload);\n }\n }\n if (message.type != null && message.hasOwnProperty(\"type\"))\n object.type = options.enums === String ? $root.com.amazonaws.iot.securedtunneling.ProtocolV1Message.Type[message.type] === undefined ? message.type : $root.com.amazonaws.iot.securedtunneling.ProtocolV1Message.Type[message.type] : message.type;\n if (message.streamId != null && message.hasOwnProperty(\"streamId\"))\n object.streamId = message.streamId;\n if (message.ignorable != null && message.hasOwnProperty(\"ignorable\"))\n object.ignorable = message.ignorable;\n if (message.payload != null && message.hasOwnProperty(\"payload\"))\n object.payload = options.bytes === String ? $util.base64.encode(message.payload, 0, message.payload.length) : options.bytes === Array ? Array.prototype.slice.call(message.payload) : message.payload;\n return object;\n };\n\n /**\n * Converts this ProtocolV1Message to JSON.\n * @function toJSON\n * @memberof com.amazonaws.iot.securedtunneling.ProtocolV1Message\n * @instance\n * @returns {Object.<string,*>} JSON object\n */\n ProtocolV1Message.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n /**\n * Gets the default type url for ProtocolV1Message\n * @function getTypeUrl\n * @memberof com.amazonaws.iot.securedtunneling.ProtocolV1Message\n * @static\n * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n * @returns {string} The default type url\n */\n ProtocolV1Message.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n if (typeUrlPrefix === undefined) {\n typeUrlPrefix = \"type.googleapis.com\";\n }\n return typeUrlPrefix + \"/com.amazonaws.iot.securedtunneling.ProtocolV1Message\";\n };\n\n /**\n * Type enum.\n * @name com.amazonaws.iot.securedtunneling.ProtocolV1Message.Type\n * @enum {number}\n * @property {number} UNKNOWN=0 UNKNOWN value\n * @property {number} DATA=1 DATA value\n * @property {number} STREAM_START=2 STREAM_START value\n * @property {number} STREAM_END=3 STREAM_END value\n */\n ProtocolV1Message.Type = (function() {\n const valuesById = {}, values = Object.create(valuesById);\n values[valuesById[0] = \"UNKNOWN\"] = 0;\n values[valuesById[1] = \"DATA\"] = 1;\n values[valuesById[2] = \"STREAM_START\"] = 2;\n values[valuesById[3] = \"STREAM_END\"] = 3;\n return values;\n })();\n\n return ProtocolV1Message;\n })();\n\n securedtunneling.ProtocolV2Message = (function() {\n\n /**\n * Properties of a ProtocolV2Message.\n * @memberof com.amazonaws.iot.securedtunneling\n * @interface IProtocolV2Message\n * @property {com.amazonaws.iot.securedtunneling.ProtocolV2Message.Type|null} [type] ProtocolV2Message type\n * @property {number|null} [streamId] ProtocolV2Message streamId\n * @property {boolean|null} [ignorable] ProtocolV2Message ignorable\n * @property {Uint8Array|null} [payload] ProtocolV2Message payload\n * @property {string|null} [serviceId] ProtocolV2Message serviceId\n * @property {Array.<string>|null} [availableServiceIds] ProtocolV2Message availableServiceIds\n */\n\n /**\n * Constructs a new ProtocolV2Message.\n * @memberof com.amazonaws.iot.securedtunneling\n * @classdesc Represents a ProtocolV2Message.\n * @implements IProtocolV2Message\n * @constructor\n * @param {com.amazonaws.iot.securedtunneling.IProtocolV2Message=} [properties] Properties to set\n */\n function ProtocolV2Message(properties) {\n this.availableServiceIds = [];\n if (properties)\n for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null)\n this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * ProtocolV2Message type.\n * @member {com.amazonaws.iot.securedtunneling.ProtocolV2Message.Type} type\n * @memberof com.amazonaws.iot.securedtunneling.ProtocolV2Message\n * @instance\n */\n ProtocolV2Message.prototype.type = 0;\n\n /**\n * ProtocolV2Message streamId.\n * @member {number} streamId\n * @memberof com.amazonaws.iot.securedtunneling.ProtocolV2Message\n * @instance\n */\n ProtocolV2Message.prototype.streamId = 0;\n\n /**\n * ProtocolV2Message ignorable.\n * @member {boolean} ignorable\n * @memberof com.amazonaws.iot.securedtunneling.ProtocolV2Message\n * @instance\n */\n ProtocolV2Message.prototype.ignorable = false;\n\n /**\n * ProtocolV2Message payload.\n * @member {Uint8Array} payload\n * @memberof com.amazonaws.iot.securedtunneling.ProtocolV2Message\n * @instance\n */\n ProtocolV2Message.prototype.payload = $util.newBuffer([]);\n\n /**\n * ProtocolV2Message serviceId.\n * @member {string} serviceId\n * @memberof com.amazonaws.iot.securedtunneling.ProtocolV2Message\n * @instance\n */\n ProtocolV2Message.prototype.serviceId = \"\";\n\n /**\n * ProtocolV2Message availableServiceIds.\n * @member {Array.<string>} availableServiceIds\n * @memberof com.amazonaws.iot.securedtunneling.ProtocolV2Message\n * @instance\n */\n ProtocolV2Message.prototype.availableServiceIds = $util.emptyArray;\n\n /**\n * Creates a new ProtocolV2Message instance using the specified properties.\n * @function create\n * @memberof com.amazonaws.iot.securedtunneling.ProtocolV2Message\n * @static\n * @param {com.amazonaws.iot.securedtunneling.IProtocolV2Message=} [properties] Properties to set\n * @returns {com.amazonaws.iot.securedtunneling.ProtocolV2Message} ProtocolV2Message instance\n */\n ProtocolV2Message.create = function create(properties) {\n return new ProtocolV2Message(properties);\n };\n\n /**\n * Encodes the specified ProtocolV2Message message. Does not implicitly {@link com.amazonaws.iot.securedtunneling.ProtocolV2Message.verify|verify} messages.\n * @function encode\n * @memberof com.amazonaws.iot.securedtunneling.ProtocolV2Message\n * @static\n * @param {com.amazonaws.iot.securedtunneling.IProtocolV2Message} message ProtocolV2Message message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n ProtocolV2Message.encode = function encode(message, writer) {\n if (!writer)\n writer = $Writer.create();\n if (message.type != null && Object.hasOwnProperty.call(message, \"type\"))\n writer.uint32(/* id 1, wireType 0 =*/8).int32(message.type);\n if (message.streamId != null && Object.hasOwnProperty.call(message, \"streamId\"))\n writer.uint32(/* id 2, wireType 0 =*/16).int32(message.streamId);\n if (message.ignorable != null && Object.hasOwnProperty.call(message, \"ignorable\"))\n writer.uint32(/* id 3, wireType 0 =*/24).bool(message.ignorable);\n if (message.payload != null && Object.hasOwnProperty.call(message, \"payload\"))\n writer.uint32(/* id 4, wireType 2 =*/34).bytes(message.payload);\n if (message.serviceId != null && Object.hasOwnProperty.call(message, \"serviceId\"))\n writer.uint32(/* id 5, wireType 2 =*/42).string(message.serviceId);\n if (message.availableServiceIds != null && message.availableServiceIds.length)\n for (let i = 0; i < message.availableServiceIds.length; ++i)\n writer.uint32(/* id 6, wireType 2 =*/50).string(message.availableServiceIds[i]);\n return writer;\n };\n\n /**\n * Encodes the specified ProtocolV2Message message, length delimited. Does not implicitly {@link com.amazonaws.iot.securedtunneling.ProtocolV2Message.verify|verify} messages.\n * @function encodeDelimited\n * @memberof com.amazonaws.iot.securedtunneling.ProtocolV2Message\n * @static\n * @param {com.amazonaws.iot.securedtunneling.IProtocolV2Message} message ProtocolV2Message message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n ProtocolV2Message.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes a ProtocolV2Message message from the specified reader or buffer.\n * @function decode\n * @memberof com.amazonaws.iot.securedtunneling.ProtocolV2Message\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {com.amazonaws.iot.securedtunneling.ProtocolV2Message} ProtocolV2Message\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n ProtocolV2Message.decode = function decode(reader, length, error) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n let end = length === undefined ? reader.len : reader.pos + length, message = new $root.com.amazonaws.iot.securedtunneling.ProtocolV2Message();\n while (reader.pos < end) {\n let tag = reader.uint32();\n if (tag === error)\n break;\n switch (tag >>> 3) {\n case 1: {\n message.type = reader.int32();\n break;\n }\n case 2: {\n message.streamId = reader.int32();\n break;\n }\n case 3: {\n message.ignorable = reader.bool();\n break;\n }\n case 4: {\n message.payload = reader.bytes();\n break;\n }\n case 5: {\n message.serviceId = reader.string();\n break;\n }\n case 6: {\n if (!(message.availableServiceIds && message.availableServiceIds.length))\n message.availableServiceIds = [];\n message.availableServiceIds.push(reader.string());\n break;\n }\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n };\n\n /**\n * Decodes a ProtocolV2Message message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof com.amazonaws.iot.securedtunneling.ProtocolV2Message\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {com.amazonaws.iot.securedtunneling.ProtocolV2Message} ProtocolV2Message\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n ProtocolV2Message.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader))\n reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies a ProtocolV2Message message.\n * @function verify\n * @memberof com.amazonaws.iot.securedtunneling.ProtocolV2Message\n * @static\n * @param {Object.<string,*>} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n ProtocolV2Message.verify = function verify(message) {\n if (typeof message !== \"object\" || message === null)\n return \"object expected\";\n if (message.type != null && message.hasOwnProperty(\"type\"))\n switch (message.type) {\n default:\n return \"type: enum value expected\";\n case 0:\n case 1:\n case 2:\n case 3:\n case 4:\n case 5:\n break;\n }\n if (message.streamId != null && message.hasOwnProperty(\"streamId\"))\n if (!$util.isInteger(message.streamId))\n return \"streamId: integer expected\";\n if (message.ignorable != null && message.hasOwnProperty(\"ignorable\"))\n if (typeof message.ignorable !== \"boolean\")\n return \"ignorable: boolean expected\";\n if (message.payload != null && message.hasOwnProperty(\"payload\"))\n if (!(message.payload && typeof message.payload.length === \"number\" || $util.isString(message.payload)))\n return \"payload: buffer expected\";\n if (message.serviceId != null && message.hasOwnProperty(\"serviceId\"))\n if (!$util.isString(message.serviceId))\n return \"serviceId: string expected\";\n if (message.availableServiceIds != null && message.hasOwnProperty(\"availableServiceIds\")) {\n if (!Array.isArray(message.availableServiceIds))\n return \"availableServiceIds: array expected\";\n for (let i = 0; i < message.availableServiceIds.length; ++i)\n if (!$util.isString(message.availableServiceIds[i]))\n return \"availableServiceIds: string[] expected\";\n }\n return null;\n };\n\n /**\n * Creates a ProtocolV2Message message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof com.amazonaws.iot.securedtunneling.ProtocolV2Message\n * @static\n * @param {Object.<string,*>} object Plain object\n * @returns {com.amazonaws.iot.securedtunneling.ProtocolV2Message} ProtocolV2Message\n */\n ProtocolV2Message.fromObject = function fromObject(object) {\n if (object instanceof $root.com.amazonaws.iot.securedtunneling.ProtocolV2Message)\n return object;\n let message = new $root.com.amazonaws.iot.securedtunneling.ProtocolV2Message();\n switch (object.type) {\n default:\n if (typeof object.type === \"number\") {\n message.type = object.type;\n break;\n }\n break;\n case \"UNKNOWN\":\n case 0:\n message.type = 0;\n break;\n case \"DATA\":\n case 1:\n message.type = 1;\n break;\n case \"STREAM_START\":\n case 2:\n message.type = 2;\n break;\n case \"STREAM_RESET\":\n case 3:\n message.type = 3;\n break;\n case \"SESSION_RESET\":\n case 4:\n message.type = 4;\n break;\n case \"SERVICE_IDS\":\n case 5:\n message.type = 5;\n break;\n }\n if (object.streamId != null)\n message.streamId = object.streamId | 0;\n if (object.ignorable != null)\n message.ignorable = Boolean(object.ignorable);\n if (object.payload != null)\n if (typeof object.payload === \"string\")\n $util.base64.decode(object.payload, message.payload = $util.newBuffer($util.base64.length(object.payload)), 0);\n else if (object.payload.length >= 0)\n message.payload = object.payload;\n if (object.serviceId != null)\n message.serviceId = String(object.serviceId);\n if (object.availableServiceIds) {\n if (!Array.isArray(object.availableServiceIds))\n throw TypeError(\".com.amazonaws.iot.securedtunneling.ProtocolV2Message.availableServiceIds: array expected\");\n message.availableServiceIds = [];\n for (let i = 0; i < object.availableServiceIds.length; ++i)\n message.availableServiceIds[i] = String(object.availableServiceIds[i]);\n }\n return message;\n };\n\n /**\n * Creates a plain object from a ProtocolV2Message message. Also converts values to other types if specified.\n * @function toObject\n * @memberof com.amazonaws.iot.securedtunneling.ProtocolV2Message\n * @static\n * @param {com.amazonaws.iot.securedtunneling.ProtocolV2Message} message ProtocolV2Message\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.<string,*>} Plain object\n */\n ProtocolV2Message.toObject = function toObject(message, options) {\n if (!options)\n options = {};\n let object = {};\n if (options.arrays || options.defaults)\n object.availableServiceIds = [];\n if (options.defaults) {\n object.type = options.enums === String ? \"UNKNOWN\" : 0;\n object.streamId = 0;\n object.ignorable = false;\n if (options.bytes === String)\n object.payload = \"\";\n else {\n object.payload = [];\n if (options.bytes !== Array)\n object.payload = $util.newBuffer(object.payload);\n }\n object.serviceId = \"\";\n }\n if (message.type != null && message.hasOwnProperty(\"type\"))\n object.type = options.enums === String ? $root.com.amazonaws.iot.securedtunneling.ProtocolV2Message.Type[message.type] === undefined ? message.type : $root.com.amazonaws.iot.securedtunneling.ProtocolV2Message.Type[message.type] : message.type;\n if (message.streamId != null && message.hasOwnProperty(\"streamId\"))\n object.streamId = message.streamId;\n if (message.ignorable != null && message.hasOwnProperty(\"ignorable\"))\n object.ignorable = message.ignorable;\n if (message.payload != null && message.hasOwnProperty(\"payload\"))\n object.payload = options.bytes === String ? $util.base64.encode(message.payload, 0, message.payload.length) : options.bytes === Array ? Array.prototype.slice.call(message.payload) : message.payload;\n if (message.serviceId != null && message.hasOwnProperty(\"serviceId\"))\n object.serviceId = message.serviceId;\n if (message.availableServiceIds && message.availableServiceIds.length) {\n object.availableServiceIds = [];\n for (let j = 0; j < message.availableServiceIds.length; ++j)\n object.availableServiceIds[j] = message.availableServiceIds[j];\n }\n return object;\n };\n\n /**\n * Converts this ProtocolV2Message to JSON.\n * @function toJSON\n * @memberof com.amazonaws.iot.securedtunneling.ProtocolV2Message\n * @instance\n * @returns {Object.<string,*>} JSON object\n */\n ProtocolV2Message.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n /**\n * Gets the default type url for ProtocolV2Message\n * @function getTypeUrl\n * @memberof com.amazonaws.iot.securedtunneling.ProtocolV2Message\n * @static\n * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n * @returns {string} The default type url\n */\n ProtocolV2Message.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n if (typeUrlPrefix === undefined) {\n typeUrlPrefix = \"type.googleapis.com\";\n }\n return typeUrlPrefix + \"/com.amazonaws.iot.securedtunneling.ProtocolV2Message\";\n };\n\n /**\n * Type enum.\n * @name com.amazonaws.iot.securedtunneling.ProtocolV2Message.Type\n * @enum {number}\n * @property {number} UNKNOWN=0 UNKNOWN value\n * @property {number} DATA=1 DATA value\n * @property {number} STREAM_START=2 STREAM_START value\n * @property {number} STREAM_RESET=3 STREAM_RESET value\n * @property {number} SESSION_RESET=4 SESSION_RESET value\n * @property {number} SERVICE_IDS=5 SERVICE_IDS value\n */\n ProtocolV2Message.Type = (function() {\n const valuesById = {}, values = Object.create(valuesById);\n values[valuesById[0] = \"UNKNOWN\"] = 0;\n values[valuesById[1] = \"DATA\"] = 1;\n values[valuesById[2] = \"STREAM_START\"] = 2;\n values[valuesById[3] = \"STREAM_RESET\"] = 3;\n values[valuesById[4] = \"SESSION_RESET\"] = 4;\n values[valuesById[5] = \"SERVICE_IDS\"] = 5;\n return values;\n })();\n\n return ProtocolV2Message;\n })();\n\n securedtunneling.ProtocolV3Message = (function() {\n\n /**\n * Properties of a ProtocolV3Message.\n * @memberof com.amazonaws.iot.securedtunneling\n * @interface IProtocolV3Message\n * @property {com.amazonaws.iot.securedtunneling.ProtocolV3Message.Type|null} [type] ProtocolV3Message type\n * @property {number|null} [streamId] ProtocolV3Message streamId\n * @property {boolean|null} [ignorable] ProtocolV3Message ignorable\n * @property {Uint8Array|null} [payload] ProtocolV3Message payload\n * @property {string|null} [serviceId] ProtocolV3Message serviceId\n * @property {Array.<string>|null} [availableServiceIds] ProtocolV3Message availableServiceIds\n * @property {number|null} [connectionId] ProtocolV3Message connectionId\n */\n\n /**\n * Constructs a new ProtocolV3Message.\n * @memberof com.amazonaws.iot.securedtunneling\n * @classdesc Represents a ProtocolV3Message.\n * @implements IProtocolV3Message\n * @constructor\n * @param {com.amazonaws.iot.securedtunneling.IProtocolV3Message=} [properties] Properties to set\n */\n function ProtocolV3Message(properties) {\n this.availableServiceIds = [];\n if (properties)\n for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null)\n this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * ProtocolV3Message type.\n * @member {com.amazonaws.iot.securedtunneling.ProtocolV3Message.Type} type\n * @memberof com.amazonaws.iot.securedtunneling.ProtocolV3Message\n * @instance\n */\n ProtocolV3Message.prototype.type = 0;\n\n /**\n * ProtocolV3Message streamId.\n * @member {number} streamId\n * @memberof com.amazonaws.iot.securedtunneling.ProtocolV3Message\n * @instance\n */\n ProtocolV3Message.prototype.streamId = 0;\n\n /**\n * ProtocolV3Message ignorable.\n * @member {boolean} ignorable\n * @memberof com.amazonaws.iot.securedtunneling.ProtocolV3Message\n * @instance\n */\n ProtocolV3Message.prototype.ignorable = false;\n\n /**\n * ProtocolV3Message payload.\n * @member {Uint8Array} payload\n * @memberof com.amazonaws.iot.securedtunneling.ProtocolV3Message\n * @instance\n */\n ProtocolV3Message.prototype.payload = $util.newBuffer([]);\n\n /**\n * ProtocolV3Message serviceId.\n * @member {string} serviceId\n * @memberof com.amazonaws.iot.securedtunneling.ProtocolV3Message\n * @instance\n */\n ProtocolV3Message.prototype.serviceId = \"\";\n\n /**\n * ProtocolV3Message availableServiceIds.\n * @member {Array.<string>} availableServiceIds\n * @memberof com.amazonaws.iot.securedtunneling.ProtocolV3Message\n * @instance\n */\n ProtocolV3Message.prototype.availableServiceIds = $util.emptyArray;\n\n /**\n * ProtocolV3Message connectionId.\n * @member {number} connectionId\n * @memberof com.amazonaws.iot.securedtunneling.ProtocolV3Message\n * @instance\n */\n ProtocolV3Message.prototype.connectionId = 0;\n\n /**\n * Creates a new ProtocolV3Message instance using the specified properties.\n * @function create\n * @memberof com.amazonaws.iot.securedtunneling.ProtocolV3Message\n * @static\n * @param {com.amazonaws.iot.securedtunneling.IProtocolV3Message=} [properties] Properties to set\n * @returns {com.amazonaws.iot.securedtunneling.ProtocolV3Message} ProtocolV3Message instance\n */\n ProtocolV3Message.create = function create(properties) {\n return new ProtocolV3Message(properties);\n };\n\n /**\n * Encodes the specified ProtocolV3Message message. Does not implicitly {@link com.amazonaws.iot.securedtunneling.ProtocolV3Message.verify|verify} messages.\n * @function encode\n * @memberof com.amazonaws.iot.securedtunneling.ProtocolV3Message\n * @static\n * @param {com.amazonaws.iot.securedtunneling.IProtocolV3Message} message ProtocolV3Message message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n ProtocolV3Message.encode = function encode(message, writer) {\n if (!writer)\n writer = $Writer.create();\n if (message.type != null && Object.hasOwnProperty.call(message, \"type\"))\n writer.uint32(/* id 1, wireType 0 =*/8).int32(message.type);\n if (message.streamId != null && Object.hasOwnProperty.call(message, \"streamId\"))\n writer.uint32(/* id 2, wireType 0 =*/16).int32(message.streamId);\n if (message.ignorable != null && Object.hasOwnProperty.call(message, \"ignorable\"))\n writer.uint32(/* id 3, wireType 0 =*/24).bool(message.ignorable);\n if (message.payload != null && Object.hasOwnProperty.call(message, \"payload\"))\n writer.uint32(/* id 4, wireType 2 =*/34).bytes(message.payload);\n if (message.serviceId != null && Object.hasOwnProperty.call(message, \"serviceId\"))\n writer.uint32(/* id 5, wireType 2 =*/42).string(message.serviceId);\n if (message.availableServiceIds != null && message.availableServiceIds.length)\n for (let i = 0; i < message.availableServiceIds.length; ++i)\n writer.uint32(/* id 6, wireType 2 =*/50).string(message.availableServiceIds[i]);\n if (message.connectionId != null && Object.hasOwnProperty.call(message, \"connectionId\"))\n writer.uint32(/* id 7, wireType 0 =*/56).uint32(message.connectionId);\n return writer;\n };\n\n /**\n * Encodes the specified ProtocolV3Message message, length delimited. Does not implicitly {@link com.amazonaws.iot.securedtunneling.ProtocolV3Message.verify|verify} messages.\n * @function encodeDelimited\n * @memberof com.amazonaws.iot.securedtunneling.ProtocolV3Message\n * @static\n * @param {com.amazonaws.iot.securedtunneling.IProtocolV3Message} message ProtocolV3Message message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n ProtocolV3Message.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes a ProtocolV3Message message from the specified reader or buffer.\n * @function decode\n * @memberof com.amazonaws.iot.securedtunneling.ProtocolV3Message\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {com.amazonaws.iot.securedtunneling.ProtocolV3Message} ProtocolV3Message\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n ProtocolV3Message.decode = function decode(reader, length, error) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n let end = length === undefined ? reader.len : reader.pos + length, message = new $root.com.amazonaws.iot.securedtunneling.ProtocolV3Message();\n while (reader.pos < end) {\n let tag = reader.uint32();\n if (tag === error)\n break;\n switch (tag >>> 3) {\n case 1: {\n message.type = reader.int32();\n break;\n }\n case 2: {\n message.streamId = reader.int32();\n break;\n }\n case 3: {\n message.ignorable = reader.bool();\n break;\n }\n case 4: {\n message.payload = reader.bytes();\n break;\n }\n case 5: {\n message.serviceId = reader.string();\n break;\n }\n case 6: {\n if (!(message.availableServiceIds && message.availableServiceIds.length))\n message.availableServiceIds = [];\n message.availableServiceIds.push(reader.string());\n break;\n }\n case 7: {\n message.connectionId = reader.uint32();\n break;\n }\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n };\n\n /**\n * Decodes a ProtocolV3Message message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof com.amazonaws.iot.securedtunneling.ProtocolV3Message\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {com.amazonaws.iot.securedtunneling.ProtocolV3Message} ProtocolV3Message\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n ProtocolV3Message.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader))\n reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies a ProtocolV3Message message.\n * @function verify\n * @memberof com.amazonaws.iot.securedtunneling.ProtocolV3Message\n * @static\n * @param {Object.<string,*>} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n ProtocolV3Message.verify = function verify(message) {\n if (typeof message !== \"object\" || message === null)\n return \"object expected\";\n if (message.type != null && message.hasOwnProperty(\"type\"))\n switch (message.type) {\n default:\n return \"type: enum value expected\";\n case 0:\n case 1:\n case 2:\n case 3:\n case 4:\n case 5:\n case 6:\n case 7:\n break;\n }\n if (message.streamId != null && message.hasOwnProperty(\"streamId\"))\n if (!$util.isInteger(message.streamId))\n return \"streamId: integer expected\";\n if (message.ignorable != null && message.hasOwnProperty(\"ignorable\"))\n if (typeof message.ignorable !== \"boolean\")\n return \"ignorable: boolean expected\";\n if (message.payload != null && message.hasOwnProperty(\"payload\"))\n if (!(message.payload && typeof message.payload.length === \"number\" || $util.isString(message.payload)))\n return \"payload: buffer expected\";\n if (message.serviceId != null && message.hasOwnProperty(\"serviceId\"))\n if (!$util.isString(message.serviceId))\n return \"serviceId: string expected\";\n if (message.availableServiceIds != null && message.hasOwnProperty(\"availableServiceIds\")) {\n if (!Array.isArray(message.availableServiceIds))\n return \"availableServiceIds: array expected\";\n for (let i = 0; i < message.availableServiceIds.length; ++i)\n if (!$util.isString(message.availableServiceIds[i]))\n return \"availableServiceIds: string[] expected\";\n }\n if (message.connectionId != null && message.hasOwnProperty(\"connectionId\"))\n if (!$util.isInteger(message.connectionId))\n return \"connectionId: integer expected\";\n return null;\n };\n\n /**\n * Creates a ProtocolV3Message message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof com.amazonaws.iot.securedtunneling.ProtocolV3Message\n * @static\n * @param {Object.<string,*>} object Plain object\n * @returns {com.amazonaws.iot.securedtunneling.ProtocolV3Message} ProtocolV3Message\n */\n ProtocolV3Message.fromObject = function fromObject(object) {\n if (object instanceof $root.com.amazonaws.iot.securedtunneling.ProtocolV3Message)\n return object;\n let message = new $root.com.amazonaws.iot.securedtunneling.ProtocolV3Message();\n switch (object.type) {\n default:\n if (typeof object.type === \"number\") {\n message.type = object.type;\n break;\n }\n break;\n case \"UNKNOWN\":\n case 0:\n message.type = 0;\n break;\n case \"DATA\":\n case 1:\n message.type = 1;\n break;\n case \"STREAM_START\":\n case 2:\n message.type = 2;\n break;\n case \"STREAM_RESET\":\n case 3:\n message.type = 3;\n break;\n case \"SESSION_RESET\":\n case 4:\n message.type = 4;\n break;\n case \"SERVICE_IDS\":\n case 5:\n message.type = 5;\n break;\n case \"CONNECTION_START\":\n case 6:\n message.type = 6;\n break;\n case \"CONNECTION_RESET\":\n case 7:\n message.type = 7;\n break;\n }\n if (object.streamId != null)\n message.streamId = object.streamId | 0;\n if (object.ignorable != null)\n message.ignorable = Boolean(object.ignorable);\n if (object.payload != null)\n if (typeof object.payload === \"string\")\n $util.base64.decode(object.payload, message.payload = $util.newBuffer($util.base64.length(object.payload)), 0);\n else if (object.payload.length >= 0)\n message.payload = object.payload;\n if (object.serviceId != null)\n message.serviceId = String(object.serviceId);\n if (object.availableServiceIds) {\n if (!Array.isArray(object.availableServiceIds))\n throw TypeError(\".com.amazonaws.iot.securedtunneling.ProtocolV3Message.availableServiceIds: array expected\");\n message.availableServiceIds = [];\n for (let i = 0; i < object.availableServiceIds.length; ++i)\n message.availableServiceIds[i] = String(object.availableServiceIds[i]);\n }\n if (object.connectionId != null)\n message.connectionId = object.connectionId >>> 0;\n return message;\n };\n\n /**\n * Creates a plain object from a ProtocolV3Message message. Also converts values to other types if specified.\n * @function toObject\n * @memberof com.amazonaws.iot.securedtunneling.ProtocolV3Message\n * @static\n * @param {com.amazonaws.iot.securedtunneling.ProtocolV3Message} message ProtocolV3Message\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.<string,*>} Plain object\n */\n ProtocolV3Message.toObject = function toObject(message, options) {\n if (!options)\n options = {};\n let object = {};\n if (options.arrays || options.defaults)\n object.availableServiceIds = [];\n if (options.defaults) {\n object.type = options.enums === String ? \"UNKNOWN\" : 0;\n object.streamId = 0;\n object.ignorable = false;\n if (options.bytes === String)\n object.payload = \"\";\n else {\n object.payload = [];\n if (options.bytes !== Array)\n object.payload = $util.newBuffer(object.payload);\n }\n object.serviceId = \"\";\n object.connectionId = 0;\n }\n if (message.type != null && message.hasOwnProperty(\"type\"))\n object.type = options.enums === String ? $root.com.amazonaws.iot.securedtunneling.ProtocolV3Message.Type[message.type] === undefined ? message.type : $root.com.amazonaws.iot.securedtunneling.ProtocolV3Message.Type[message.type] : message.type;\n if (message.streamId != null && message.hasOwnProperty(\"streamId\"))\n object.streamId = message.streamId;\n if (message.ignorable != null && message.hasOwnProperty(\"ignorable\"))\n object.ignorable = message.ignorable;\n if (message.payload != null && message.hasOwnProperty(\"payload\"))\n object.payload = options.bytes === String ? $util.base64.encode(message.payload, 0, message.payload.length) : options.bytes === Array ? Array.prototype.slice.call(message.payload) : message.payload;\n if (message.serviceId != null && message.hasOwnProperty(\"serviceId\"))\n object.serviceId = message.serviceId;\n if (message.availableServiceIds && message.availableServiceIds.length) {\n object.availableServiceIds = [];\n for (let j = 0; j < message.availableServiceIds.length; ++j)\n object.availableServiceIds[j] = message.availableServiceIds[j];\n }\n if (message.connectionId != null && message.hasOwnProperty(\"connectionId\"))\n object.connectionId = message.connectionId;\n return object;\n };\n\n /**\n * Converts this ProtocolV3Message to JSON.\n * @function toJSON\n * @memberof com.amazonaws.iot.securedtunneling.ProtocolV3Message\n * @instance\n * @returns {Object.<string,*>} JSON object\n */\n ProtocolV3Message.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n /**\n * Gets the default type url for ProtocolV3Message\n * @function getTypeUrl\n * @memberof com.amazonaws.iot.securedtunneling.ProtocolV3Message\n * @static\n * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n * @returns {string} The default type url\n */\n ProtocolV3Message.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n if (typeUrlPrefix === undefined) {\n typeUrlPrefix = \"type.googleapis.com\";\n }\n return typeUrlPrefix + \"/com.amazonaws.iot.securedtunneling.ProtocolV3Message\";\n };\n\n /**\n * Type enum.\n * @name com.amazonaws.iot.securedtunneling.ProtocolV3Message.Type\n * @enum {number}\n * @property {number} UNKNOWN=0 UNKNOWN value\n * @property {number} DATA=1 DATA value\n * @property {number} STREAM_START=2 STREAM_START value\n * @property {number} STREAM_RESET=3 STREAM_RESET value\n * @property {number} SESSION_RESET=4 SESSION_RESET value\n * @property {number} SERVICE_IDS=5 SERVICE_IDS value\n * @property {number} CONNECTION_START=6 CONNECTION_START value\n * @property {number} CONNECTION_RESET=7 CONNECTION_RESET value\n */\n ProtocolV3Message.Type = (function() {\n const valuesById = {}, values = Object.create(valuesById);\n values[valuesById[0] = \"UNKNOWN\"] = 0;\n values[valuesById[1] = \"DATA\"] = 1;\n values[valuesById[2] = \"STREAM_START\"] = 2;\n values[valuesById[3] = \"STREAM_RESET\"] = 3;\n values[valuesById[4] = \"SESSION_RESET\"] = 4;\n values[valuesById[5] = \"SERVICE_IDS\"] = 5;\n values[valuesById[6] = \"CONNECTION_START\"] = 6;\n values[valuesById[7] = \"CONNECTION_RESET\"] = 7;\n return values;\n })();\n\n return ProtocolV3Message;\n })();\n\n return securedtunneling;\n })();\n\n return iot;\n })();\n\n return amazonaws;\n })();\n\n return com;\n})();\n\nexport { $root as default };\n","import { Transport } from \"./transport\";\nimport * as protobuf from \"./aws-iot-tunnel/protobuf-messages\";\n\n// Get the message classes from the protobuf namespace\nconst ProtocolV1Message =\n protobuf.com.amazonaws.iot.securedtunneling.ProtocolV1Message;\nconst ProtocolV2Message =\n protobuf.com.amazonaws.iot.securedtunneling.ProtocolV2Message;\nconst ProtocolV3Message =\n protobuf.com.amazonaws.iot.securedtunneling.ProtocolV3Message;\n\n// Type definitions for the tunnel messages\nexport type TunnelMessage =\n | protobuf.com.amazonaws.iot.securedtunneling.IProtocolV1Message\n | protobuf.com.amazonaws.iot.securedtunneling.IProtocolV2Message\n | protobuf.com.amazonaws.iot.securedtunneling.IProtocolV3Message;\n\n// Re-export message types for external use\nexport const TunnelMessageType = {\n UNKNOWN: 0,\n DATA: 1,\n STREAM_START: 2,\n STREAM_RESET: 3,\n SESSION_RESET: 4,\n SERVICE_IDS: 5,\n CONNECTION_START: 6,\n CONNECTION_RESET: 7,\n} as const;\n\nexport type TunnelMessageTypeEnum =\n (typeof TunnelMessageType)[keyof typeof TunnelMessageType];\n\n// AWS IoT Secure Tunnel configuration\nexport interface SecureTunnelConfig {\n region: string;\n accessToken: string;\n clientMode: \"source\" | \"destination\";\n serviceId?: string; // Optional service identifier for multiplexed tunnels\n protocol?: \"V1\" | \"V2\" | \"V3\"; // Protocol version\n}\n\n/**\n * AWS IoT Secure Tunnel Transport implementation\n * Handles the WebSocket connection to AWS IoT Secure Tunneling service\n * and manages the protocol-specific message framing\n */\nexport class SecureTunnelTransport implements Transport {\n private ws: WebSocket | null = null;\n private config: SecureTunnelConfig;\n private streamId: number = 1;\n private connectionId: number = 1;\n private isConnected: boolean = false;\n private tunnelReady: boolean = false; // Track if tunnel handshake is complete\n private messageQueue: Uint8Array[] = [];\n private receiveBuffer: Uint8Array = new Uint8Array(0);\n private messageClass:\n | typeof ProtocolV1Message\n | typeof ProtocolV2Message\n | typeof ProtocolV3Message;\n\n public id: string;\n public onData?: (data: Uint8Array) => void;\n public onError?: (error: Error) => void;\n public onClose?: () => void;\n\n constructor(id: string, config: SecureTunnelConfig) {\n this.id = id;\n this.config = {\n protocol: \"V2\",\n ...config,\n };\n\n // Set the appropriate message class based on protocol version\n switch (this.config.protocol) {\n case \"V1\":\n this.messageClass = ProtocolV1Message;\n break;\n case \"V2\":\n this.messageClass = ProtocolV2Message;\n break;\n case \"V3\":\n this.messageClass = ProtocolV3Message;\n break;\n default:\n this.messageClass = ProtocolV2Message;\n }\n }\n\n /**\n * Connect to AWS IoT Secure Tunnel WebSocket endpoint\n */\n async connect(): Promise<void> {\n const wsUrl = this.buildWebSocketUrl();\n\n // Format protocol version as AWS IoT subprotocol string\n const protocolVersion = this.config.protocol || \"V2\";\n const versionNumber = protocolVersion.replace(\"V\", \"\");\n const subprotocol = `aws.iot.securetunneling-${versionNumber}.0`;\n console.log(`Connecting with WebSocket subprotocol: ${subprotocol}`);\n\n return new Promise((resolve, reject) => {\n try {\n // Pass protocol version as second argument to WebSocket constructor\n this.ws = new WebSocket(wsUrl, subprotocol);\n this.ws.binaryType = \"arraybuffer\";\n\n this.ws.onopen = () => {\n console.log(\"AWS IoT Secure Tunnel WebSocket connected\");\n this.isConnected = true;\n\n // Different message flow based on client mode\n if (this.config.clientMode === \"destination\") {\n // Destination mode: Send SERVICE_IDS first if serviceId is configured\n if (this.config.serviceId) {\n console.log(\n \"Sending SERVICE_IDS message with serviceId:\",\n this.config.serviceId\n );\n this.sendControlMessage(TunnelMessageType.SERVICE_IDS, {\n availableServiceIds: [this.config.serviceId],\n });\n }\n // Destination waits for STREAM_START from source\n } else {\n // Source mode: Send STREAM_START to initiate the stream\n console.log(\n \"Source mode: Sending STREAM_START with streamId:\",\n this.streamId\n );\n this.sendControlMessage(TunnelMessageType.STREAM_START, {\n streamId: this.streamId,\n serviceId: this.config.serviceId,\n });\n }\n\n // Don't process queued messages yet - wait for tunnel to be ready\n console.log(\"Waiting for tunnel handshake to complete...\");\n\n resolve();\n };\n\n this.ws.onerror = (event) => {\n const error = new Error(\n \"WebSocket error connecting to AWS IoT Secure Tunnel\"\n );\n if (this.onError) {\n this.onError(error);\n }\n reject(error);\n };\n\n this.ws.onmessage = (event) => {\n if (event.data instanceof ArrayBuffer) {\n this.handleIncomingData(new Uint8Array(event.data));\n }\n };\n\n this.ws.onclose = (event) => {\n console.log(\"AWS IoT Secure Tunnel WebSocket closed\", {\n code: event.code,\n reason: event.reason,\n wasClean: event.wasClean,\n });\n this.isConnected = false;\n this.tunnelReady = false;\n if (this.onClose) {\n this.onClose();\n }\n };\n } catch (error) {\n reject(error);\n }\n });\n }\n\n /**\n * Disconnect from the tunnel\n */\n async disconnect(): Promise<void> {\n if (this.ws) {\n // Send STREAM_RESET before closing\n this.sendControlMessage(TunnelMessageType.STREAM_RESET, {\n streamId: this.streamId,\n });\n\n this.ws.close();\n this.ws = null;\n }\n this.isConnected = false;\n this.tunnelReady = false;\n }\n\n /**\n * Send data through the tunnel\n */\n async send(data: Uint8Array): Promise<void> {\n if (!this.isConnected || !this.ws || !this.tunnelReady) {\n // Queue the message if tunnel is not ready yet\n console.log(\n \"Queueing message, tunnel not ready. Connected:\",\n this.isConnected,\n \"Ready:\",\n this.tunnelReady\n );\n this.messageQueue.push(data);\n return;\n }\n\n this.sendDataFrame(data);\n }\n\n /**\n * Process queued messages once tunnel is ready\n */\n private processQueuedMessages(): void {\n console.log(`Processing ${this.messageQueue.length} queued messages`);\n while (this.messageQueue.length > 0) {\n const msg = this.messageQueue.shift();\n if (msg) {\n this.sendDataFrame(msg);\n }\n }\n }\n\n /**\n * Build the WebSocket URL for AWS IoT Secure Tunneling\n */\n private buildWebSocketUrl(): string {\n // AWS IoT Secure Tunneling WebSocket endpoint format\n const endpoint = `wss://data.tunneling.iot.${this.config.region}.amazonaws.com/tunnel`;\n\n // Check if access token exists\n if (!this.config.accessToken) {\n console.error(\"AWS IoT Secure Tunnel: Access token is missing or empty\");\n throw new Error(\n \"Access token is required for AWS IoT Secure Tunnel connection\"\n );\n }\n\n // URL encode the access token\n const encodedToken = encodeURIComponent(this.config.accessToken);\n\n // Build the URL with query parameters\n // local-proxy-mode parameter indicates the client mode (source or destination)\n const url = `${endpoint}?local-proxy-mode=${this.config.clientMode}&access-token=${encodedToken}`;\n\n console.log(\"AWS IoT Secure Tunnel URL:\", url.substring(0, 100) + \"...\");\n console.log(\"Protocol version:\", this.config.protocol || \"V2\");\n return url;\n }\n\n /**\n * Send a control message through the tunnel\n */\n private sendControlMessage(type: number, options: any = {}): void {\n const message: any = {\n type,\n ...options,\n };\n\n console.log(\"Sending control message:\", {\n type: this.getMessageTypeName(type),\n ...options,\n });\n\n const encoded = this.encodeMessage(message);\n console.log(\n \"Encoded message bytes:\",\n Array.from(encoded)\n .map((b) => b.toString(16).padStart(2, \"0\"))\n .join(\" \")\n );\n\n this.sendFrame(encoded);\n }\n\n /**\n * Send a data frame through the tunnel\n */\n private sendDataFrame(data: Uint8Array): void {\n // Split data into chunks if needed (max 63KB payload)\n const maxPayloadSize = 63 * 1024;\n\n for (let i = 0; i < data.length; i += maxPayloadSize) {\n const chunk = data.slice(i, Math.min(i + maxPayloadSize, data.length));\n\n const message: any = {\n type: TunnelMessageType.DATA,\n streamId: this.streamId,\n payload: chunk,\n };\n\n // Add serviceId for multiplexed tunnels (V2 and V3 only)\n if (this.config.serviceId && this.config.protocol !== \"V1\") {\n message.serviceId = this.config.serviceId;\n }\n\n // Add connectionId for V3 protocol\n if (this.config.protocol === \"V3\") {\n message.connectionId = this.connectionId;\n }\n\n console.log(\"Sending DATA message with:\", {\n type: \"DATA\",\n streamId: this.streamId,\n serviceId: this.config.serviceId,\n connectionId:\n this.config.protocol === \"V3\" ? this.connectionId : undefined,\n payloadSize: chunk.length,\n });\n\n const encoded = this.encodeMessage(message);\n this.sendFrame(encoded);\n }\n }\n\n /**\n * Send a frame with length prefix\n */\n private sendFrame(data: Uint8Array): void {\n if (!this.ws || this.ws.readyState !== WebSocket.OPEN) {\n console.warn(\"Cannot send frame: WebSocket not open\");\n return;\n }\n\n // Create frame with 2-byte length prefix (big-endian)\n const frame = new Uint8Array(2 + data.length);\n const view = new DataView(frame.buffer);\n view.setUint16(0, data.length, false); // false = big-endian\n frame.set(data, 2);\n\n console.log(\n \"Sending frame with length:\",\n data.length,\n \"Total frame size:\",\n frame.length\n );\n console.log(\n \"Frame bytes (first 20):\",\n Array.from(frame.slice(0, Math.min(20, frame.length)))\n .map((b) => b.toString(16).padStart(2, \"0\"))\n .join(\" \")\n );\n\n this.ws.send(frame.buffer);\n }\n\n /**\n * Handle incoming WebSocket data\n */\n private handleIncomingData(data: Uint8Array): void {\n // Append to receive buffer\n const newBuffer = new Uint8Array(this.receiveBuffer.length + data.length);\n newBuffer.set(this.receiveBuffer);\n newBuffer.set(data, this.receiveBuffer.length);\n this.receiveBuffer = newBuffer;\n\n // Process complete frames\n while (this.receiveBuffer.length >= 2) {\n const view = new DataView(\n this.receiveBuffer.buffer,\n this.receiveBuffer.byteOffset\n );\n const frameLength = view.getUint16(0, false); // big-endian\n\n if (this.receiveBuffer.length < 2 + frameLength) {\n break; // Wait for more data\n }\n\n // Extract frame\n const frameData = this.receiveBuffer.slice(2, 2 + frameLength);\n this.receiveBuffer = this.receiveBuffer.slice(2 + frameLength);\n\n console.log(\n \"Received frame bytes:\",\n Array.from(frameData)\n .map((b) => b.toString(16).padStart(2, \"0\"))\n .join(\" \")\n );\n\n // Decode and handle message\n try {\n const message = this.decodeMessage(frameData);\n this.handleMessage(message);\n } catch (error) {\n console.error(\"Error decoding message:\", error);\n if (this.onError) {\n this.onError(error as Error);\n }\n }\n }\n }\n\n /**\n * Handle a decoded tunnel message\n */\n private handleMessage(message: any): void {\n console.log(\"Received message:\", {\n type: this.getMessageTypeName(message.type),\n streamId: message.streamId,\n connectionId: message.connectionId,\n serviceId: message.serviceId,\n availableServiceIds: message.availableServiceIds,\n payloadSize: message.payload?.length,\n });\n\n switch (message.type) {\n case TunnelMessageType.DATA:\n // Forward data to the SSH client\n if (message.payload && this.onData) {\n this.onData(message.payload);\n }\n break;\n\n case TunnelMessageType.STREAM_START:\n // Stream started acknowledgment\n console.log(\"Stream started:\", message.streamId);\n // In destination mode, store the streamId from source\n if (\n this.config.clientMode === \"destination\" &&\n message.streamId !== undefined &&\n message.streamId !== null\n ) {\n this.streamId = message.streamId;\n console.log(\"Destination mode: Updated streamId to\", this.streamId);\n // Tunnel is ready after receiving STREAM_START in destination mode\n this.tunnelReady = true;\n this.processQueuedMessages();\n }\n break;\n\n case TunnelMessageType.STREAM_RESET:\n // Stream reset by remote\n console.log(\"Stream reset:\", message.streamId);\n if (this.onClose) {\n this.onClose();\n }\n break;\n\n case TunnelMessageType.SESSION_RESET:\n // Session reset - close all streams\n console.log(\"Session reset\");\n this.disconnect();\n break;\n\n case TunnelMessageType.SERVICE_IDS:\n // Service IDs available\n console.log(\"Available service IDs:\", message.availableServiceIds);\n // In source mode, SERVICE_IDS response means tunnel is ready\n if (this.config.clientMode === \"source\") {\n console.log(\"Source mode: Tunnel ready after receiving SERVICE_IDS\");\n this.tunnelReady = true;\n this.processQueuedMessages();\n }\n break;\n\n case TunnelMessageType.CONNECTION_START:\n // V3: New connection started\n console.log(\"Connection started:\", message.connectionId);\n break;\n\n case TunnelMessageType.CONNECTION_RESET:\n // V3: Connection reset\n console.log(\"Connection reset:\", message.connectionId);\n break;\n }\n }\n\n /**\n * Encode a message using protobufjs\n */\n private encodeMessage(message: any): Uint8Array {\n // Create and encode the message using the appropriate protocol version\n const messageInstance = this.messageClass.create(message as any);\n const encodedMessage = this.messageClass\n .encode(messageInstance as any)\n .finish();\n return encodedMessage;\n }\n\n /**\n * Decode a message using protobufjs\n */\n private decodeMessage(data: Uint8Array): any {\n // Decode using the appropriate protocol version\n const decodedMessage = this.messageClass.decode(data);\n return decodedMessage;\n }\n\n /**\n * Get message type name for logging\n */\n private getMessageTypeName(type: number): string {\n const typeNames: { [key: number]: string } = {\n 0: \"UNKNOWN\",\n 1: \"DATA\",\n 2: \"STREAM_START\",\n 3: this.config.protocol === \"V1\" ? \"STREAM_END\" : \"STREAM_RESET\",\n 4: \"SESSION_RESET\",\n 5: \"SERVICE_IDS\",\n 6: \"CONNECTION_START\",\n 7: \"CONNECTION_RESET\",\n };\n return typeNames[type] || `UNKNOWN_${type}`;\n }\n}\n","import {\n Transport,\n TransportManager,\n WebSocketTransport,\n CustomTransport,\n} from \"./transport\";\n\nexport type { Transport } from \"./transport\";\nexport { WebSocketTransport, CustomTransport } from \"./transport\";\nexport { SecureTunnelTransport, TunnelMessageType } from \"./aws-iot-tunnel\";\nexport type { SecureTunnelConfig, TunnelMessage } from \"./aws-iot-tunnel\";\n\nexport interface ConnectionOptions {\n host: string;\n port: number;\n user: string;\n password?: string;\n privateKey?: string;\n timeout?: number;\n}\n\nexport interface PacketMetadata {\n timestamp: number;\n direction: \"send\" | \"receive\";\n size: number;\n type?: string;\n}\n\nexport interface SSHClientCallbacks {\n onPacketSend?: (data: Uint8Array, metadata: PacketMetadata) => void;\n onPacketReceive?: (data: Uint8Array, metadata: PacketMetadata) => void;\n onStateChange?: (state: SSHConnectionState) => void;\n}\n\nexport interface InitializationOptions {\n wasmPath?: string;\n wasmExecPath?: string;\n autoDetect?: boolean;\n publicDir?: string;\n cacheBusting?: boolean;\n timeout?: number;\n}\n\nexport type SSHConnectionState =\n | \"connecting\"\n | \"connected\"\n | \"disconnecting\"\n | \"disconnected\"\n | \"error\";\n\nexport interface SSHSession {\n sessionId: string;\n send: (data: Uint8Array) => Promise<void>;\n disconnect: () => Promise<void>;\n resizeTerminal: (cols: number, rows: number) => Promise<void>;\n}\n\n// Asset path detection utilities\nfunction detectFramework(): 'nextjs' | 'vite' | 'webpack' | 'generic' {\n if (typeof window === 'undefined') return 'generic';\n \n // Check for Next.js\n if ((window as any).__NEXT_DATA__ || (window as any).next) {\n return 'nextjs';\n }\n \n // Check for Vite\n if ((window as any).__vite_plugin_react_preamble_installed__) {\n return 'vite';\n }\n \n // Check for Webpack\n if ((window as any).__webpack_require__) {\n return 'webpack';\n }\n \n return 'generic';\n}\n\nfunction getAssetPaths(options: InitializationOptions): { wasmPath: string; wasmExecPath: string } {\n const framework = detectFramework();\n const publicDir = options.publicDir || '/';\n \n // Use explicit paths if provided\n if (options.wasmPath && options.wasmExecPath) {\n return {\n wasmPath: options.wasmPath,\n wasmExecPath: options.wasmExecPath\n };\n }\n \n // Auto-detect based on framework\n switch (framework) {\n case 'nextjs':\n return {\n wasmPath: options.wasmPath || `${publicDir}sshclient.wasm`,\n wasmExecPath: options.wasmExecPath || `${publicDir}wasm_exec.js`\n };\n case 'vite':\n return {\n wasmPath: options.wasmPath || `${publicDir}sshclient.wasm`,\n wasmExecPath: options.wasmExecPath || `${publicDir}wasm_exec.js`\n };\n default:\n return {\n wasmPath: options.wasmPath || `${publicDir}sshclient.wasm`,\n wasmExecPath: options.wasmExecPath || `${publicDir}wasm_exec.js`\n };\n }\n}\n\n// Helper function to dynamically load wasm_exec.js\nasync function loadWasmExecutor(wasmExecPath: string, timeout: number = 10000): Promise<void> {\n if (typeof window === 'undefined') return; // Server-side check\n \n if ((window as any).Go) return; // Already loaded\n \n return new Promise((resolve, reject) => {\n const script = document.createElement('script');\n script.src = wasmExecPath;\n script.onload = () => resolve();\n script.onerror = () => reject(new Error(`Failed to load wasm_exec.js from ${wasmExecPath}`));\n \n // Add timeout\n const timeoutId = setTimeout(() => {\n reject(new Error(`Timeout loading wasm_exec.js from ${wasmExecPath}`));\n }, timeout);\n \n script.onload = () => {\n clearTimeout(timeoutId);\n resolve();\n };\n \n document.head.appendChild(script);\n });\n}\n\n// Helper function to test if assets are available\nasync function testAssetAvailability(wasmPath: string, wasmExecPath: string): Promise<{ wasmAvailable: boolean; wasmExecAvailable: boolean }> {\n const testFetch = async (url: string): Promise<boolean> => {\n try {\n const response = await fetch(url, { method: 'HEAD' });\n return response.ok;\n } catch {\n return false;\n }\n };\n \n const [wasmAvailable, wasmExecAvailable] = await Promise.all([\n testFetch(wasmPath),\n testFetch(wasmExecPath)\n ]);\n \n return { wasmAvailable, wasmExecAvailable };\n}\n\nexport class SSHClient {\n private static wasmInstance: any;\n private static initialized = false;\n private static transportManager = TransportManager.getInstance();\n\n static async initialize(options: InitializationOptions | string = {}): Promise<void> {\n if (this.initialized) {\n return;\n }\n\n // Handle legacy string parameter\n const initOptions: InitializationOptions = typeof options === 'string' \n ? { wasmPath: options, autoDetect: false }\n : { autoDetect: true, cacheBusting: true, timeout: 10000, ...options };\n\n try {\n // Get asset paths using auto-detection or explicit options\n const { wasmPath, wasmExecPath } = getAssetPaths(initOptions);\n\n // Test asset availability if auto-detection is enabled\n if (initOptions.autoDetect) {\n const { wasmAvailable, wasmExecAvailable } = await testAssetAvailability(wasmPath, wasmExecPath);\n \n if (!wasmAvailable) {\n throw new Error(`WASM file not found at ${wasmPath}. Please ensure sshclient.wasm is in your public directory.`);\n }\n \n if (!wasmExecAvailable) {\n throw new Error(`wasm_exec.js not found at ${wasmExecPath}. Please ensure wasm_exec.js is in your public directory.`);\n }\n }\n\n // Load wasm_exec.js dynamically\n await loadWasmExecutor(wasmExecPath, initOptions.timeout);\n\n // Check if Go runtime is available\n if (typeof (window as any).Go === \"undefined\") {\n throw new Error(\n `Go runtime not loaded. Failed to load wasm_exec.js from ${wasmExecPath}.`\n );\n }\n\n const go = new (window as any).Go();\n \n // Prepare fetch URL with optional cache busting\n let fetchUrl = wasmPath;\n if (initOptions.cacheBusting) {\n const cacheBuster = `?v=${Date.now()}&t=${new Date().getTime()}`;\n fetchUrl += cacheBuster;\n }\n\n const fetchOptions: RequestInit = initOptions.cacheBusting \n ? {\n cache: \"no-cache\",\n headers: {\n \"Cache-Control\": \"no-cache\",\n Pragma: \"no-cache\",\n },\n }\n : {};\n\n const response = await fetch(fetchUrl, fetchOptions);\n \n if (!response.ok) {\n throw new Error(`Failed to fetch WASM file: ${response.status} ${response.statusText}`);\n }\n \n const buffer = await response.arrayBuffer();\n const result = await WebAssembly.instantiate(buffer, go.importObject);\n\n go.run(result.instance);\n\n // Wait a bit for WASM to initialize\n await new Promise((resolve) => setTimeout(resolve, 100));\n\n this.wasmInstance = (window as any).SSHClient;\n\n if (!this.wasmInstance) {\n throw new Error(\n \"Failed to initialize WASM module - SSHClient not found on window. The WASM module may not have loaded correctly.\"\n );\n }\n\n this.transportManager.setWasmInstance(this.wasmInstance);\n this.initialized = true;\n\n // Optional: Log version in development mode\n if (typeof process !== 'undefined' && process.env?.NODE_ENV === 'development') {\n console.log(`SSHClient WASM initialized successfully`);\n if (this.wasmInstance.version) {\n console.log(`Version: ${this.wasmInstance.version()}`);\n }\n }\n\n } catch (error) {\n this.initialized = false;\n \n // Provide helpful error messages\n if (error instanceof Error) {\n throw new Error(`SSHClient initialization failed: ${error.message}`);\n } else {\n throw new Error('SSHClient initialization failed with unknown error');\n }\n }\n }\n\n static async connect(\n options: ConnectionOptions,\n transport: Transport,\n callbacks?: SSHClientCallbacks\n ): Promise<SSHSession> {\n if (!this.initialized) {\n throw new Error(\"SSHClient not initialized. Call initialize() first.\");\n }\n\n // Set up the transport\n await this.transportManager.createTransport(transport);\n\n // Connect the transport\n await transport.connect();\n\n const jsCallbacks = callbacks\n ? {\n onPacketSend: (data: any, metadata: any) => {\n if (callbacks.onPacketSend) {\n // Data is already a Uint8Array from WASM\n callbacks.onPacketSend(data, metadata);\n }\n },\n onPacketReceive: (data: any, metadata: any) => {\n if (callbacks.onPacketReceive) {\n // Data is already a Uint8Array from WASM\n callbacks.onPacketReceive(data, metadata);\n }\n },\n onStateChange: callbacks.onStateChange,\n }\n : undefined;\n\n // Pass transport ID to WASM\n const session = await this.wasmInstance.connect(\n options,\n transport.id,\n jsCallbacks\n );\n\n return {\n sessionId: session.sessionId,\n send: async (data: Uint8Array) => {\n await session.send(data);\n },\n disconnect: async () => {\n await session.disconnect();\n await this.transportManager.closeTransport(transport.id);\n },\n resizeTerminal: async (cols: number, rows: number) => {\n await session.resizeTerminal(cols, rows);\n },\n };\n }\n\n static async disconnect(sessionId: string): Promise<void> {\n if (!this.initialized) {\n throw new Error(\"SSHClient not initialized\");\n }\n\n await this.wasmInstance.disconnect(sessionId);\n }\n\n static async send(sessionId: string, data: Uint8Array): Promise<void> {\n if (!this.initialized) {\n throw new Error(\"SSHClient not initialized\");\n }\n\n await this.wasmInstance.send(sessionId, data);\n }\n\n static getVersion(): string {\n if (!this.initialized) {\n throw new Error(\"SSHClient not initialized\");\n }\n\n return this.wasmInstance.version();\n }\n}\n\nexport class PacketTransformer {\n static toProtobuf(data: Uint8Array, schema?: any): Uint8Array {\n // Placeholder for protobuf encoding\n // Users can implement their own transformation logic\n return data;\n }\n\n static fromProtobuf(data: Uint8Array, schema?: any): Uint8Array {\n // Placeholder for protobuf decoding\n // Users can implement their own transformation logic\n return data;\n }\n\n static toBase64(data: Uint8Array): string {\n return btoa(String.fromCharCode(...data));\n }\n\n static fromBase64(base64: string): Uint8Array {\n const binary = atob(base64);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return bytes;\n }\n}\n\n// Framework-specific helpers\nexport const SSHClientHelpers = {\n /**\n * Get recommended asset paths for the detected framework\n */\n getAssetPaths: (publicDir = '/') => getAssetPaths({ publicDir }),\n\n /**\n * Detect the current framework\n */\n detectFramework,\n\n /**\n * Test if WASM assets are available at the given paths\n */\n testAssetAvailability,\n\n /**\n * Next.js specific initialization helper\n */\n initializeForNextJS: async (options: Partial<InitializationOptions> = {}) => {\n return SSHClient.initialize({\n publicDir: '/',\n autoDetect: true,\n cacheBusting: process.env.NODE_ENV === 'development',\n ...options\n });\n },\n\n /**\n * Vite specific initialization helper\n */\n initializeForVite: async (options: Partial<InitializationOptions> = {}) => {\n // Safe import.meta.env access - avoid TypeScript errors by using try/catch\n let isDev = false;\n try {\n // This will work in Vite environments where import.meta.env is available\n isDev = (globalThis as any).import?.meta?.env?.DEV === true;\n } catch {\n // Fallback or in non-Vite environments\n isDev = false;\n }\n\n return SSHClient.initialize({\n publicDir: '/',\n autoDetect: true,\n cacheBusting: isDev,\n ...options\n });\n },\n\n /**\n * Generic initialization with sensible defaults\n */\n initializeWithDefaults: async (customOptions: Partial<InitializationOptions> = {}) => {\n const defaultOptions: InitializationOptions = {\n autoDetect: true,\n cacheBusting: true,\n timeout: 10000,\n publicDir: '/'\n };\n\n return SSHClient.initialize({ ...defaultOptions, ...customOptions });\n }\n};\n\nexport default SSHClient;\n"],"names":["id","url","protocols","resolve","reject","event","error","data","callbacks","connectImpl","disconnectImpl","sendImpl","wasmInstance","transport","result","fn","ctx","params","offset","index","pending","err","base64","exports","string","p","n","b64","s64","buffer","start","end","parts","chunk","i","j","t","b","invalidEncoding","c","evt","listeners","args","f32","f8b","le","writeFloat_f32_cpy","val","buf","pos","writeFloat_f32_rev","readFloat_f32_cpy","readFloat_f32_rev","writeFloat_ieee754","writeUint","sign","exponent","mantissa","readFloat_ieee754","readUint","uint","f64","writeDouble_f64_cpy","writeDouble_f64_rev","readDouble_f64_cpy","readDouble_f64_rev","writeDouble_ieee754","off0","off1","readDouble_ieee754","lo","hi","e","utf8","len","c1","c2","alloc","slice","size","SIZE","MAX","slab","LongBits","util","require$$0","zero","zeroHash","value","unsigned","charCodeAt","hash","mask","part0","part1","part2","require$$1","require$$2","require$$3","require$$4","require$$5","require$$6","require$$7","global","this","obj","prop","Buffer","sizeOrArray","bits","merge","dst","src","ifNotSet","keys","str","newError","name","CustomError","message","properties","fieldNames","fieldMap","encoding","Writer","BufferWriter","writer","create","push","write_uint32","write_int32","write_sint32","write_uint64","write_sint64","write_bool","write_fixed32","write_fixed64","write_float","write_double","writeBytes_set","writeBytes_for","write_bytes","write_string","fork","reset","ldelim","head","tail","finish","BufferWriter_","write_bytes_buffer","write_string_buffer","Reader","BufferReader","reader","writeLength","create_typed_array","create_array","read_uint32_setup","read_int32","read_sint32","read_bool","read_fixed32","read_sfixed32","read_float","read_double","read_bytes","length","nativeBuffer","read_string","bytes","skip","wireType","BufferReader_","read_string_buffer","rpcImpl","requestDelimited","responseDelimited","rpcCall","method","requestCtor","responseCtor","request","callback","self","response","endedByRPC","rpc","protobuf","configure","$protobuf.Reader","$protobuf.Writer","$protobuf.util","$protobuf.roots","com","amazonaws","iot","securedtunneling","ProtocolV1Message","tag","object","options","typeUrlPrefix","valuesById","values","ProtocolV2Message","ProtocolV3Message","protobuf.com","config","wsUrl","subprotocol","msg","endpoint","encodedToken","type","encoded","frame","newBuffer","frameLength","frameData","_a","messageInstance","framework","publicDir","wasmExecPath","timeout","script","timeoutId","wasmPath","testFetch","wasmAvailable","wasmExecAvailable","_SSHClient","initOptions","go","fetchUrl","cacheBuster","fetchOptions","jsCallbacks","metadata","session","cols","rows","sessionId","schema","binary","isDev","_c","_b","customOptions","defaultOptions"],"mappings":"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","x_google_ignoreList":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]}