@centive/aria-sdk 0.6.1 → 0.6.2

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-gxG0JnP5.js","sources":["../node_modules/base64-js/index.js","../node_modules/ieee754/index.js","../node_modules/buffer/index.js","../node_modules/@anam-ai/js-sdk/dist/module/lib/constants.js","../node_modules/@anam-ai/js-sdk/dist/module/lib/ClientMetrics.js","../node_modules/@anam-ai/js-sdk/dist/module/lib/ClientError.js","../node_modules/@anam-ai/js-sdk/dist/module/lib/correlationId.js","../node_modules/@anam-ai/js-sdk/dist/module/lib/validateApiGatewayConfig.js","../node_modules/@anam-ai/js-sdk/dist/module/types/signalling/SignalMessage.js","../node_modules/@anam-ai/js-sdk/dist/module/types/streaming/DataChannelMessage.js","../node_modules/@anam-ai/js-sdk/dist/module/types/InputAudioState.js","../node_modules/@anam-ai/js-sdk/dist/module/types/messageHistory/MessageRole.js","../node_modules/@anam-ai/js-sdk/dist/module/types/events/public/AnamEvent.js","../node_modules/@anam-ai/js-sdk/dist/module/types/events/internal/InternalEvent.js","../node_modules/@anam-ai/js-sdk/dist/module/types/events/public/ConnectionClosedCodes.js","../node_modules/@anam-ai/js-sdk/dist/module/types/AgentAudioInputStream.js","../node_modules/@anam-ai/js-sdk/dist/module/modules/SignallingClient.js","../node_modules/@anam-ai/js-sdk/dist/module/types/PersonaConfig.js","../node_modules/@anam-ai/js-sdk/dist/module/modules/CoreApiRestClient.js","../node_modules/@anam-ai/js-sdk/dist/module/modules/EngineApiRestClient.js","../node_modules/@anam-ai/js-sdk/dist/module/modules/InternalEventEmitter.js","../node_modules/@anam-ai/js-sdk/dist/module/modules/MessageHistoryClient.js","../node_modules/@anam-ai/js-sdk/dist/module/modules/PublicEventEmitter.js","../node_modules/@anam-ai/js-sdk/dist/module/types/TalkMessageStreamState.js","../node_modules/@anam-ai/js-sdk/dist/module/types/TalkMessageStream.js","../node_modules/@anam-ai/js-sdk/dist/module/modules/StreamingClient.js","../node_modules/@anam-ai/js-sdk/dist/module/modules/ToolCallManager.js","../node_modules/@anam-ai/js-sdk/dist/module/AnamClient.js","../node_modules/@anam-ai/js-sdk/dist/module/index.js"],"sourcesContent":["'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <https://feross.org>\n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nconst base64 = require('base64-js')\nconst ieee754 = require('ieee754')\nconst customInspectSymbol =\n (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nconst K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n const arr = new Uint8Array(1)\n const proto = { foo: function () { return 42 } }\n Object.setPrototypeOf(proto, Uint8Array.prototype)\n Object.setPrototypeOf(arr, proto)\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.buffer\n }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.byteOffset\n }\n})\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n }\n // Return an augmented `Uint8Array` instance\n const buf = new Uint8Array(length)\n Object.setPrototypeOf(buf, Buffer.prototype)\n return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new TypeError(\n 'The \"string\" argument must be of type string. Received type number'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n if (typeof value === 'string') {\n return fromString(value, encodingOrOffset)\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayView(value)\n }\n\n if (value == null) {\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n }\n\n if (isInstance(value, ArrayBuffer) ||\n (value && isInstance(value.buffer, ArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof SharedArrayBuffer !== 'undefined' &&\n (isInstance(value, SharedArrayBuffer) ||\n (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'number') {\n throw new TypeError(\n 'The \"value\" argument must not be of type number. Received type number'\n )\n }\n\n const valueOf = value.valueOf && value.valueOf()\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length)\n }\n\n const b = fromObject(value)\n if (b) return b\n\n if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n typeof value[Symbol.toPrimitive] === 'function') {\n return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length)\n }\n\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be of type number')\n } else if (size < 0) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n}\n\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpreted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n\n const length = byteLength(string, encoding) | 0\n let buf = createBuffer(length)\n\n const actual = buf.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual)\n }\n\n return buf\n}\n\nfunction fromArrayLike (array) {\n const length = array.length < 0 ? 0 : checked(array.length) | 0\n const buf = createBuffer(length)\n for (let i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayView (arrayView) {\n if (isInstance(arrayView, Uint8Array)) {\n const copy = new Uint8Array(arrayView)\n return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n }\n return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\"offset\" is outside of buffer bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\"length\" is outside of buffer bounds')\n }\n\n let buf\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array)\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset)\n } else {\n buf = new Uint8Array(array, byteOffset, length)\n }\n\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(buf, Buffer.prototype)\n\n return buf\n}\n\nfunction fromObject (obj) {\n if (Buffer.isBuffer(obj)) {\n const len = checked(obj.length) | 0\n const buf = createBuffer(len)\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len)\n return buf\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n return createBuffer(0)\n }\n return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return b != null && b._isBuffer === true &&\n b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\n 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n )\n }\n\n if (a === b) return 0\n\n let x = a.length\n let y = b.length\n\n for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n let i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n const buffer = Buffer.allocUnsafe(length)\n let pos = 0\n for (i = 0; i < list.length; ++i) {\n let buf = list[i]\n if (isInstance(buf, Uint8Array)) {\n if (pos + buf.length > buffer.length) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n buf.copy(buffer, pos)\n } else {\n Uint8Array.prototype.set.call(\n buffer,\n buf,\n pos\n )\n }\n } else if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n } else {\n buf.copy(buffer, pos)\n }\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n throw new TypeError(\n 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n 'Received type ' + typeof string\n )\n }\n\n const len = string.length\n const mustMatch = (arguments.length > 2 && arguments[2] === true)\n if (!mustMatch && len === 0) return 0\n\n // Use a for loop to avoid recursion\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n }\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n let loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n const i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n const len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (let i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n const len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (let i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n const len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (let i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n const length = this.length\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n let str = ''\n const max = exports.INSPECT_MAX_BYTES\n str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n if (this.length > max) str += ' ... '\n return '<Buffer ' + str + '>'\n}\nif (customInspectSymbol) {\n Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength)\n }\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\n 'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n 'Received type ' + (typeof target)\n )\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n let x = thisEnd - thisStart\n let y = end - start\n const len = Math.min(x, y)\n\n const thisCopy = this.slice(thisStart, thisEnd)\n const targetCopy = target.slice(start, end)\n\n for (let i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n let indexSize = 1\n let arrLength = arr.length\n let valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n let i\n if (dir) {\n let foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n let found = true\n for (let j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n const remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n const strLen = string.length\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n let i\n for (i = 0; i < length; ++i) {\n const parsed = parseInt(string.substr(i * 2, 2), 16)\n if (numberIsNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0\n if (isFinite(length)) {\n length = length >>> 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n const remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n case 'latin1':\n case 'binary':\n return asciiWrite(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n const res = []\n\n let i = start\n while (i < end) {\n const firstByte = buf[i]\n let codePoint = null\n let bytesPerSequence = (firstByte > 0xEF)\n ? 4\n : (firstByte > 0xDF)\n ? 3\n : (firstByte > 0xBF)\n ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n let secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n const len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n let res = ''\n let i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n const len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n let out = ''\n for (let i = start; i < end; ++i) {\n out += hexSliceLookupTable[buf[i]]\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n const bytes = buf.slice(start, end)\n let res = ''\n // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n for (let i = 0; i < bytes.length - 1; i += 2) {\n res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n const len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n const newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n let val = this[offset + --byteLength]\n let mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const lo = first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24\n\n const hi = this[++offset] +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n last * 2 ** 24\n\n return BigInt(lo) + (BigInt(hi) << BigInt(32))\n})\n\nBuffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const hi = first * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n const lo = this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last\n\n return (BigInt(hi) << BigInt(32)) + BigInt(lo)\n})\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let i = byteLength\n let mul = 1\n let val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = this[offset + 4] +\n this[offset + 5] * 2 ** 8 +\n this[offset + 6] * 2 ** 16 +\n (last << 24) // Overflow\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24)\n})\n\nBuffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = (first << 24) + // Overflow\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last)\n})\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let mul = 1\n let i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let i = byteLength - 1\n let mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nfunction wrtBigUInt64LE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n return offset\n}\n\nfunction wrtBigUInt64BE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset + 7] = lo\n lo = lo >> 8\n buf[offset + 6] = lo\n lo = lo >> 8\n buf[offset + 5] = lo\n lo = lo >> 8\n buf[offset + 4] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset + 3] = hi\n hi = hi >> 8\n buf[offset + 2] = hi\n hi = hi >> 8\n buf[offset + 1] = hi\n hi = hi >> 8\n buf[offset] = hi\n return offset + 8\n}\n\nBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = 0\n let mul = 1\n let sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = byteLength - 1\n let mul = 1\n let sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n const len = end - start\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end)\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, end),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n if (val.length === 1) {\n const code = val.charCodeAt(0)\n if ((encoding === 'utf8' && code < 128) ||\n encoding === 'latin1') {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code\n }\n }\n } else if (typeof val === 'number') {\n val = val & 255\n } else if (typeof val === 'boolean') {\n val = Number(val)\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n let i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n const bytes = Buffer.isBuffer(val)\n ? val\n : Buffer.from(val, encoding)\n const len = bytes.length\n if (len === 0) {\n throw new TypeError('The value \"' + val +\n '\" is invalid for argument \"value\"')\n }\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// CUSTOM ERRORS\n// =============\n\n// Simplified versions from Node, changed for Buffer-only usage\nconst errors = {}\nfunction E (sym, getMessage, Base) {\n errors[sym] = class NodeError extends Base {\n constructor () {\n super()\n\n Object.defineProperty(this, 'message', {\n value: getMessage.apply(this, arguments),\n writable: true,\n configurable: true\n })\n\n // Add the error code to the name to include it in the stack trace.\n this.name = `${this.name} [${sym}]`\n // Access the stack to generate the error message including the error code\n // from the name.\n this.stack // eslint-disable-line no-unused-expressions\n // Reset the name to the actual name.\n delete this.name\n }\n\n get code () {\n return sym\n }\n\n set code (value) {\n Object.defineProperty(this, 'code', {\n configurable: true,\n enumerable: true,\n value,\n writable: true\n })\n }\n\n toString () {\n return `${this.name} [${sym}]: ${this.message}`\n }\n }\n}\n\nE('ERR_BUFFER_OUT_OF_BOUNDS',\n function (name) {\n if (name) {\n return `${name} is outside of buffer bounds`\n }\n\n return 'Attempt to access memory outside buffer bounds'\n }, RangeError)\nE('ERR_INVALID_ARG_TYPE',\n function (name, actual) {\n return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`\n }, TypeError)\nE('ERR_OUT_OF_RANGE',\n function (str, range, input) {\n let msg = `The value of \"${str}\" is out of range.`\n let received = input\n if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n received = addNumericalSeparator(String(input))\n } else if (typeof input === 'bigint') {\n received = String(input)\n if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n received = addNumericalSeparator(received)\n }\n received += 'n'\n }\n msg += ` It must be ${range}. Received ${received}`\n return msg\n }, RangeError)\n\nfunction addNumericalSeparator (val) {\n let res = ''\n let i = val.length\n const start = val[0] === '-' ? 1 : 0\n for (; i >= start + 4; i -= 3) {\n res = `_${val.slice(i - 3, i)}${res}`\n }\n return `${val.slice(0, i)}${res}`\n}\n\n// CHECK FUNCTIONS\n// ===============\n\nfunction checkBounds (buf, offset, byteLength) {\n validateNumber(offset, 'offset')\n if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n boundsError(offset, buf.length - (byteLength + 1))\n }\n}\n\nfunction checkIntBI (value, min, max, buf, offset, byteLength) {\n if (value > max || value < min) {\n const n = typeof min === 'bigint' ? 'n' : ''\n let range\n if (byteLength > 3) {\n if (min === 0 || min === BigInt(0)) {\n range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`\n } else {\n range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` +\n `${(byteLength + 1) * 8 - 1}${n}`\n }\n } else {\n range = `>= ${min}${n} and <= ${max}${n}`\n }\n throw new errors.ERR_OUT_OF_RANGE('value', range, value)\n }\n checkBounds(buf, offset, byteLength)\n}\n\nfunction validateNumber (value, name) {\n if (typeof value !== 'number') {\n throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value)\n }\n}\n\nfunction boundsError (value, length, type) {\n if (Math.floor(value) !== value) {\n validateNumber(value, type)\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value)\n }\n\n if (length < 0) {\n throw new errors.ERR_BUFFER_OUT_OF_BOUNDS()\n }\n\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset',\n `>= ${type ? 1 : 0} and <= ${length}`,\n value)\n}\n\n// HELPER FUNCTIONS\n// ================\n\nconst INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split('=')[0]\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n let codePoint\n const length = string.length\n let leadSurrogate = null\n const bytes = []\n\n for (let i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n let c, hi, lo\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n let i\n for (i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n return obj instanceof type ||\n (obj != null && obj.constructor != null && obj.constructor.name != null &&\n obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n // For IE11 support\n return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nconst hexSliceLookupTable = (function () {\n const alphabet = '0123456789abcdef'\n const table = new Array(256)\n for (let i = 0; i < 16; ++i) {\n const i16 = i * 16\n for (let j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j]\n }\n }\n return table\n})()\n\n// Return not function with Error if BigInt not supported\nfunction defineBigIntMethod (fn) {\n return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn\n}\n\nfunction BufferBigIntNotDefined () {\n throw new Error('BigInt not supported')\n}\n","// Core API\nexport const DEFAULT_HEADERS = {\n 'Content-Type': 'application/json',\n};\nexport const DEFAULT_API_BASE_URL = 'https://api.anam.ai';\nexport const DEFAULT_API_VERSION = '/v1'; // include the leading slash\nexport const CLIENT_METADATA = {\n client: 'js-sdk',\n version: '4.7.0',\n};\n//# sourceMappingURL=constants.js.map","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { CLIENT_METADATA } from './constants';\nexport const DEFAULT_ANAM_METRICS_BASE_URL = 'https://api.anam.ai';\nexport const DEFAULT_ANAM_API_VERSION = '/v1';\nexport var ClientMetricMeasurement;\n(function (ClientMetricMeasurement) {\n ClientMetricMeasurement[\"CLIENT_METRIC_MEASUREMENT_ERROR\"] = \"client_error\";\n ClientMetricMeasurement[\"CLIENT_METRIC_MEASUREMENT_CONNECTION_CLOSED\"] = \"client_connection_closed\";\n ClientMetricMeasurement[\"CLIENT_METRIC_MEASUREMENT_CONNECTION_ESTABLISHED\"] = \"client_connection_established\";\n ClientMetricMeasurement[\"CLIENT_METRIC_MEASUREMENT_SESSION_ATTEMPT\"] = \"client_session_attempt\";\n ClientMetricMeasurement[\"CLIENT_METRIC_MEASUREMENT_SESSION_SUCCESS\"] = \"client_session_success\";\n})(ClientMetricMeasurement || (ClientMetricMeasurement = {}));\nlet anamCurrentBaseUrl = DEFAULT_ANAM_METRICS_BASE_URL;\nlet anamCurrentApiVersion = DEFAULT_ANAM_API_VERSION;\nlet apiGatewayConfig;\nlet metricsDisabled = false;\nexport const setClientMetricsBaseUrl = (baseUrl, apiVersion = DEFAULT_ANAM_API_VERSION) => {\n anamCurrentBaseUrl = baseUrl;\n anamCurrentApiVersion = apiVersion;\n};\nexport const setClientMetricsApiGateway = (config) => {\n apiGatewayConfig = config;\n};\nexport const setClientMetricsDisabled = (disabled) => {\n metricsDisabled = disabled;\n};\nlet anamMetricsContext = {\n sessionId: null,\n organizationId: null,\n attemptCorrelationId: null,\n};\nexport const setMetricsContext = (context) => {\n anamMetricsContext = Object.assign(Object.assign({}, anamMetricsContext), context);\n};\nexport const sendClientMetric = (name, value, tags) => __awaiter(void 0, void 0, void 0, function* () {\n // Skip sending metrics if disabled\n if (metricsDisabled) {\n return;\n }\n try {\n const metricTags = Object.assign(Object.assign({}, CLIENT_METADATA), tags);\n // Add session and organization IDs if available\n if (anamMetricsContext.sessionId) {\n metricTags.sessionId = anamMetricsContext.sessionId;\n }\n if (anamMetricsContext.organizationId) {\n metricTags.organizationId = anamMetricsContext.organizationId;\n }\n if (anamMetricsContext.attemptCorrelationId) {\n metricTags.attemptCorrelationId = anamMetricsContext.attemptCorrelationId;\n }\n // Determine URL and headers based on API Gateway configuration\n const targetPath = `${anamCurrentApiVersion}/metrics/client`;\n let url;\n let headers = {\n 'Content-Type': 'application/json',\n };\n if ((apiGatewayConfig === null || apiGatewayConfig === void 0 ? void 0 : apiGatewayConfig.enabled) && (apiGatewayConfig === null || apiGatewayConfig === void 0 ? void 0 : apiGatewayConfig.baseUrl)) {\n // Route through gateway\n url = `${apiGatewayConfig.baseUrl}${targetPath}`;\n headers['X-Anam-Target-Url'] = `${anamCurrentBaseUrl}${targetPath}`;\n }\n else {\n // Direct call to Anam API\n url = `${anamCurrentBaseUrl}${targetPath}`;\n }\n yield fetch(url, {\n method: 'POST',\n headers,\n body: JSON.stringify({\n name,\n value,\n tags: metricTags,\n }),\n });\n }\n catch (error) {\n console.error('Failed to send error metric:', error);\n }\n});\nexport const createRTCStatsReport = (stats, outputFormat = 'console') => {\n /**\n * constructs a report of the RTC stats for logging to the console or returns as JSON\n */\n var _a, _b, _c;\n // Collect stats by type for organized reporting\n const statsByType = {};\n stats.forEach((report) => {\n if (!statsByType[report.type]) {\n statsByType[report.type] = [];\n }\n statsByType[report.type].push(report);\n });\n // Initialize JSON report structure\n const jsonReport = {\n issues: [],\n };\n // Build video statistics (Persona video output)\n const inboundVideo = ((_a = statsByType['inbound-rtp']) === null || _a === void 0 ? void 0 : _a.filter((r) => r.kind === 'video')) || [];\n if (inboundVideo.length > 0) {\n jsonReport.personaVideoStream = [];\n inboundVideo.forEach((report) => {\n var _a, _b, _c, _d, _e;\n const videoData = {\n framesReceived: (_a = report.framesReceived) !== null && _a !== void 0 ? _a : 'unknown',\n framesDropped: (_b = report.framesDropped) !== null && _b !== void 0 ? _b : 'unknown',\n framesPerSecond: (_c = report.framesPerSecond) !== null && _c !== void 0 ? _c : 'unknown',\n packetsReceived: (_d = report.packetsReceived) !== null && _d !== void 0 ? _d : 'unknown',\n packetsLost: (_e = report.packetsLost) !== null && _e !== void 0 ? _e : 'unknown',\n resolution: report.frameWidth && report.frameHeight\n ? `${report.frameWidth}x${report.frameHeight}`\n : undefined,\n jitter: report.jitter !== undefined ? report.jitter : undefined,\n };\n jsonReport.personaVideoStream.push(videoData);\n });\n }\n // Build audio statistics (Persona audio output)\n const inboundAudio = ((_b = statsByType['inbound-rtp']) === null || _b === void 0 ? void 0 : _b.filter((r) => r.kind === 'audio')) || [];\n if (inboundAudio.length > 0) {\n jsonReport.personaAudioStream = [];\n inboundAudio.forEach((report) => {\n var _a, _b, _c;\n const audioData = {\n packetsReceived: (_a = report.packetsReceived) !== null && _a !== void 0 ? _a : 'unknown',\n packetsLost: (_b = report.packetsLost) !== null && _b !== void 0 ? _b : 'unknown',\n audioLevel: (_c = report.audioLevel) !== null && _c !== void 0 ? _c : 'unknown',\n jitter: report.jitter !== undefined ? report.jitter : undefined,\n totalAudioEnergy: report.totalAudioEnergy !== undefined\n ? report.totalAudioEnergy\n : undefined,\n };\n jsonReport.personaAudioStream.push(audioData);\n });\n }\n // Build user audio input statistics\n const outboundAudio = ((_c = statsByType['outbound-rtp']) === null || _c === void 0 ? void 0 : _c.filter((r) => r.kind === 'audio')) || [];\n if (outboundAudio.length > 0) {\n jsonReport.userAudioInput = [];\n outboundAudio.forEach((report) => {\n var _a, _b;\n const userAudioData = {\n packetsSent: (_a = report.packetsSent) !== null && _a !== void 0 ? _a : 'unknown',\n retransmittedPackets: (_b = report.retransmittedPacketsSent) !== null && _b !== void 0 ? _b : undefined,\n avgPacketSendDelay: report.totalPacketSendDelay !== undefined\n ? (report.totalPacketSendDelay / (report.packetsSent || 1)) * 1000\n : undefined,\n };\n jsonReport.userAudioInput.push(userAudioData);\n });\n }\n // Build codec information\n if (statsByType['codec']) {\n jsonReport.codecs = [];\n statsByType['codec'].forEach((report) => {\n const codecData = {\n status: report.payloadType ? 'Active' : 'Available',\n mimeType: report.mimeType || 'Unknown',\n payloadType: report.payloadType || 'N/A',\n clockRate: report.clockRate || undefined,\n channels: report.channels || undefined,\n };\n jsonReport.codecs.push(codecData);\n });\n }\n // Build transport layer information\n if (statsByType['transport']) {\n jsonReport.transportLayer = [];\n statsByType['transport'].forEach((report) => {\n const transportData = {\n dtlsState: report.dtlsState || 'unknown',\n iceState: report.iceState || 'unknown',\n bytesSent: report.bytesSent || undefined,\n bytesReceived: report.bytesReceived || undefined,\n };\n jsonReport.transportLayer.push(transportData);\n });\n }\n // Build issues summary\n const issues = [];\n // Check for video issues\n inboundVideo.forEach((report) => {\n if (typeof report.framesDropped === 'number' && report.framesDropped > 0) {\n issues.push(`Video: ${report.framesDropped} frames dropped`);\n }\n if (typeof report.packetsLost === 'number' && report.packetsLost > 0) {\n issues.push(`Video: ${report.packetsLost} packets lost`);\n }\n if (typeof report.framesPerSecond === 'number' &&\n report.framesPerSecond < 23) {\n issues.push(`Video: Low frame rate (${report.framesPerSecond} fps)`);\n }\n });\n // Check for audio issues\n inboundAudio.forEach((report) => {\n if (typeof report.packetsLost === 'number' && report.packetsLost > 0) {\n issues.push(`Audio: ${report.packetsLost} packets lost`);\n }\n if (typeof report.jitter === 'number' && report.jitter > 0.1) {\n issues.push(`Audio: High jitter (${(report.jitter * 1000).toFixed(1)}ms)`);\n }\n });\n jsonReport.issues = issues;\n // Return JSON if requested\n if (outputFormat === 'json') {\n return jsonReport;\n }\n // Generate console output from JSON report\n console.group('📊 WebRTC Session Statistics Report');\n // Console output for video stream\n if (jsonReport.personaVideoStream &&\n jsonReport.personaVideoStream.length > 0) {\n console.group('📹 Persona Video Stream (Inbound)');\n jsonReport.personaVideoStream.forEach((videoData) => {\n console.log(`Frames Received: ${videoData.framesReceived}`);\n console.log(`Frames Dropped: ${videoData.framesDropped}`);\n console.log(`Frames Per Second: ${videoData.framesPerSecond}`);\n console.log(`Packets Received: ${typeof videoData.packetsReceived === 'number' ? videoData.packetsReceived.toLocaleString() : videoData.packetsReceived}`);\n console.log(`Packets Lost: ${videoData.packetsLost}`);\n if (videoData.resolution) {\n console.log(`Resolution: ${videoData.resolution}`);\n }\n if (videoData.jitter !== undefined) {\n console.log(`Jitter: ${videoData.jitter.toFixed(5)}ms`);\n }\n });\n console.groupEnd();\n }\n // Console output for audio stream\n if (jsonReport.personaAudioStream &&\n jsonReport.personaAudioStream.length > 0) {\n console.group('🔊 Persona Audio Stream (Inbound)');\n jsonReport.personaAudioStream.forEach((audioData) => {\n console.log(`Packets Received: ${typeof audioData.packetsReceived === 'number' ? audioData.packetsReceived.toLocaleString() : audioData.packetsReceived}`);\n console.log(`Packets Lost: ${audioData.packetsLost}`);\n console.log(`Audio Level: ${audioData.audioLevel}`);\n if (audioData.jitter !== undefined) {\n console.log(`Jitter: ${audioData.jitter.toFixed(5)}ms`);\n }\n if (audioData.totalAudioEnergy !== undefined) {\n console.log(`Total Audio Energy: ${audioData.totalAudioEnergy.toFixed(6)}`);\n }\n });\n console.groupEnd();\n }\n // Console output for user audio input\n if (jsonReport.userAudioInput && jsonReport.userAudioInput.length > 0) {\n console.group('🎤 User Audio Input (Outbound)');\n jsonReport.userAudioInput.forEach((userAudioData) => {\n console.log(`Packets Sent: ${typeof userAudioData.packetsSent === 'number' ? userAudioData.packetsSent.toLocaleString() : userAudioData.packetsSent}`);\n if (userAudioData.retransmittedPackets) {\n console.log(`Retransmitted Packets: ${userAudioData.retransmittedPackets}`);\n }\n if (userAudioData.avgPacketSendDelay !== undefined) {\n console.log(`Avg Packet Send Delay: ${userAudioData.avgPacketSendDelay.toFixed(5)}ms`);\n }\n });\n console.groupEnd();\n }\n // Console output for codecs\n if (jsonReport.codecs && jsonReport.codecs.length > 0) {\n console.group('🔧 Codecs Used');\n jsonReport.codecs.forEach((codecData) => {\n console.log(`${codecData.status} ${codecData.mimeType} - Payload Type: ${codecData.payloadType}`);\n if (codecData.clockRate) {\n console.log(` Clock Rate: ${codecData.clockRate}Hz`);\n }\n if (codecData.channels) {\n console.log(` Channels: ${codecData.channels}`);\n }\n });\n console.groupEnd();\n }\n // Console output for transport layer\n if (jsonReport.transportLayer && jsonReport.transportLayer.length > 0) {\n console.group('🚚 Transport Layer');\n jsonReport.transportLayer.forEach((transportData) => {\n console.log(`DTLS State: ${transportData.dtlsState}`);\n console.log(`ICE State: ${transportData.iceState}`);\n if (transportData.bytesReceived || transportData.bytesSent) {\n console.log(`Data Transfer (bytes) - Sent: ${(transportData.bytesSent || 0).toLocaleString()}, Received: ${(transportData.bytesReceived || 0).toLocaleString()}`);\n }\n });\n console.groupEnd();\n }\n // Console output for issues\n if (jsonReport.issues.length > 0) {\n console.group('⚠️ Potential Issues Detected');\n jsonReport.issues.forEach((issue) => console.warn(issue));\n console.groupEnd();\n }\n else {\n console.log('✅ No significant issues detected');\n }\n console.groupEnd();\n};\n//# sourceMappingURL=ClientMetrics.js.map","import { ClientMetricMeasurement, sendClientMetric } from './ClientMetrics';\nexport var ErrorCode;\n(function (ErrorCode) {\n ErrorCode[\"CLIENT_ERROR_CODE_USAGE_LIMIT_REACHED\"] = \"CLIENT_ERROR_CODE_USAGE_LIMIT_REACHED\";\n ErrorCode[\"CLIENT_ERROR_CODE_SPEND_CAP_REACHED\"] = \"CLIENT_ERROR_CODE_SPEND_CAP_REACHED\";\n ErrorCode[\"CLIENT_ERROR_CODE_VALIDATION_ERROR\"] = \"CLIENT_ERROR_CODE_VALIDATION_ERROR\";\n ErrorCode[\"CLIENT_ERROR_CODE_AUTHENTICATION_ERROR\"] = \"CLIENT_ERROR_CODE_AUTHENTICATION_ERROR\";\n ErrorCode[\"CLIENT_ERROR_CODE_SERVER_ERROR\"] = \"CLIENT_ERROR_CODE_SERVER_ERROR\";\n ErrorCode[\"CLIENT_ERROR_CODE_MAX_CONCURRENT_SESSIONS_REACHED\"] = \"CLIENT_ERROR_CODE_MAX_CONCURRENT_SESSIONS_REACHED\";\n ErrorCode[\"CLIENT_ERROR_CODE_SERVICE_BUSY\"] = \"CLIENT_ERROR_CODE_SERVICE_BUSY\";\n ErrorCode[\"CLIENT_ERROR_CODE_NO_PLAN_FOUND\"] = \"CLIENT_ERROR_CODE_NO_PLAN_FOUND\";\n ErrorCode[\"CLIENT_ERROR_CODE_UNKNOWN_ERROR\"] = \"CLIENT_ERROR_CODE_UNKNOWN_ERROR\";\n ErrorCode[\"CLIENT_ERROR_CODE_CONFIGURATION_ERROR\"] = \"CLIENT_ERROR_CODE_CONFIGURATION_ERROR\";\n})(ErrorCode || (ErrorCode = {}));\nexport class ClientError extends Error {\n constructor(message, code, statusCode = 500, details) {\n super(message);\n this.name = 'ClientError';\n this.code = code;\n this.statusCode = statusCode;\n this.details = details;\n Object.setPrototypeOf(this, ClientError.prototype);\n // Send error metric when error is created\n sendClientMetric(ClientMetricMeasurement.CLIENT_METRIC_MEASUREMENT_ERROR, code, {\n details,\n statusCode,\n });\n }\n}\n//# sourceMappingURL=ClientError.js.map","export function generateCorrelationId() {\n // Try native crypto.randomUUID() first (supported in modern browsers)\n if (typeof crypto !== 'undefined' && crypto.randomUUID) {\n return crypto.randomUUID();\n }\n // Fallback for older environments and older react native\n return Date.now().toString(36) + Math.random().toString(36).substr(2, 9);\n}\n//# sourceMappingURL=correlationId.js.map","/**\n * Validates API Gateway configuration\n * @param apiGatewayConfig - The API Gateway configuration to validate\n * @returns Error message if invalid, undefined if valid\n */\nexport function validateApiGatewayConfig(apiGatewayConfig) {\n if (!apiGatewayConfig || !apiGatewayConfig.enabled) {\n return undefined;\n }\n if (!apiGatewayConfig.baseUrl) {\n return 'API Gateway baseUrl is required when enabled';\n }\n // Validate baseUrl format\n try {\n const url = new URL(apiGatewayConfig.baseUrl);\n if (!['http:', 'https:', 'ws:', 'wss:'].includes(url.protocol)) {\n return `Invalid API Gateway baseUrl protocol: ${url.protocol}. Must be http:, https:, ws:, or wss:`;\n }\n }\n catch (error) {\n return `Invalid API Gateway baseUrl: ${apiGatewayConfig.baseUrl}`;\n }\n // Validate wsPath if provided\n if (apiGatewayConfig.wsPath) {\n if (!apiGatewayConfig.wsPath.startsWith('/')) {\n return 'API Gateway wsPath must start with /';\n }\n }\n return undefined;\n}\n//# sourceMappingURL=validateApiGatewayConfig.js.map","export var SignalMessageAction;\n(function (SignalMessageAction) {\n SignalMessageAction[\"OFFER\"] = \"offer\";\n SignalMessageAction[\"ANSWER\"] = \"answer\";\n SignalMessageAction[\"ICE_CANDIDATE\"] = \"icecandidate\";\n SignalMessageAction[\"END_SESSION\"] = \"endsession\";\n SignalMessageAction[\"HEARTBEAT\"] = \"heartbeat\";\n SignalMessageAction[\"WARNING\"] = \"warning\";\n SignalMessageAction[\"TALK_STREAM_INTERRUPTED\"] = \"talkinputstreaminterrupted\";\n SignalMessageAction[\"TALK_STREAM_INPUT\"] = \"talkstream\";\n SignalMessageAction[\"SESSION_READY\"] = \"sessionready\";\n SignalMessageAction[\"AGENT_AUDIO_INPUT\"] = \"agentaudioinput\";\n SignalMessageAction[\"AGENT_AUDIO_INPUT_END\"] = \"agentaudioinputend\";\n})(SignalMessageAction || (SignalMessageAction = {}));\n//# sourceMappingURL=SignalMessage.js.map","export var DataChannelMessage;\n(function (DataChannelMessage) {\n DataChannelMessage[\"SPEECH_TEXT\"] = \"speechText\";\n DataChannelMessage[\"CLIENT_TOOL_EVENT\"] = \"clientToolEvent\";\n})(DataChannelMessage || (DataChannelMessage = {}));\n//# sourceMappingURL=DataChannelMessage.js.map","export var AudioPermissionState;\n(function (AudioPermissionState) {\n AudioPermissionState[\"PENDING\"] = \"pending\";\n AudioPermissionState[\"GRANTED\"] = \"granted\";\n AudioPermissionState[\"DENIED\"] = \"denied\";\n AudioPermissionState[\"NOT_REQUESTED\"] = \"not_requested\";\n})(AudioPermissionState || (AudioPermissionState = {}));\n//# sourceMappingURL=InputAudioState.js.map","export var MessageRole;\n(function (MessageRole) {\n MessageRole[\"USER\"] = \"user\";\n MessageRole[\"PERSONA\"] = \"persona\";\n})(MessageRole || (MessageRole = {}));\n//# sourceMappingURL=MessageRole.js.map","export var AnamEvent;\n(function (AnamEvent) {\n AnamEvent[\"MESSAGE_HISTORY_UPDATED\"] = \"MESSAGE_HISTORY_UPDATED\";\n AnamEvent[\"MESSAGE_STREAM_EVENT_RECEIVED\"] = \"MESSAGE_STREAM_EVENT_RECEIVED\";\n AnamEvent[\"CONNECTION_ESTABLISHED\"] = \"CONNECTION_ESTABLISHED\";\n AnamEvent[\"CONNECTION_CLOSED\"] = \"CONNECTION_CLOSED\";\n AnamEvent[\"INPUT_AUDIO_STREAM_STARTED\"] = \"INPUT_AUDIO_STREAM_STARTED\";\n AnamEvent[\"VIDEO_STREAM_STARTED\"] = \"VIDEO_STREAM_STARTED\";\n AnamEvent[\"VIDEO_PLAY_STARTED\"] = \"VIDEO_PLAY_STARTED\";\n AnamEvent[\"AUDIO_STREAM_STARTED\"] = \"AUDIO_STREAM_STARTED\";\n AnamEvent[\"TALK_STREAM_INTERRUPTED\"] = \"TALK_STREAM_INTERRUPTED\";\n AnamEvent[\"SESSION_READY\"] = \"SESSION_READY\";\n AnamEvent[\"SERVER_WARNING\"] = \"SERVER_WARNING\";\n AnamEvent[\"MIC_PERMISSION_PENDING\"] = \"MIC_PERMISSION_PENDING\";\n AnamEvent[\"MIC_PERMISSION_GRANTED\"] = \"MIC_PERMISSION_GRANTED\";\n AnamEvent[\"MIC_PERMISSION_DENIED\"] = \"MIC_PERMISSION_DENIED\";\n AnamEvent[\"INPUT_AUDIO_DEVICE_CHANGED\"] = \"INPUT_AUDIO_DEVICE_CHANGED\";\n AnamEvent[\"CLIENT_TOOL_EVENT_RECEIVED\"] = \"CLIENT_TOOL_EVENT_RECEIVED\";\n})(AnamEvent || (AnamEvent = {}));\n//# sourceMappingURL=AnamEvent.js.map","export var InternalEvent;\n(function (InternalEvent) {\n InternalEvent[\"WEB_SOCKET_OPEN\"] = \"WEB_SOCKET_OPEN\";\n InternalEvent[\"SIGNAL_MESSAGE_RECEIVED\"] = \"SIGNAL_MESSAGE_RECEIVED\";\n InternalEvent[\"WEBRTC_CHAT_MESSAGE_RECEIVED\"] = \"WEBRTC_CHAT_MESSAGE_RECEIVED\";\n InternalEvent[\"WEBRTC_CLIENT_TOOL_EVENT_RECEIVED\"] = \"WEBRTC_CLIENT_TOOL_EVENT_RECEIVED\";\n})(InternalEvent || (InternalEvent = {}));\n//# sourceMappingURL=InternalEvent.js.map","export var ConnectionClosedCode;\n(function (ConnectionClosedCode) {\n ConnectionClosedCode[\"NORMAL\"] = \"CONNECTION_CLOSED_CODE_NORMAL\";\n ConnectionClosedCode[\"MICROPHONE_PERMISSION_DENIED\"] = \"CONNECTION_CLOSED_CODE_MICROPHONE_PERMISSION_DENIED\";\n ConnectionClosedCode[\"SIGNALLING_CLIENT_CONNECTION_FAILURE\"] = \"CONNECTION_CLOSED_CODE_SIGNALLING_CLIENT_CONNECTION_FAILURE\";\n ConnectionClosedCode[\"WEBRTC_FAILURE\"] = \"CONNECTION_CLOSED_CODE_WEBRTC_FAILURE\";\n ConnectionClosedCode[\"SERVER_CLOSED_CONNECTION\"] = \"CONNECTION_CLOSED_CODE_SERVER_CLOSED_CONNECTION\";\n})(ConnectionClosedCode || (ConnectionClosedCode = {}));\n//# sourceMappingURL=ConnectionClosedCodes.js.map","export class AgentAudioInputStream {\n constructor(config, signallingClient) {\n this.sequenceNumber = 0;\n this.config = config;\n this.signallingClient = signallingClient;\n }\n /**\n * Send PCM audio chunk to server.\n * @param audioData - Raw PCM audio bytes (ArrayBuffer/Uint8Array) or base64-encoded string\n */\n sendAudioChunk(audioData) {\n const base64 = typeof audioData === 'string'\n ? audioData\n : this.arrayBufferToBase64(audioData);\n const payload = {\n audioData: base64,\n encoding: this.config.encoding,\n sampleRate: this.config.sampleRate,\n channels: this.config.channels,\n sequenceNumber: this.sequenceNumber++,\n };\n this.signallingClient.sendAgentAudioInput(payload);\n }\n /**\n * Signal end of the current audio sequence/turn.\n * Sends AGENT_AUDIO_INPUT_END signal message and resets sequence number.\n */\n endSequence() {\n this.signallingClient.sendAgentAudioInputEnd();\n this.sequenceNumber = 0;\n }\n /**\n * Get the current sequence number (number of chunks sent in current sequence).\n */\n getSequenceNumber() {\n return this.sequenceNumber;\n }\n /**\n * Get the audio format configuration for this stream.\n */\n getConfig() {\n return this.config;\n }\n arrayBufferToBase64(buffer) {\n const bytes = buffer instanceof Uint8Array ? buffer : new Uint8Array(buffer);\n const binary = Array.from(bytes, (byte) => String.fromCharCode(byte)).join('');\n return btoa(binary);\n }\n}\n//# sourceMappingURL=AgentAudioInputStream.js.map","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { AnamEvent, InternalEvent, SignalMessageAction, ConnectionClosedCode, } from '../types';\nconst DEFAULT_HEARTBEAT_INTERVAL_SECONDS = 5;\nconst DEFAULT_WS_RECONNECTION_ATTEMPTS = 5;\nexport class SignallingClient {\n constructor(sessionId, options, publicEventEmitter, internalEventEmitter, apiGatewayConfig) {\n var _a, _b, _c, _d, _e;\n this.stopSignal = false;\n this.sendingBuffer = [];\n this.wsConnectionAttempts = 0;\n this.socket = null;\n this.heartBeatIntervalRef = null;\n this.publicEventEmitter = publicEventEmitter;\n this.internalEventEmitter = internalEventEmitter;\n this.apiGatewayConfig = apiGatewayConfig;\n if (!sessionId) {\n throw new Error('Signalling Client: sessionId is required');\n }\n this.sessionId = sessionId;\n const { heartbeatIntervalSeconds, maxWsReconnectionAttempts, url } = options;\n this.heartbeatIntervalSeconds =\n heartbeatIntervalSeconds || DEFAULT_HEARTBEAT_INTERVAL_SECONDS;\n this.maxWsReconnectionAttempts =\n maxWsReconnectionAttempts || DEFAULT_WS_RECONNECTION_ATTEMPTS;\n if (!url.baseUrl) {\n throw new Error('Signalling Client: baseUrl is required');\n }\n // Construct WebSocket URL (with or without API Gateway)\n if (((_a = this.apiGatewayConfig) === null || _a === void 0 ? void 0 : _a.enabled) && ((_b = this.apiGatewayConfig) === null || _b === void 0 ? void 0 : _b.baseUrl)) {\n // Use API Gateway WebSocket URL\n const gatewayUrl = new URL(this.apiGatewayConfig.baseUrl);\n const wsPath = (_c = this.apiGatewayConfig.wsPath) !== null && _c !== void 0 ? _c : '/ws';\n // Construct gateway WebSocket URL\n gatewayUrl.protocol = gatewayUrl.protocol.replace('http', 'ws');\n gatewayUrl.pathname = wsPath;\n this.url = gatewayUrl;\n // Construct the complete target WebSocket URL and pass it as a query parameter\n const httpProtocol = url.protocol || 'https';\n const targetProtocol = httpProtocol === 'http' ? 'ws' : 'wss';\n const httpUrl = `${httpProtocol}://${url.baseUrl}`;\n const targetWsPath = (_d = url.signallingPath) !== null && _d !== void 0 ? _d : '/ws';\n // Build complete target URL\n const targetUrl = new URL(httpUrl);\n targetUrl.protocol = targetProtocol === 'ws' ? 'ws:' : 'wss:';\n if (url.port) {\n targetUrl.port = url.port;\n }\n targetUrl.pathname = targetWsPath;\n targetUrl.searchParams.append('session_id', sessionId);\n // Pass complete target URL as query parameter\n this.url.searchParams.append('target_url', targetUrl.href);\n }\n else {\n // Direct connection to Anam (original behavior)\n const httpProtocol = url.protocol || 'https';\n const initUrl = `${httpProtocol}://${url.baseUrl}`;\n this.url = new URL(initUrl);\n this.url.protocol = url.protocol === 'http' ? 'ws:' : 'wss:';\n if (url.port) {\n this.url.port = url.port;\n }\n this.url.pathname = (_e = url.signallingPath) !== null && _e !== void 0 ? _e : '/ws';\n this.url.searchParams.append('session_id', sessionId);\n }\n }\n stop() {\n this.stopSignal = true;\n this.closeSocket();\n }\n connect() {\n this.socket = new WebSocket(this.url.href);\n this.socket.onopen = this.onOpen.bind(this);\n this.socket.onclose = this.onClose.bind(this);\n this.socket.onerror = this.onError.bind(this);\n return this.socket;\n }\n sendOffer(localDescription) {\n return __awaiter(this, void 0, void 0, function* () {\n const offerMessagePayload = {\n connectionDescription: localDescription,\n userUid: this.sessionId, // TODO: this should be renamed to session Id on the server\n };\n const offerMessage = {\n actionType: SignalMessageAction.OFFER,\n sessionId: this.sessionId,\n payload: offerMessagePayload,\n };\n this.sendSignalMessage(offerMessage);\n });\n }\n sendIceCandidate(candidate) {\n return __awaiter(this, void 0, void 0, function* () {\n const iceCandidateMessage = {\n actionType: SignalMessageAction.ICE_CANDIDATE,\n sessionId: this.sessionId,\n payload: candidate.toJSON(),\n };\n this.sendSignalMessage(iceCandidateMessage);\n });\n }\n sendSignalMessage(message) {\n var _a;\n if (((_a = this.socket) === null || _a === void 0 ? void 0 : _a.readyState) === WebSocket.OPEN) {\n try {\n this.socket.send(JSON.stringify(message));\n }\n catch (error) {\n console.error('SignallingClient - sendSignalMessage: error sending message', error);\n }\n }\n else {\n this.sendingBuffer.push(message);\n }\n }\n sendTalkMessage(payload) {\n return __awaiter(this, void 0, void 0, function* () {\n const chatMessage = {\n actionType: SignalMessageAction.TALK_STREAM_INPUT,\n sessionId: this.sessionId,\n payload: payload,\n };\n this.sendSignalMessage(chatMessage);\n });\n }\n sendAgentAudioInput(payload) {\n const message = {\n actionType: SignalMessageAction.AGENT_AUDIO_INPUT,\n sessionId: this.sessionId,\n payload: payload,\n };\n this.sendSignalMessage(message);\n }\n sendAgentAudioInputEnd() {\n const message = {\n actionType: SignalMessageAction.AGENT_AUDIO_INPUT_END,\n sessionId: this.sessionId,\n payload: {},\n };\n this.sendSignalMessage(message);\n }\n closeSocket() {\n if (this.socket) {\n this.socket.close();\n this.socket = null;\n }\n if (this.heartBeatIntervalRef) {\n clearInterval(this.heartBeatIntervalRef);\n this.heartBeatIntervalRef = null;\n }\n }\n onOpen() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.socket) {\n throw new Error('SignallingClient - onOpen: socket is null');\n }\n try {\n this.wsConnectionAttempts = 0;\n this.flushSendingBuffer();\n this.socket.onmessage = this.onMessage.bind(this);\n this.startSendingHeartBeats();\n this.internalEventEmitter.emit(InternalEvent.WEB_SOCKET_OPEN);\n }\n catch (e) {\n console.error('SignallingClient - onOpen: error in onOpen', e);\n this.publicEventEmitter.emit(AnamEvent.CONNECTION_CLOSED, ConnectionClosedCode.SIGNALLING_CLIENT_CONNECTION_FAILURE);\n }\n });\n }\n onClose() {\n return __awaiter(this, void 0, void 0, function* () {\n this.wsConnectionAttempts += 1;\n if (this.stopSignal) {\n return;\n }\n if (this.wsConnectionAttempts <= this.maxWsReconnectionAttempts) {\n this.socket = null;\n setTimeout(() => {\n this.connect();\n }, 100 * this.wsConnectionAttempts);\n }\n else {\n if (this.heartBeatIntervalRef) {\n clearInterval(this.heartBeatIntervalRef);\n this.heartBeatIntervalRef = null;\n }\n this.publicEventEmitter.emit(AnamEvent.CONNECTION_CLOSED, ConnectionClosedCode.SIGNALLING_CLIENT_CONNECTION_FAILURE);\n }\n });\n }\n onError(event) {\n if (this.stopSignal) {\n return;\n }\n console.error('SignallingClient - onError: ', event);\n }\n flushSendingBuffer() {\n const newBuffer = [];\n if (this.sendingBuffer.length > 0) {\n this.sendingBuffer.forEach((message) => {\n var _a;\n if (((_a = this.socket) === null || _a === void 0 ? void 0 : _a.readyState) === WebSocket.OPEN) {\n this.socket.send(JSON.stringify(message));\n }\n else {\n newBuffer.push(message);\n }\n });\n }\n this.sendingBuffer = newBuffer;\n }\n onMessage(event) {\n return __awaiter(this, void 0, void 0, function* () {\n const message = JSON.parse(event.data);\n this.internalEventEmitter.emit(InternalEvent.SIGNAL_MESSAGE_RECEIVED, message);\n });\n }\n startSendingHeartBeats() {\n if (!this.socket) {\n throw new Error('SignallingClient - startSendingHeartBeats: socket is null');\n }\n if (this.heartBeatIntervalRef) {\n console.warn('SignallingClient - startSendingHeartBeats: heartbeat interval already set');\n }\n // send a heartbeat message every heartbeatIntervalSeconds\n const heartbeatInterval = this.heartbeatIntervalSeconds * 1000;\n const heartbeatMessage = {\n actionType: SignalMessageAction.HEARTBEAT,\n sessionId: this.sessionId,\n payload: '',\n };\n const heartbeatMessageJson = JSON.stringify(heartbeatMessage);\n this.heartBeatIntervalRef = setInterval(() => {\n var _a;\n if (this.stopSignal) {\n return;\n }\n if (((_a = this.socket) === null || _a === void 0 ? void 0 : _a.readyState) === WebSocket.OPEN) {\n this.socket.send(heartbeatMessageJson);\n }\n }, heartbeatInterval);\n }\n}\n//# sourceMappingURL=SignallingClient.js.map","export function isCustomPersonaConfig(personaConfig) {\n return 'brainType' in personaConfig || 'llmId' in personaConfig;\n}\n//# sourceMappingURL=PersonaConfig.js.map","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { ClientError, ErrorCode } from '../lib/ClientError';\nimport { CLIENT_METADATA, DEFAULT_API_BASE_URL, DEFAULT_API_VERSION, } from '../lib/constants';\nimport { isCustomPersonaConfig } from '../types/PersonaConfig';\nexport class CoreApiRestClient {\n constructor(sessionToken, apiKey, options) {\n if (!sessionToken && !apiKey) {\n throw new Error('Either sessionToken or apiKey must be provided');\n }\n this.sessionToken = sessionToken || null;\n this.apiKey = apiKey || null;\n this.baseUrl = (options === null || options === void 0 ? void 0 : options.baseUrl) || DEFAULT_API_BASE_URL;\n this.apiVersion = (options === null || options === void 0 ? void 0 : options.apiVersion) || DEFAULT_API_VERSION;\n this.apiGatewayConfig = (options === null || options === void 0 ? void 0 : options.apiGateway) || undefined;\n }\n /**\n * Builds URL and headers for a request, applying API Gateway configuration if enabled\n */\n buildGatewayUrlAndHeaders(targetPath, baseHeaders) {\n var _a, _b;\n if (((_a = this.apiGatewayConfig) === null || _a === void 0 ? void 0 : _a.enabled) && ((_b = this.apiGatewayConfig) === null || _b === void 0 ? void 0 : _b.baseUrl)) {\n // Use gateway base URL with same endpoint path\n const url = `${this.apiGatewayConfig.baseUrl}${targetPath}`;\n // Add complete target URL header for gateway routing\n const targetUrl = new URL(`${this.baseUrl}${targetPath}`);\n const headers = Object.assign(Object.assign({}, baseHeaders), { 'X-Anam-Target-Url': targetUrl.href });\n return { url, headers };\n }\n else {\n // Direct call to Anam API\n return {\n url: `${this.baseUrl}${targetPath}`,\n headers: baseHeaders,\n };\n }\n }\n startSession(personaConfig, sessionOptions) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.sessionToken) {\n if (!personaConfig) {\n throw new ClientError('Persona configuration must be provided when using apiKey', ErrorCode.CLIENT_ERROR_CODE_VALIDATION_ERROR, 400);\n }\n this.sessionToken = yield this.unsafe_getSessionToken(personaConfig);\n }\n // Check if brainType is being used and log deprecation warning\n if (personaConfig && 'brainType' in personaConfig) {\n console.warn('Warning: brainType is deprecated and will be removed in a future version. Please use llmId instead.');\n }\n try {\n const targetPath = `${this.apiVersion}/engine/session`;\n const { url, headers } = this.buildGatewayUrlAndHeaders(targetPath, {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${this.sessionToken}`,\n });\n const response = yield fetch(url, {\n method: 'POST',\n headers,\n body: JSON.stringify({\n personaConfig,\n sessionOptions,\n clientMetadata: CLIENT_METADATA,\n }),\n });\n const data = yield response.json();\n const errorCause = data.error;\n switch (response.status) {\n case 200:\n case 201:\n return data;\n case 400:\n throw new ClientError('Invalid request to start session', ErrorCode.CLIENT_ERROR_CODE_VALIDATION_ERROR, 400, { cause: data.message });\n case 401:\n throw new ClientError('Authentication failed when starting session', ErrorCode.CLIENT_ERROR_CODE_AUTHENTICATION_ERROR, 401, { cause: data.message });\n case 402:\n throw new ClientError('Please sign up for a plan to start a session', ErrorCode.CLIENT_ERROR_CODE_NO_PLAN_FOUND, 402, { cause: data.message });\n case 403:\n throw new ClientError('Authentication failed when starting session', ErrorCode.CLIENT_ERROR_CODE_AUTHENTICATION_ERROR, 403, { cause: data.message });\n case 429:\n if (errorCause === 'Concurrent session limit reached') {\n throw new ClientError('Concurrency limit reached, please upgrade your plan', ErrorCode.CLIENT_ERROR_CODE_MAX_CONCURRENT_SESSIONS_REACHED, 429, { cause: data.message });\n }\n else if (errorCause === 'Spend cap reached') {\n throw new ClientError('Spend cap reached, please upgrade your plan', ErrorCode.CLIENT_ERROR_CODE_SPEND_CAP_REACHED, 429, { cause: data.message });\n }\n else {\n throw new ClientError('Usage limit reached, please upgrade your plan', ErrorCode.CLIENT_ERROR_CODE_USAGE_LIMIT_REACHED, 429, { cause: data.message });\n }\n case 503:\n throw new ClientError('There are no available personas, please try again later', ErrorCode.CLIENT_ERROR_CODE_SERVICE_BUSY, 503, { cause: data.message });\n default:\n throw new ClientError('Unknown error when starting session', ErrorCode.CLIENT_ERROR_CODE_SERVER_ERROR, 500, { cause: data.message });\n }\n }\n catch (error) {\n if (error instanceof ClientError) {\n throw error;\n }\n throw new ClientError('Failed to start session', ErrorCode.CLIENT_ERROR_CODE_SERVER_ERROR, 500, { cause: error instanceof Error ? error.message : String(error) });\n }\n });\n }\n unsafe_getSessionToken(personaConfig) {\n return __awaiter(this, void 0, void 0, function* () {\n console.warn('Using unsecure method. This method should not be used in production.');\n if (!this.apiKey) {\n throw new Error('No apiKey provided');\n }\n // Check if brainType is being used and log deprecation warning\n if (personaConfig && 'brainType' in personaConfig) {\n console.warn('Warning: brainType is deprecated and will be removed in a future version. Please use llmId instead.');\n }\n let body = {\n clientLabel: 'js-sdk-api-key',\n };\n if (isCustomPersonaConfig(personaConfig)) {\n body = Object.assign(Object.assign({}, body), { personaConfig });\n }\n try {\n const targetPath = `${this.apiVersion}/auth/session-token`;\n const { url, headers } = this.buildGatewayUrlAndHeaders(targetPath, {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${this.apiKey}`,\n });\n const response = yield fetch(url, {\n method: 'POST',\n headers,\n body: JSON.stringify(body),\n });\n const data = yield response.json();\n return data.sessionToken;\n }\n catch (e) {\n throw new Error('Failed to get session token');\n }\n });\n }\n getApiUrl() {\n return `${this.baseUrl}${this.apiVersion}`;\n }\n}\n//# sourceMappingURL=CoreApiRestClient.js.map","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nexport class EngineApiRestClient {\n constructor(baseUrl, sessionId, apiGatewayConfig) {\n this.baseUrl = baseUrl;\n this.sessionId = sessionId;\n this.apiGatewayConfig = apiGatewayConfig;\n }\n sendTalkCommand(content) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a, _b;\n try {\n // Determine the URL and headers based on API Gateway configuration\n let url;\n let headers = {\n 'Content-Type': 'application/json',\n };\n const targetPath = `/talk`;\n const queryString = `?session_id=${this.sessionId}`;\n if (((_a = this.apiGatewayConfig) === null || _a === void 0 ? void 0 : _a.enabled) && ((_b = this.apiGatewayConfig) === null || _b === void 0 ? void 0 : _b.baseUrl)) {\n // Use gateway base URL with same endpoint path\n url = `${this.apiGatewayConfig.baseUrl}${targetPath}${queryString}`;\n // Add complete target URL header for gateway routing\n const targetUrl = new URL(`${this.baseUrl}${targetPath}${queryString}`);\n headers['X-Anam-Target-Url'] = targetUrl.href;\n }\n else {\n // Direct call to Anam engine\n url = `${this.baseUrl}${targetPath}${queryString}`;\n }\n const response = yield fetch(url, {\n method: 'POST',\n headers,\n body: JSON.stringify({\n content,\n }),\n });\n if (!response.ok) {\n throw new Error(`Failed to send talk command: ${response.status} ${response.statusText}`);\n }\n }\n catch (error) {\n console.error(error);\n throw new Error('EngineApiRestClient - sendTalkCommand: Failed to send talk command');\n }\n });\n }\n}\n//# sourceMappingURL=EngineApiRestClient.js.map","export class InternalEventEmitter {\n constructor() {\n this.listeners = {};\n }\n addListener(event, callback) {\n if (!this.listeners[event]) {\n this.listeners[event] = new Set();\n }\n this.listeners[event].add(callback);\n }\n removeListener(event, callback) {\n if (!this.listeners[event])\n return;\n this.listeners[event].delete(callback);\n }\n emit(event, ...args) {\n if (!this.listeners[event])\n return;\n this.listeners[event].forEach((callback) => {\n callback(...args);\n });\n }\n}\n//# sourceMappingURL=InternalEventEmitter.js.map","import { MessageRole, InternalEvent, AnamEvent, } from '../types';\nexport class MessageHistoryClient {\n constructor(publicEventEmitter, internalEventEmitter) {\n this.messages = [];\n this.publicEventEmitter = publicEventEmitter;\n this.internalEventEmitter = internalEventEmitter;\n // register for events\n this.internalEventEmitter.addListener(InternalEvent.WEBRTC_CHAT_MESSAGE_RECEIVED, this.processWebRtcTextMessageEvent.bind(this));\n }\n webRtcTextMessageEventToMessageStreamEvent(event) {\n return {\n id: `${event.role}::${event.message_id}`, // id is the same for persona and user for a single question response, so we need to differentiate them\n content: event.content,\n role: event.role,\n endOfSpeech: event.end_of_speech,\n interrupted: event.interrupted,\n };\n }\n processUserMessage(messageEvent) {\n // each user message is added directly to the history\n // user messages can not be interrupted\n const userMessage = {\n id: messageEvent.id,\n content: messageEvent.content,\n role: messageEvent.role,\n };\n this.messages.push(userMessage);\n }\n processPersonaMessage(messageEvent) {\n const personaMessage = {\n id: messageEvent.id,\n content: messageEvent.content,\n role: messageEvent.role,\n interrupted: messageEvent.interrupted,\n };\n // check for existing message in the history\n const existingMessageIndex = this.messages.findIndex((m) => m.id === personaMessage.id);\n if (existingMessageIndex !== -1) {\n const existingMessage = this.messages[existingMessageIndex];\n // update the existing message\n this.messages[existingMessageIndex] = Object.assign(Object.assign({}, existingMessage), { content: existingMessage.content + personaMessage.content, interrupted: existingMessage.interrupted || personaMessage.interrupted });\n }\n else {\n // add the new persona message to the history\n this.messages.push(personaMessage);\n }\n }\n processWebRtcTextMessageEvent(event) {\n const messageStreamEvent = this.webRtcTextMessageEventToMessageStreamEvent(event);\n // pass to callback stream\n this.publicEventEmitter.emit(AnamEvent.MESSAGE_STREAM_EVENT_RECEIVED, messageStreamEvent);\n // update the message history\n switch (messageStreamEvent.role) {\n case MessageRole.USER:\n this.processUserMessage(messageStreamEvent);\n break;\n case MessageRole.PERSONA:\n this.processPersonaMessage(messageStreamEvent);\n break;\n }\n if (messageStreamEvent.endOfSpeech) {\n this.publicEventEmitter.emit(AnamEvent.MESSAGE_HISTORY_UPDATED, this.messages);\n }\n }\n}\n//# sourceMappingURL=MessageHistoryClient.js.map","import { ClientMetricMeasurement, sendClientMetric, } from '../lib/ClientMetrics';\nimport { AnamEvent } from '../types';\nexport class PublicEventEmitter {\n constructor() {\n this.listeners = {};\n }\n addListener(event, callback) {\n if (!this.listeners[event]) {\n this.listeners[event] = new Set();\n }\n this.listeners[event].add(callback);\n }\n removeListener(event, callback) {\n if (!this.listeners[event])\n return;\n this.listeners[event].delete(callback);\n }\n emit(event, ...args) {\n if (event === AnamEvent.CONNECTION_ESTABLISHED) {\n sendClientMetric(ClientMetricMeasurement.CLIENT_METRIC_MEASUREMENT_CONNECTION_ESTABLISHED, '1');\n }\n if (event === AnamEvent.CONNECTION_CLOSED) {\n const [closeCode, details] = args;\n sendClientMetric(ClientMetricMeasurement.CLIENT_METRIC_MEASUREMENT_CONNECTION_CLOSED, closeCode, details ? { details: details } : undefined);\n }\n if (!this.listeners[event])\n return;\n this.listeners[event].forEach((callback) => {\n callback(...args);\n });\n }\n}\n//# sourceMappingURL=PublicEventEmitter.js.map","export var TalkMessageStreamState;\n(function (TalkMessageStreamState) {\n TalkMessageStreamState[TalkMessageStreamState[\"UNSTARTED\"] = 0] = \"UNSTARTED\";\n TalkMessageStreamState[TalkMessageStreamState[\"STREAMING\"] = 1] = \"STREAMING\";\n TalkMessageStreamState[TalkMessageStreamState[\"INTERRUPTED\"] = 2] = \"INTERRUPTED\";\n TalkMessageStreamState[TalkMessageStreamState[\"ENDED\"] = 3] = \"ENDED\";\n})(TalkMessageStreamState || (TalkMessageStreamState = {}));\n//# sourceMappingURL=TalkMessageStreamState.js.map","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { InternalEvent, SignalMessageAction } from '.';\nimport { TalkMessageStreamState } from './TalkMessageStreamState';\nexport class TalkMessageStream {\n constructor(correlationId, internalEventEmitter, signallingClient) {\n this.state = TalkMessageStreamState.UNSTARTED;\n this.correlationId = correlationId;\n this.internalEventEmitter = internalEventEmitter;\n this.signallingClient = signallingClient;\n this.internalEventEmitter.addListener(InternalEvent.SIGNAL_MESSAGE_RECEIVED, this.onSignalMessage.bind(this));\n }\n onDeactivate() {\n this.internalEventEmitter.removeListener(InternalEvent.SIGNAL_MESSAGE_RECEIVED, this.onSignalMessage.bind(this));\n }\n onSignalMessage(signalMessage) {\n return __awaiter(this, void 0, void 0, function* () {\n if (signalMessage.actionType === SignalMessageAction.TALK_STREAM_INTERRUPTED) {\n const message = signalMessage.payload;\n if (message.correlationId === this.correlationId) {\n this.state = TalkMessageStreamState.INTERRUPTED;\n this.onDeactivate();\n }\n }\n });\n }\n endMessage() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.state === TalkMessageStreamState.ENDED) {\n console.warn('Talk stream is already ended via end of speech. No need to call endMessage.');\n return;\n }\n if (this.state !== TalkMessageStreamState.STREAMING) {\n console.warn('Talk stream is not active state: ' + this.state);\n return;\n }\n const payload = {\n content: '',\n startOfSpeech: false,\n endOfSpeech: true,\n correlationId: this.correlationId,\n };\n yield this.signallingClient.sendTalkMessage(payload);\n this.state = TalkMessageStreamState.ENDED;\n this.onDeactivate();\n });\n }\n streamMessageChunk(partialMessage, endOfSpeech) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.state !== TalkMessageStreamState.STREAMING &&\n this.state !== TalkMessageStreamState.UNSTARTED) {\n // throw error\n throw new Error('Talk stream is not in an active state: ' + this.state);\n }\n const payload = {\n content: partialMessage,\n startOfSpeech: this.state === TalkMessageStreamState.UNSTARTED,\n endOfSpeech: endOfSpeech,\n correlationId: this.correlationId,\n };\n this.state = endOfSpeech\n ? TalkMessageStreamState.ENDED\n : TalkMessageStreamState.STREAMING;\n if (this.state === TalkMessageStreamState.ENDED) {\n this.onDeactivate();\n }\n // send message to signalling client\n yield this.signallingClient.sendTalkMessage(payload);\n });\n }\n getCorrelationId() {\n return this.correlationId;\n }\n isActive() {\n return (this.state === TalkMessageStreamState.STREAMING ||\n this.state === TalkMessageStreamState.UNSTARTED);\n }\n getState() {\n return this.state;\n }\n}\n//# sourceMappingURL=TalkMessageStream.js.map","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { ClientMetricMeasurement, createRTCStatsReport, sendClientMetric, } from '../lib/ClientMetrics';\nimport { EngineApiRestClient, SignallingClient, ToolCallManager, } from '../modules';\nimport { AnamEvent, AudioPermissionState, ConnectionClosedCode, DataChannelMessage, InternalEvent, SignalMessageAction, } from '../types';\nimport { AgentAudioInputStream } from '../types/AgentAudioInputStream';\nimport { TalkMessageStream } from '../types/TalkMessageStream';\nconst SUCCESS_METRIC_POLLING_TIMEOUT_MS = 15000; // After this time we will stop polling for the first frame and consider the session a failure.\nconst STATS_COLLECTION_INTERVAL_MS = 5000;\nconst ICE_CANDIDATE_POOL_SIZE = 2; // Optimisation to speed up connection time\nexport class StreamingClient {\n constructor(sessionId, options, publicEventEmitter, internalEventEmitter) {\n var _a, _b, _c, _d;\n this.peerConnection = null;\n this.connectionReceivedAnswer = false;\n this.remoteIceCandidateBuffer = [];\n this.inputAudioStream = null;\n this.dataChannel = null;\n this.videoElement = null;\n this.videoStream = null;\n this.audioStream = null;\n this.inputAudioState = {\n isMuted: false,\n permissionState: AudioPermissionState.NOT_REQUESTED,\n };\n this.successMetricPoller = null;\n this.successMetricFired = false;\n this.showPeerConnectionStatsReport = false;\n this.peerConnectionStatsReportOutputFormat = 'console';\n this.statsCollectionInterval = null;\n this.agentAudioInputStream = null;\n this.publicEventEmitter = publicEventEmitter;\n this.internalEventEmitter = internalEventEmitter;\n this.apiGatewayConfig = options.apiGateway;\n // initialize input audio state\n const { inputAudio } = options;\n this.inputAudioState = inputAudio.inputAudioState;\n if (options.inputAudio.userProvidedMediaStream) {\n this.inputAudioStream = options.inputAudio.userProvidedMediaStream;\n }\n this.disableInputAudio = options.inputAudio.disableInputAudio === true;\n // register event handlers\n this.internalEventEmitter.addListener(InternalEvent.WEB_SOCKET_OPEN, this.onSignallingClientConnected.bind(this));\n this.internalEventEmitter.addListener(InternalEvent.SIGNAL_MESSAGE_RECEIVED, this.onSignalMessage.bind(this));\n // set ice servers\n this.iceServers = options.iceServers;\n // initialize signalling client\n this.signallingClient = new SignallingClient(sessionId, options.signalling, this.publicEventEmitter, this.internalEventEmitter, this.apiGatewayConfig);\n // initialize engine API client\n this.engineApiRestClient = new EngineApiRestClient(options.engine.baseUrl, sessionId, this.apiGatewayConfig);\n this.audioDeviceId = options.inputAudio.audioDeviceId;\n this.showPeerConnectionStatsReport =\n (_b = (_a = options.metrics) === null || _a === void 0 ? void 0 : _a.showPeerConnectionStatsReport) !== null && _b !== void 0 ? _b : false;\n this.peerConnectionStatsReportOutputFormat =\n (_d = (_c = options.metrics) === null || _c === void 0 ? void 0 : _c.peerConnectionStatsReportOutputFormat) !== null && _d !== void 0 ? _d : 'console';\n }\n onInputAudioStateChange(oldState, newState) {\n // changed microphone mute state\n if (oldState.isMuted !== newState.isMuted) {\n if (newState.isMuted) {\n this.muteAllAudioTracks();\n }\n else {\n this.unmuteAllAudioTracks();\n }\n }\n }\n muteAllAudioTracks() {\n var _a;\n (_a = this.inputAudioStream) === null || _a === void 0 ? void 0 : _a.getAudioTracks().forEach((track) => {\n track.enabled = false;\n });\n }\n unmuteAllAudioTracks() {\n var _a;\n (_a = this.inputAudioStream) === null || _a === void 0 ? void 0 : _a.getAudioTracks().forEach((track) => {\n track.enabled = true;\n });\n }\n startStatsCollection() {\n if (this.statsCollectionInterval) {\n return;\n }\n // Send stats every STATS_COLLECTION_INTERVAL_MS seconds\n this.statsCollectionInterval = setInterval(() => __awaiter(this, void 0, void 0, function* () {\n if (!this.peerConnection ||\n !this.dataChannel ||\n this.dataChannel.readyState !== 'open') {\n return;\n }\n try {\n const stats = yield this.peerConnection.getStats();\n this.sendClientSideMetrics(stats);\n }\n catch (error) {\n console.error('Failed to collect and send stats:', error);\n }\n }), STATS_COLLECTION_INTERVAL_MS);\n }\n sendClientSideMetrics(stats) {\n stats.forEach((report) => {\n // Process inbound-rtp stats for both video and audio\n if (report.type === 'inbound-rtp') {\n const metrics = {\n message_type: 'remote_rtp_stats',\n data: report,\n };\n // Send the metrics via data channel\n if (this.dataChannel && this.dataChannel.readyState === 'open') {\n this.dataChannel.send(JSON.stringify(metrics));\n }\n }\n });\n }\n startSuccessMetricPolling() {\n if (this.successMetricPoller || this.successMetricFired) {\n return;\n }\n const timeoutId = setTimeout(() => {\n if (this.successMetricPoller) {\n console.warn('No video frames received, there is a problem with the connection.');\n clearInterval(this.successMetricPoller);\n this.successMetricPoller = null;\n }\n }, SUCCESS_METRIC_POLLING_TIMEOUT_MS);\n this.successMetricPoller = setInterval(() => __awaiter(this, void 0, void 0, function* () {\n if (!this.peerConnection || this.successMetricFired) {\n if (this.successMetricPoller) {\n clearInterval(this.successMetricPoller);\n }\n clearTimeout(timeoutId);\n return;\n }\n try {\n const stats = yield this.peerConnection.getStats();\n let videoDetected = false;\n let detectionMethod = null;\n stats.forEach((report) => {\n // Find the report for inbound video\n if (report.type === 'inbound-rtp' && report.kind === 'video') {\n // Method 1: Try framesDecoded (most reliable when available)\n if (report.framesDecoded !== undefined &&\n report.framesDecoded > 0) {\n videoDetected = true;\n detectionMethod = 'framesDecoded';\n }\n else if (report.framesReceived !== undefined &&\n report.framesReceived > 0) {\n videoDetected = true;\n detectionMethod = 'framesReceived';\n }\n else if (report.bytesReceived > 0 &&\n report.packetsReceived > 0 &&\n // Additional check: ensure we've received enough data for actual video\n report.bytesReceived > 100000 // rough threshold\n ) {\n videoDetected = true;\n detectionMethod = 'bytesReceived';\n }\n }\n });\n if (videoDetected && !this.successMetricFired) {\n this.successMetricFired = true;\n sendClientMetric(ClientMetricMeasurement.CLIENT_METRIC_MEASUREMENT_SESSION_SUCCESS, '1', detectionMethod ? { detectionMethod } : undefined);\n if (this.successMetricPoller) {\n clearInterval(this.successMetricPoller);\n }\n clearTimeout(timeoutId);\n this.successMetricPoller = null;\n }\n }\n catch (error) { }\n }), 500);\n }\n muteInputAudio() {\n const oldAudioState = this.inputAudioState;\n const newAudioState = Object.assign(Object.assign({}, this.inputAudioState), { isMuted: true });\n this.inputAudioState = newAudioState;\n this.onInputAudioStateChange(oldAudioState, newAudioState);\n return this.inputAudioState;\n }\n unmuteInputAudio() {\n const oldAudioState = this.inputAudioState;\n const newAudioState = Object.assign(Object.assign({}, this.inputAudioState), { isMuted: false });\n this.inputAudioState = newAudioState;\n this.onInputAudioStateChange(oldAudioState, newAudioState);\n return this.inputAudioState;\n }\n getInputAudioState() {\n return this.inputAudioState;\n }\n getPeerConnection() {\n return this.peerConnection;\n }\n changeAudioInputDevice(deviceId) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.peerConnection) {\n throw new Error('StreamingClient - changeAudioInputDevice: peer connection is not initialized. Start streaming first.');\n }\n if (deviceId === null || deviceId === undefined) {\n throw new Error('StreamingClient - changeAudioInputDevice: deviceId is required');\n }\n // Store the current mute state to preserve it\n const wasMuted = this.inputAudioState.isMuted;\n try {\n // Stop the current audio stream tracks\n if (this.inputAudioStream) {\n this.inputAudioStream.getAudioTracks().forEach((track) => {\n track.stop();\n });\n }\n // Request new audio stream with the new device ID\n const audioConstraints = {\n echoCancellation: true,\n deviceId: {\n exact: deviceId,\n },\n };\n this.inputAudioStream = yield navigator.mediaDevices.getUserMedia({\n audio: audioConstraints,\n });\n // Update the stored device ID\n this.audioDeviceId = deviceId;\n // Replace the audio track in the peer connection\n yield this.setupAudioTrack();\n // Restore the mute state\n if (wasMuted) {\n this.muteAllAudioTracks();\n }\n // Emit event to notify that the device has changed\n this.publicEventEmitter.emit(AnamEvent.INPUT_AUDIO_DEVICE_CHANGED, deviceId);\n }\n catch (error) {\n console.error('Failed to change audio input device:', error);\n throw new Error(`StreamingClient - changeAudioInputDevice: ${error instanceof Error ? error.message : String(error)}`);\n }\n });\n }\n getInputAudioStream() {\n return this.inputAudioStream;\n }\n getVideoStream() {\n return this.videoStream;\n }\n getAudioStream() {\n return this.audioStream;\n }\n sendDataMessage(message) {\n if (this.dataChannel && this.dataChannel.readyState === 'open') {\n this.dataChannel.send(message);\n }\n }\n setMediaStreamTargetById(videoElementId) {\n // set up streaming targets\n if (videoElementId) {\n const videoElement = document.getElementById(videoElementId);\n if (!videoElement) {\n throw new Error(`StreamingClient: video element with id ${videoElementId} not found`);\n }\n this.videoElement = videoElement;\n }\n }\n startConnection() {\n try {\n if (this.peerConnection) {\n console.error('StreamingClient - startConnection: peer connection already exists');\n return;\n }\n // start the connection\n this.signallingClient.connect();\n }\n catch (error) {\n console.error('StreamingClient - startConnection: error', error);\n this.handleWebrtcFailure(error);\n }\n }\n stopConnection() {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.shutdown();\n });\n }\n sendTalkCommand(content) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.peerConnection) {\n throw new Error('StreamingClient - sendTalkCommand: peer connection is null');\n }\n yield this.engineApiRestClient.sendTalkCommand(content);\n return;\n });\n }\n startTalkMessageStream(correlationId) {\n if (!correlationId) {\n // generate a random correlation uuid\n correlationId = Math.random().toString(36).substring(2, 15);\n }\n return new TalkMessageStream(correlationId, this.internalEventEmitter, this.signallingClient);\n }\n createAgentAudioInputStream(config) {\n this.agentAudioInputStream = new AgentAudioInputStream(config, this.signallingClient);\n return this.agentAudioInputStream;\n }\n getAgentAudioInputStream() {\n return this.agentAudioInputStream;\n }\n initPeerConnection() {\n return __awaiter(this, void 0, void 0, function* () {\n this.peerConnection = new RTCPeerConnection({\n iceServers: this.iceServers,\n iceCandidatePoolSize: ICE_CANDIDATE_POOL_SIZE,\n });\n // set event handlers\n this.peerConnection.onicecandidate = this.onIceCandidate.bind(this);\n this.peerConnection.oniceconnectionstatechange =\n this.onIceConnectionStateChange.bind(this);\n this.peerConnection.onconnectionstatechange =\n this.onConnectionStateChange.bind(this);\n this.peerConnection.addEventListener('track', this.onTrackEventHandler.bind(this));\n // set up data channels\n yield this.setupDataChannels();\n // add transceivers\n this.peerConnection.addTransceiver('video', { direction: 'recvonly' });\n if (this.disableInputAudio) {\n this.peerConnection.addTransceiver('audio', { direction: 'recvonly' });\n }\n else {\n this.peerConnection.addTransceiver('audio', { direction: 'sendrecv' });\n // Handle audio setup after transceivers are configured\n if (this.inputAudioStream) {\n // User provided an audio stream, set it up immediately\n yield this.setupAudioTrack();\n }\n else {\n // No user stream, start microphone permission request asynchronously\n // Don't await - let it run in parallel with connection setup\n this.requestMicrophonePermissionAsync().catch((error) => {\n console.error('Async microphone permission request failed:', error);\n });\n }\n }\n });\n }\n onSignalMessage(signalMessage) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.peerConnection) {\n console.error('StreamingClient - onSignalMessage: peerConnection is not initialized');\n return;\n }\n switch (signalMessage.actionType) {\n case SignalMessageAction.ANSWER:\n const answer = signalMessage.payload;\n yield this.peerConnection.setRemoteDescription(answer);\n this.connectionReceivedAnswer = true;\n // flush the remote buffer\n this.flushRemoteIceCandidateBuffer();\n break;\n case SignalMessageAction.ICE_CANDIDATE:\n const iceCandidateConfig = signalMessage.payload;\n const candidate = new RTCIceCandidate(iceCandidateConfig);\n if (this.connectionReceivedAnswer) {\n yield this.peerConnection.addIceCandidate(candidate);\n }\n else {\n this.remoteIceCandidateBuffer.push(candidate);\n }\n break;\n case SignalMessageAction.END_SESSION:\n const reason = signalMessage.payload;\n this.publicEventEmitter.emit(AnamEvent.CONNECTION_CLOSED, ConnectionClosedCode.SERVER_CLOSED_CONNECTION, reason);\n // close the peer connection\n this.shutdown();\n break;\n case SignalMessageAction.WARNING:\n const message = signalMessage.payload;\n console.warn('Warning received from server: ' + message);\n this.publicEventEmitter.emit(AnamEvent.SERVER_WARNING, message);\n break;\n case SignalMessageAction.TALK_STREAM_INTERRUPTED:\n const chatMessage = signalMessage.payload;\n this.publicEventEmitter.emit(AnamEvent.TALK_STREAM_INTERRUPTED, chatMessage.correlationId);\n break;\n case SignalMessageAction.SESSION_READY:\n const sessionId = signalMessage.sessionId;\n this.publicEventEmitter.emit(AnamEvent.SESSION_READY, sessionId);\n break;\n case SignalMessageAction.HEARTBEAT:\n break;\n default:\n console.warn('StreamingClient - onSignalMessage: unknown signal message action type. Is your anam-sdk version up to date?', signalMessage);\n }\n });\n }\n onSignallingClientConnected() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.peerConnection) {\n try {\n yield this.initPeerConnectionAndSendOffer();\n }\n catch (err) {\n console.error('StreamingClient - onSignallingClientConnected: Error initializing peer connection', err);\n this.handleWebrtcFailure(err);\n }\n }\n });\n }\n flushRemoteIceCandidateBuffer() {\n this.remoteIceCandidateBuffer.forEach((candidate) => {\n var _a;\n (_a = this.peerConnection) === null || _a === void 0 ? void 0 : _a.addIceCandidate(candidate);\n });\n this.remoteIceCandidateBuffer = [];\n }\n /**\n * ICE Candidate Trickle\n * As each ICE candidate is gathered from the STUN server it is sent to the\n * webRTC server immediately in an effort to reduce time to connection.\n */\n onIceCandidate(event) {\n if (event.candidate) {\n this.signallingClient.sendIceCandidate(event.candidate);\n }\n }\n onIceConnectionStateChange() {\n var _a, _b;\n if (((_a = this.peerConnection) === null || _a === void 0 ? void 0 : _a.iceConnectionState) === 'connected' ||\n ((_b = this.peerConnection) === null || _b === void 0 ? void 0 : _b.iceConnectionState) === 'completed') {\n this.publicEventEmitter.emit(AnamEvent.CONNECTION_ESTABLISHED);\n // Start collecting stats every 5 seconds\n this.startStatsCollection();\n }\n }\n onConnectionStateChange() {\n var _a;\n if (((_a = this.peerConnection) === null || _a === void 0 ? void 0 : _a.connectionState) === 'closed') {\n console.error('StreamingClient - onConnectionStateChange: Connection closed');\n this.handleWebrtcFailure('The connection to our servers was lost. Please try again.');\n }\n }\n handleWebrtcFailure(err) {\n console.error({ message: 'StreamingClient - handleWebrtcFailure: ', err });\n if (err.name === 'NotAllowedError' && err.message === 'Permission denied') {\n this.publicEventEmitter.emit(AnamEvent.CONNECTION_CLOSED, ConnectionClosedCode.MICROPHONE_PERMISSION_DENIED);\n }\n else {\n this.publicEventEmitter.emit(AnamEvent.CONNECTION_CLOSED, ConnectionClosedCode.WEBRTC_FAILURE);\n }\n try {\n this.stopConnection();\n }\n catch (error) {\n console.error('StreamingClient - handleWebrtcFailure: error stopping connection', error);\n }\n }\n onTrackEventHandler(event) {\n if (event.track.kind === 'video') {\n // start polling stats to detect successful video data received\n this.startSuccessMetricPolling();\n this.videoStream = event.streams[0];\n this.publicEventEmitter.emit(AnamEvent.VIDEO_STREAM_STARTED, this.videoStream);\n if (this.videoElement) {\n this.videoElement.srcObject = this.videoStream;\n const handle = this.videoElement.requestVideoFrameCallback(() => {\n var _a;\n // unregister the callback after the first frame\n (_a = this.videoElement) === null || _a === void 0 ? void 0 : _a.cancelVideoFrameCallback(handle);\n this.publicEventEmitter.emit(AnamEvent.VIDEO_PLAY_STARTED);\n if (!this.successMetricFired) {\n this.successMetricFired = true;\n sendClientMetric(ClientMetricMeasurement.CLIENT_METRIC_MEASUREMENT_SESSION_SUCCESS, '1', { detectionMethod: 'videoElement' });\n }\n });\n }\n }\n else if (event.track.kind === 'audio') {\n this.audioStream = event.streams[0];\n this.publicEventEmitter.emit(AnamEvent.AUDIO_STREAM_STARTED, this.audioStream);\n }\n }\n /**\n * Set up the data channels for sending and receiving messages\n */\n setupDataChannels() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.peerConnection) {\n console.error('StreamingClient - setupDataChannels: peer connection is not initialized');\n return;\n }\n /**\n * Audio - Validate user-provided stream only\n *\n * If the user provided an audio stream, validate it has audio tracks\n * Microphone permission request will be handled asynchronously\n */\n if (!this.disableInputAudio && this.inputAudioStream) {\n // verify the user provided stream has audio tracks\n if (!this.inputAudioStream.getAudioTracks().length) {\n throw new Error('StreamingClient - setupDataChannels: user provided stream does not have audio tracks');\n }\n }\n /**\n * Text\n *\n * Create the data channel for sending and receiving text.\n * There is no input stream for text, instead the sending of data is triggered by a UI interaction.\n */\n const dataChannel = this.peerConnection.createDataChannel('session', {\n ordered: true,\n });\n dataChannel.onopen = () => {\n this.dataChannel = dataChannel !== null && dataChannel !== void 0 ? dataChannel : null;\n };\n dataChannel.onclose = () => { };\n // pass text message to the message history client\n dataChannel.onmessage = (event) => {\n try {\n const message = JSON.parse(event.data);\n // Handle known message types\n switch (message.messageType) {\n case DataChannelMessage.SPEECH_TEXT:\n this.internalEventEmitter.emit(InternalEvent.WEBRTC_CHAT_MESSAGE_RECEIVED, message.data);\n break;\n case DataChannelMessage.CLIENT_TOOL_EVENT:\n const webRtcToolEvent = message.data;\n this.internalEventEmitter.emit(InternalEvent.WEBRTC_CLIENT_TOOL_EVENT_RECEIVED, webRtcToolEvent);\n const clientToolEvent = ToolCallManager.WebRTCClientToolEventToClientToolEvent(webRtcToolEvent);\n this.publicEventEmitter.emit(AnamEvent.CLIENT_TOOL_EVENT_RECEIVED, clientToolEvent);\n break;\n // Unknown message types are silently ignored to maintain forward compatibility\n default:\n break;\n }\n }\n catch (error) {\n console.error('Failed to parse data channel message:', error);\n }\n };\n });\n }\n /**\n * Request microphone permission asynchronously without blocking connection\n */\n requestMicrophonePermissionAsync() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.inputAudioState.permissionState === AudioPermissionState.PENDING) {\n return; // Already requesting\n }\n this.inputAudioState = Object.assign(Object.assign({}, this.inputAudioState), { permissionState: AudioPermissionState.PENDING });\n this.publicEventEmitter.emit(AnamEvent.MIC_PERMISSION_PENDING);\n try {\n const audioConstraints = {\n echoCancellation: true,\n };\n // If an audio device ID is provided in the options, use it\n if (this.audioDeviceId) {\n audioConstraints.deviceId = {\n exact: this.audioDeviceId,\n };\n }\n this.inputAudioStream = yield navigator.mediaDevices.getUserMedia({\n audio: audioConstraints,\n });\n this.inputAudioState = Object.assign(Object.assign({}, this.inputAudioState), { permissionState: AudioPermissionState.GRANTED });\n this.publicEventEmitter.emit(AnamEvent.MIC_PERMISSION_GRANTED);\n // Now add the audio track to the existing connection\n yield this.setupAudioTrack();\n }\n catch (error) {\n console.error('Failed to get microphone permission:', error);\n this.inputAudioState = Object.assign(Object.assign({}, this.inputAudioState), { permissionState: AudioPermissionState.DENIED });\n const errorMessage = error instanceof Error ? error.message : String(error);\n this.publicEventEmitter.emit(AnamEvent.MIC_PERMISSION_DENIED, errorMessage);\n }\n });\n }\n /**\n * Set up audio track and add it to the peer connection using replaceTrack\n */\n setupAudioTrack() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.peerConnection || !this.inputAudioStream) {\n return;\n }\n // verify the stream has audio tracks\n if (!this.inputAudioStream.getAudioTracks().length) {\n console.error('StreamingClient - setupAudioTrack: stream does not have audio tracks');\n return;\n }\n // mute the audio tracks if the user has muted the microphone\n if (this.inputAudioState.isMuted) {\n this.muteAllAudioTracks();\n }\n const audioTrack = this.inputAudioStream.getAudioTracks()[0];\n // Find the audio sender\n const existingSenders = this.peerConnection.getSenders();\n const audioSender = existingSenders.find((sender) => {\n var _a;\n return ((_a = sender.track) === null || _a === void 0 ? void 0 : _a.kind) === 'audio' ||\n (sender.track === null && sender.dtmf !== null);\n });\n if (audioSender) {\n // Replace existing track (or null track) with our audio track\n try {\n yield audioSender.replaceTrack(audioTrack);\n }\n catch (error) {\n console.error('Failed to replace audio track:', error);\n // Fallback: add track normally\n this.peerConnection.addTrack(audioTrack, this.inputAudioStream);\n }\n }\n else {\n // No audio sender found, add track normally\n this.peerConnection.addTrack(audioTrack, this.inputAudioStream);\n }\n // pass the stream to the callback\n this.publicEventEmitter.emit(AnamEvent.INPUT_AUDIO_STREAM_STARTED, this.inputAudioStream);\n });\n }\n initPeerConnectionAndSendOffer() {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.initPeerConnection();\n if (!this.peerConnection) {\n console.error('StreamingClient - initPeerConnectionAndSendOffer: peer connection is not initialized');\n return;\n }\n // create offer and set local description\n try {\n const offer = yield this.peerConnection.createOffer();\n yield this.peerConnection.setLocalDescription(offer);\n }\n catch (error) {\n console.error('StreamingClient - initPeerConnectionAndSendOffer: error creating offer', error);\n }\n if (!this.peerConnection.localDescription) {\n throw new Error('StreamingClient - initPeerConnectionAndSendOffer: local description is null');\n }\n yield this.signallingClient.sendOffer(this.peerConnection.localDescription);\n });\n }\n shutdown() {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n if (this.showPeerConnectionStatsReport) {\n const stats = yield ((_a = this.peerConnection) === null || _a === void 0 ? void 0 : _a.getStats());\n if (stats) {\n const report = createRTCStatsReport(stats, this.peerConnectionStatsReportOutputFormat);\n if (report) {\n console.log(report, undefined, 2);\n }\n }\n }\n // stop stats collection\n if (this.statsCollectionInterval) {\n clearInterval(this.statsCollectionInterval);\n this.statsCollectionInterval = null;\n }\n // reset video frame polling\n if (this.successMetricPoller) {\n clearInterval(this.successMetricPoller);\n this.successMetricPoller = null;\n }\n this.successMetricFired = false;\n // stop the input audio stream\n try {\n if (this.inputAudioStream) {\n this.inputAudioStream.getTracks().forEach((track) => {\n track.stop();\n });\n }\n this.inputAudioStream = null;\n }\n catch (error) {\n console.error('StreamingClient - shutdown: error stopping input audio stream', error);\n }\n // stop the signalling client\n try {\n this.signallingClient.stop();\n }\n catch (error) {\n console.error('StreamingClient - shutdown: error stopping signallilng', error);\n }\n // close the peer connection\n try {\n if (this.peerConnection &&\n this.peerConnection.connectionState !== 'closed') {\n this.peerConnection.onconnectionstatechange = null;\n this.peerConnection.close();\n this.peerConnection = null;\n }\n }\n catch (error) {\n console.error('StreamingClient - shutdown: error closing peer connection', error);\n }\n });\n }\n}\n//# sourceMappingURL=StreamingClient.js.map","export class ToolCallManager {\n /**\n * Converts a WebRtcClientToolEvent to a ClientToolEvent\n */\n static WebRTCClientToolEventToClientToolEvent(webRtcEvent) {\n return {\n eventUid: webRtcEvent.event_uid,\n sessionId: webRtcEvent.session_id,\n eventName: webRtcEvent.event_name,\n eventData: webRtcEvent.event_data,\n timestamp: webRtcEvent.timestamp,\n timestampUserAction: webRtcEvent.timestamp_user_action,\n userActionCorrelationId: webRtcEvent.user_action_correlation_id,\n };\n }\n}\n//# sourceMappingURL=ToolCallManager.js.map","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { Buffer } from 'buffer';\nimport { ClientError, ErrorCode } from './lib/ClientError';\nimport { ClientMetricMeasurement, DEFAULT_ANAM_API_VERSION, DEFAULT_ANAM_METRICS_BASE_URL, sendClientMetric, setClientMetricsApiGateway, setClientMetricsBaseUrl, setClientMetricsDisabled, setMetricsContext, } from './lib/ClientMetrics';\nimport { generateCorrelationId } from './lib/correlationId';\nimport { validateApiGatewayConfig } from './lib/validateApiGatewayConfig';\nimport { CoreApiRestClient, InternalEventEmitter, MessageHistoryClient, PublicEventEmitter, StreamingClient, } from './modules';\nimport { AnamEvent, AudioPermissionState, ConnectionClosedCode, } from './types';\nexport default class AnamClient {\n constructor(sessionToken, personaConfig, options) {\n var _a, _b, _c, _d, _e;\n this.inputAudioState = {\n isMuted: false,\n permissionState: AudioPermissionState.NOT_REQUESTED,\n };\n this.sessionId = null;\n this.organizationId = null;\n this.streamingClient = null;\n this._isStreaming = false;\n const configError = this.validateClientConfig(sessionToken, personaConfig, options);\n if (configError) {\n throw new ClientError(configError, ErrorCode.CLIENT_ERROR_CODE_CONFIGURATION_ERROR, 400);\n }\n this.personaConfig = personaConfig;\n this.clientOptions = options;\n if (((_a = options === null || options === void 0 ? void 0 : options.api) === null || _a === void 0 ? void 0 : _a.baseUrl) || ((_b = options === null || options === void 0 ? void 0 : options.api) === null || _b === void 0 ? void 0 : _b.apiVersion)) {\n setClientMetricsBaseUrl(options.api.baseUrl || DEFAULT_ANAM_METRICS_BASE_URL, options.api.apiVersion || DEFAULT_ANAM_API_VERSION);\n }\n // Pass API Gateway config to metrics module so metrics are routed through the gateway\n if ((_d = (_c = options === null || options === void 0 ? void 0 : options.api) === null || _c === void 0 ? void 0 : _c.apiGateway) === null || _d === void 0 ? void 0 : _d.enabled) {\n setClientMetricsApiGateway(options.api.apiGateway);\n }\n // Allow disabling client metrics telemetry\n if ((_e = options === null || options === void 0 ? void 0 : options.metrics) === null || _e === void 0 ? void 0 : _e.disableClientMetrics) {\n setClientMetricsDisabled(true);\n }\n this.publicEventEmitter = new PublicEventEmitter();\n this.internalEventEmitter = new InternalEventEmitter();\n this.apiClient = new CoreApiRestClient(sessionToken, options === null || options === void 0 ? void 0 : options.apiKey, options === null || options === void 0 ? void 0 : options.api);\n this.messageHistoryClient = new MessageHistoryClient(this.publicEventEmitter, this.internalEventEmitter);\n }\n decodeJwt(token) {\n try {\n const base64Payload = token.split('.')[1];\n const payloadString = Buffer.from(base64Payload, 'base64').toString('utf8');\n const payload = JSON.parse(payloadString);\n return payload;\n }\n catch (error) {\n throw new Error('Invalid session token format');\n }\n }\n validateClientConfig(sessionToken, personaConfig, options) {\n var _a, _b;\n // Validate authentication configuration\n if (!sessionToken && !(options === null || options === void 0 ? void 0 : options.apiKey)) {\n return 'Either sessionToken or apiKey must be provided';\n }\n if ((options === null || options === void 0 ? void 0 : options.apiKey) && sessionToken) {\n return 'Only one of sessionToken or apiKey should be used';\n }\n // Validate gateway configuration\n const apiGatewayError = validateApiGatewayConfig((_a = options === null || options === void 0 ? void 0 : options.api) === null || _a === void 0 ? void 0 : _a.apiGateway);\n if (apiGatewayError) {\n return apiGatewayError;\n }\n // Validate persona configuration based on session token\n if (sessionToken) {\n const decodedToken = this.decodeJwt(sessionToken);\n this.organizationId = decodedToken.accountId;\n setMetricsContext({\n organizationId: this.organizationId,\n });\n const tokenType = (_b = decodedToken.type) === null || _b === void 0 ? void 0 : _b.toLowerCase();\n if (tokenType === 'legacy') {\n return 'Legacy session tokens are no longer supported. Please define your persona when creating your session token. See https://docs.anam.ai/resources/migrating-legacy for more information.';\n }\n else if (tokenType === 'ephemeral' || tokenType === 'stateful') {\n if (personaConfig) {\n return 'This session token already contains a persona configuration. Please remove the personaConfig parameter.';\n }\n }\n }\n else {\n // No session token (using apiKey)\n if (!personaConfig) {\n return 'Missing persona config. Persona configuration must be provided when using apiKey';\n }\n }\n // Validate voice detection configuration\n if (options === null || options === void 0 ? void 0 : options.voiceDetection) {\n if (options.disableInputAudio) {\n return 'Voice detection is disabled because input audio is disabled. Please set disableInputAudio to false to enable voice detection.';\n }\n // End of speech sensitivity must be a number between 0 and 1\n if (options.voiceDetection.endOfSpeechSensitivity !== undefined) {\n if (typeof options.voiceDetection.endOfSpeechSensitivity !== 'number') {\n return 'End of speech sensitivity must be a number';\n }\n if (options.voiceDetection.endOfSpeechSensitivity < 0 ||\n options.voiceDetection.endOfSpeechSensitivity > 1) {\n return 'End of speech sensitivity must be between 0 and 1';\n }\n }\n }\n return undefined;\n }\n buildStartSessionOptionsForClient() {\n var _a;\n const sessionOptions = {};\n if ((_a = this.clientOptions) === null || _a === void 0 ? void 0 : _a.voiceDetection) {\n sessionOptions.voiceDetection = this.clientOptions.voiceDetection;\n }\n // return undefined if no options are set\n if (Object.keys(sessionOptions).length === 0) {\n return undefined;\n }\n return sessionOptions;\n }\n startSession(userProvidedAudioStream) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;\n const config = this.personaConfig;\n // build session options from client options\n const sessionOptions = this.buildStartSessionOptionsForClient();\n // start a new session\n const response = yield this.apiClient.startSession(config, sessionOptions);\n const { sessionId, clientConfig, engineHost, engineProtocol, signallingEndpoint, } = response;\n const { heartbeatIntervalSeconds, maxWsReconnectionAttempts, iceServers: defaultIceServers, } = clientConfig;\n this.sessionId = sessionId;\n setMetricsContext({\n sessionId: this.sessionId,\n });\n // Use custom ICE servers if provided, otherwise use server-provided ICE servers\n const iceServers = ((_a = this.clientOptions) === null || _a === void 0 ? void 0 : _a.iceServers)\n ? this.clientOptions.iceServers\n : defaultIceServers;\n try {\n this.streamingClient = new StreamingClient(sessionId, {\n engine: {\n baseUrl: `${engineProtocol}://${engineHost}`,\n },\n signalling: {\n heartbeatIntervalSeconds,\n maxWsReconnectionAttempts,\n url: {\n baseUrl: engineHost,\n protocol: engineProtocol,\n signallingPath: signallingEndpoint,\n },\n },\n iceServers,\n inputAudio: {\n inputAudioState: this.inputAudioState,\n userProvidedMediaStream: ((_b = this.clientOptions) === null || _b === void 0 ? void 0 : _b.disableInputAudio)\n ? undefined\n : userProvidedAudioStream,\n audioDeviceId: (_c = this.clientOptions) === null || _c === void 0 ? void 0 : _c.audioDeviceId,\n disableInputAudio: (_d = this.clientOptions) === null || _d === void 0 ? void 0 : _d.disableInputAudio,\n },\n apiGateway: (_f = (_e = this.clientOptions) === null || _e === void 0 ? void 0 : _e.api) === null || _f === void 0 ? void 0 : _f.apiGateway,\n metrics: {\n showPeerConnectionStatsReport: (_j = (_h = (_g = this.clientOptions) === null || _g === void 0 ? void 0 : _g.metrics) === null || _h === void 0 ? void 0 : _h.showPeerConnectionStatsReport) !== null && _j !== void 0 ? _j : false,\n peerConnectionStatsReportOutputFormat: (_m = (_l = (_k = this.clientOptions) === null || _k === void 0 ? void 0 : _k.metrics) === null || _l === void 0 ? void 0 : _l.peerConnectionStatsReportOutputFormat) !== null && _m !== void 0 ? _m : 'console',\n },\n }, this.publicEventEmitter, this.internalEventEmitter);\n }\n catch (error) {\n setMetricsContext({\n sessionId: null,\n });\n throw new ClientError('Failed to initialize streaming client', ErrorCode.CLIENT_ERROR_CODE_SERVER_ERROR, 500, {\n cause: error instanceof Error ? error.message : String(error),\n sessionId,\n });\n }\n return sessionId;\n });\n }\n startSessionIfNeeded(userProvidedAudioStream) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.sessionId || !this.streamingClient) {\n yield this.startSession(userProvidedAudioStream);\n if (!this.sessionId || !this.streamingClient) {\n throw new ClientError('Session ID or streaming client is not available after starting session', ErrorCode.CLIENT_ERROR_CODE_SERVER_ERROR, 500, {\n cause: 'Failed to initialize session properly',\n });\n }\n }\n });\n }\n stream(userProvidedAudioStream) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n if (this._isStreaming) {\n throw new Error('Already streaming');\n }\n // generate a new ID here to track the attempt\n const attemptCorrelationId = generateCorrelationId();\n setMetricsContext({\n attemptCorrelationId,\n sessionId: null, // reset sessionId\n });\n sendClientMetric(ClientMetricMeasurement.CLIENT_METRIC_MEASUREMENT_SESSION_ATTEMPT, '1');\n if (((_a = this.clientOptions) === null || _a === void 0 ? void 0 : _a.disableInputAudio) && userProvidedAudioStream) {\n console.warn('AnamClient:Input audio is disabled. User provided audio stream will be ignored.');\n }\n yield this.startSessionIfNeeded(userProvidedAudioStream);\n this._isStreaming = true;\n return new Promise((resolve) => {\n var _a;\n // set stream callbacks to capture the stream\n const streams = [];\n let videoReceived = false;\n let audioReceived = false;\n this.publicEventEmitter.addListener(AnamEvent.VIDEO_STREAM_STARTED, (videoStream) => {\n streams.push(videoStream);\n videoReceived = true;\n if (audioReceived) {\n resolve(streams);\n }\n });\n this.publicEventEmitter.addListener(AnamEvent.AUDIO_STREAM_STARTED, (audioStream) => {\n streams.push(audioStream);\n audioReceived = true;\n if (videoReceived) {\n resolve(streams);\n }\n });\n // start streaming\n (_a = this.streamingClient) === null || _a === void 0 ? void 0 : _a.startConnection();\n });\n });\n }\n /**\n * @deprecated This method is deprecated. Please use streamToVideoElement instead.\n */\n streamToVideoAndAudioElements(videoElementId, audioElementId, userProvidedAudioStream) {\n return __awaiter(this, void 0, void 0, function* () {\n console.warn('AnamClient: streamToVideoAndAudioElements is deprecated. To avoid possible audio issues, please use streamToVideoElement instead.');\n yield this.streamToVideoElement(videoElementId, userProvidedAudioStream);\n });\n }\n streamToVideoElement(videoElementId, userProvidedAudioStream) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n // generate a new ID here to track the attempt\n const attemptCorrelationId = generateCorrelationId();\n setMetricsContext({\n attemptCorrelationId,\n sessionId: null, // reset sessionId\n });\n sendClientMetric(ClientMetricMeasurement.CLIENT_METRIC_MEASUREMENT_SESSION_ATTEMPT, '1');\n if (((_a = this.clientOptions) === null || _a === void 0 ? void 0 : _a.disableInputAudio) && userProvidedAudioStream) {\n console.warn('AnamClient:Input audio is disabled. User provided audio stream will be ignored.');\n }\n try {\n yield this.startSessionIfNeeded(userProvidedAudioStream);\n }\n catch (error) {\n if (error instanceof ClientError) {\n throw error;\n }\n throw new ClientError('Failed to start session', ErrorCode.CLIENT_ERROR_CODE_SERVER_ERROR, 500, {\n cause: error instanceof Error ? error.message : String(error),\n sessionId: this.sessionId,\n });\n }\n if (this._isStreaming) {\n throw new Error('Already streaming');\n }\n this._isStreaming = true;\n if (!this.streamingClient) {\n throw new Error('Failed to stream: streaming client is not available');\n }\n this.streamingClient.setMediaStreamTargetById(videoElementId);\n this.streamingClient.startConnection();\n });\n }\n /**\n * Send a talk command to make the persona speak the provided content.\n * @param content - The text content for the persona to speak\n * @throws Error if session is not started or not currently streaming\n */\n talk(content) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.streamingClient) {\n throw new Error('Failed to send talk command: session is not started. Have you called startSession?');\n }\n if (!this._isStreaming) {\n throw new Error('Failed to send talk command: not currently streaming. Have you called stream?');\n }\n yield this.streamingClient.sendTalkCommand(content);\n return;\n });\n }\n /**\n * Send a raw data message through the WebRTC data channel.\n * @param message - The message string to send through the data channel\n * @throws Error if session is not started\n */\n sendDataMessage(message) {\n if (this.streamingClient) {\n this.streamingClient.sendDataMessage(message);\n }\n else {\n throw new Error('Failed to send message: session is not started.');\n }\n }\n /**\n * Send a user text message in the active streaming session.\n * @param content - The text message content to send\n * @throws Error if not currently streaming or session is not started\n */\n sendUserMessage(content) {\n if (!this._isStreaming) {\n console.warn('AnamClient: Not currently streaming. User message will not be sent.');\n throw new Error('Failed to send user message: not currently streaming');\n }\n const sessionId = this.getActiveSessionId();\n if (!sessionId) {\n throw new Error('Failed to send user message: no active session');\n }\n const currentTimestamp = new Date().toISOString().replace('Z', '');\n const body = JSON.stringify({\n content,\n timestamp: currentTimestamp,\n session_id: sessionId,\n message_type: 'speech',\n });\n this.sendDataMessage(body);\n }\n interruptPersona() {\n if (!this._isStreaming) {\n throw new Error('Failed to send interrupt command: not currently streaming');\n }\n const sessionId = this.getActiveSessionId();\n if (!sessionId) {\n throw new Error('Failed to send interrupt command: no active session');\n }\n const body = JSON.stringify({\n message_type: 'interrupt',\n session_id: sessionId,\n timestamp: new Date().toISOString(), // removing Z not needed\n });\n this.sendDataMessage(body);\n }\n stopStreaming() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.streamingClient) {\n this.publicEventEmitter.emit(AnamEvent.CONNECTION_CLOSED, ConnectionClosedCode.NORMAL);\n yield this.streamingClient.stopConnection();\n this.streamingClient = null;\n this.sessionId = null;\n setMetricsContext({\n attemptCorrelationId: null,\n sessionId: null,\n organizationId: this.organizationId,\n });\n this._isStreaming = false;\n }\n });\n }\n isStreaming() {\n return this._isStreaming;\n }\n setPersonaConfig(personaConfig) {\n this.personaConfig = personaConfig;\n }\n getPersonaConfig() {\n return this.personaConfig;\n }\n getInputAudioState() {\n var _a;\n if ((_a = this.clientOptions) === null || _a === void 0 ? void 0 : _a.disableInputAudio) {\n console.warn('AnamClient: Audio state will not be used because input audio is disabled.');\n }\n // if streaming client is available, make sure our state is up to date\n if (this.streamingClient) {\n this.inputAudioState = this.streamingClient.getInputAudioState();\n }\n return this.inputAudioState;\n }\n muteInputAudio() {\n var _a, _b;\n if ((_a = this.clientOptions) === null || _a === void 0 ? void 0 : _a.disableInputAudio) {\n console.warn('AnamClient: Input audio is disabled. Muting input audio will have no effect.');\n }\n if (this.streamingClient && !((_b = this.clientOptions) === null || _b === void 0 ? void 0 : _b.disableInputAudio)) {\n this.inputAudioState = this.streamingClient.muteInputAudio();\n }\n else {\n this.inputAudioState = Object.assign(Object.assign({}, this.inputAudioState), { isMuted: true });\n }\n return this.inputAudioState;\n }\n unmuteInputAudio() {\n var _a, _b;\n if ((_a = this.clientOptions) === null || _a === void 0 ? void 0 : _a.disableInputAudio) {\n console.warn('AnamClient: Input audio is disabled. Unmuting input audio will have no effect.');\n }\n if (this.streamingClient && !((_b = this.clientOptions) === null || _b === void 0 ? void 0 : _b.disableInputAudio)) {\n this.inputAudioState = this.streamingClient.unmuteInputAudio();\n }\n else {\n this.inputAudioState = Object.assign(Object.assign({}, this.inputAudioState), { isMuted: false });\n }\n return this.inputAudioState;\n }\n changeAudioInputDevice(deviceId) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n if ((_a = this.clientOptions) === null || _a === void 0 ? void 0 : _a.disableInputAudio) {\n throw new Error('AnamClient: Cannot change audio input device because input audio is disabled.');\n }\n if (!this._isStreaming) {\n throw new Error('AnamClient: Cannot change audio input device while not streaming. Start streaming first.');\n }\n if (!this.streamingClient) {\n throw new Error('AnamClient: Cannot change audio input device because streaming client is not available. Start streaming first.');\n }\n yield this.streamingClient.changeAudioInputDevice(deviceId);\n });\n }\n createTalkMessageStream(correlationId) {\n if (!this.streamingClient) {\n throw new Error('Failed to start talk message stream: session is not started.');\n }\n if (correlationId && correlationId.trim() === '') {\n throw new Error('Failed to start talk message stream: correlationId is empty');\n }\n return this.streamingClient.startTalkMessageStream(correlationId);\n }\n createAgentAudioInputStream(config) {\n if (!this.streamingClient) {\n throw new Error('Failed to create agent audio input stream: session is not started.');\n }\n return this.streamingClient.createAgentAudioInputStream(config);\n }\n /**\n * Event handling\n */\n addListener(event, callback) {\n this.publicEventEmitter.addListener(event, callback);\n }\n removeListener(event, callback) {\n this.publicEventEmitter.removeListener(event, callback);\n }\n getActiveSessionId() {\n return this.sessionId;\n }\n}\n//# sourceMappingURL=AnamClient.js.map","import AnamClient from './AnamClient';\nimport { ClientError, ErrorCode } from './lib/ClientError';\n/**\n * Create a new Anam client.\n * @param sessionToken - A session token can be obtained from the Anam API.\n * @param personaConfig - The persona configuration to use.\n * @param options - Additional options.\n * @returns A new Anam client instance.\n */\nconst createClient = (sessionToken, options) => {\n return new AnamClient(sessionToken, undefined, options);\n};\n/**\n * Create a new Anam client with an API key instead of a session token.\n * This method is unsafe for production environments because it requires exposing your API key to the client side.\n * Only use this method for local testing.\n * @param apiKey - Your Anam API key.\n * @param personaConfig - The persona configuration to use.\n * @param options - Additional options.\n * @returns A new Anam client instance.\n */\nconst unsafe_createClientWithApiKey = (apiKey, personaConfig, options) => {\n return new AnamClient(undefined, personaConfig, Object.assign(Object.assign({}, options), { apiKey }));\n};\nexport { createClient, unsafe_createClientWithApiKey, ClientError, ErrorCode };\nexport * from './types';\n//# sourceMappingURL=index.js.map"],"names":["base64Js","byteLength","toByteArray","fromByteArray","lookup","revLookup","Arr","code","i","len","getLens","b64","validLen","placeHoldersLen","lens","_byteLength","tmp","arr","curByte","tripletToBase64","num","encodeChunk","uint8","start","end","output","extraBytes","parts","maxChunkLength","len2","ieee754","buffer","offset","isLE","mLen","nBytes","e","m","eLen","eMax","eBias","nBits","d","s","value","c","rt","base64","require$$0","require$$1","customInspectSymbol","exports","Buffer","SlowBuffer","K_MAX_LENGTH","typedArraySupport","proto","createBuffer","length","buf","arg","encodingOrOffset","allocUnsafe","from","fromString","fromArrayView","isInstance","fromArrayBuffer","valueOf","b","fromObject","assertSize","size","alloc","fill","encoding","checked","string","actual","fromArrayLike","array","arrayView","copy","byteOffset","obj","numberIsNaN","a","x","y","list","pos","mustMatch","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","n","str","max","target","thisStart","thisEnd","thisCopy","targetCopy","bidirectionalIndexOf","val","dir","arrayIndexOf","indexSize","arrLength","valLength","read","foundIndex","found","j","hexWrite","remaining","strLen","parsed","utf8Write","blitBuffer","asciiWrite","asciiToBytes","base64Write","ucs2Write","utf16leToBytes","res","firstByte","codePoint","bytesPerSequence","secondByte","thirdByte","fourthByte","tempCodePoint","decodeCodePointsArray","MAX_ARGUMENTS_LENGTH","codePoints","ret","out","hexSliceLookupTable","bytes","newBuf","checkOffset","ext","noAssert","mul","defineBigIntMethod","validateNumber","first","last","boundsError","lo","hi","checkInt","min","maxBytes","wrtBigUInt64LE","checkIntBI","wrtBigUInt64BE","limit","sub","checkIEEE754","writeFloat","littleEndian","writeDouble","targetStart","errors","E","sym","getMessage","Base","name","range","input","msg","received","addNumericalSeparator","checkBounds","type","INVALID_BASE64_RE","base64clean","units","leadSurrogate","byteArray","src","dst","alphabet","table","i16","fn","BufferBigIntNotDefined","DEFAULT_API_BASE_URL","DEFAULT_API_VERSION","CLIENT_METADATA","__awaiter","thisArg","_arguments","P","generator","adopt","resolve","reject","fulfilled","step","rejected","result","DEFAULT_ANAM_METRICS_BASE_URL","DEFAULT_ANAM_API_VERSION","ClientMetricMeasurement","anamCurrentBaseUrl","anamCurrentApiVersion","apiGatewayConfig","metricsDisabled","setClientMetricsBaseUrl","baseUrl","apiVersion","setClientMetricsApiGateway","config","setClientMetricsDisabled","disabled","anamMetricsContext","setMetricsContext","context","sendClientMetric","tags","metricTags","targetPath","url","headers","error","createRTCStatsReport","stats","outputFormat","_a","_b","_c","statsByType","report","jsonReport","inboundVideo","r","_d","_e","videoData","inboundAudio","audioData","outboundAudio","userAudioData","codecData","transportData","issues","issue","ErrorCode","ClientError","message","statusCode","details","generateCorrelationId","validateApiGatewayConfig","SignalMessageAction","DataChannelMessage","AudioPermissionState","MessageRole","AnamEvent","InternalEvent","ConnectionClosedCode","AgentAudioInputStream","signallingClient","payload","binary","byte","DEFAULT_HEARTBEAT_INTERVAL_SECONDS","DEFAULT_WS_RECONNECTION_ATTEMPTS","SignallingClient","sessionId","options","publicEventEmitter","internalEventEmitter","heartbeatIntervalSeconds","maxWsReconnectionAttempts","gatewayUrl","wsPath","httpProtocol","targetProtocol","httpUrl","targetWsPath","targetUrl","initUrl","localDescription","offerMessagePayload","offerMessage","candidate","iceCandidateMessage","chatMessage","event","newBuffer","heartbeatInterval","heartbeatMessage","heartbeatMessageJson","isCustomPersonaConfig","personaConfig","CoreApiRestClient","sessionToken","apiKey","baseHeaders","sessionOptions","response","data","errorCause","body","EngineApiRestClient","content","queryString","InternalEventEmitter","callback","args","MessageHistoryClient","messageEvent","userMessage","personaMessage","existingMessageIndex","existingMessage","messageStreamEvent","PublicEventEmitter","closeCode","TalkMessageStreamState","TalkMessageStream","correlationId","signalMessage","partialMessage","endOfSpeech","SUCCESS_METRIC_POLLING_TIMEOUT_MS","STATS_COLLECTION_INTERVAL_MS","ICE_CANDIDATE_POOL_SIZE","StreamingClient","inputAudio","oldState","newState","track","metrics","timeoutId","videoDetected","detectionMethod","oldAudioState","newAudioState","deviceId","wasMuted","audioConstraints","videoElementId","videoElement","answer","iceCandidateConfig","reason","err","handle","dataChannel","webRtcToolEvent","clientToolEvent","ToolCallManager","errorMessage","audioTrack","audioSender","sender","offer","webRtcEvent","AnamClient","configError","token","base64Payload","payloadString","apiGatewayError","decodedToken","tokenType","userProvidedAudioStream","_f","_g","_h","_j","_k","_l","_m","clientConfig","engineHost","engineProtocol","signallingEndpoint","defaultIceServers","iceServers","attemptCorrelationId","streams","videoReceived","audioReceived","videoStream","audioStream","audioElementId","currentTimestamp","createClient"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28]}