dignity.js 0.2.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/utils/event-emitter.js", "../node_modules/tweetnacl/nacl-fast.js", "../node_modules/tweetnacl-util/nacl-util.js", "../src/security/sloth-vdf.js", "../src/security/vdf.js", "../src/security/message-security-service.js", "../src/core/dignity-p2p.js", "../src/signaling/signaling-pool.js", "../src/signaling/websocket-signaling-provider.js", "../node_modules/peerjs-js-binarypack/lib/binarypack.ts", "../node_modules/peerjs-js-binarypack/lib/bufferbuilder.ts", "../node_modules/webrtc-adapter/dist/utils.js", "../node_modules/webrtc-adapter/dist/chrome/getusermedia.js", "../node_modules/webrtc-adapter/dist/chrome/chrome_shim.js", "../node_modules/webrtc-adapter/dist/firefox/getusermedia.js", "../node_modules/webrtc-adapter/dist/firefox/getdisplaymedia.js", "../node_modules/webrtc-adapter/dist/firefox/firefox_shim.js", "../node_modules/webrtc-adapter/dist/safari/safari_shim.js", "../node_modules/sdp/dist/sdp.js", "../node_modules/webrtc-adapter/dist/common_shim.js", "../node_modules/webrtc-adapter/dist/adapter_factory.js", "../node_modules/webrtc-adapter/dist/adapter_core.js", "../node_modules/eventemitter3/index.js", "../node_modules/@msgpack/msgpack/src/utils/int.ts", "../node_modules/@msgpack/msgpack/src/utils/utf8.ts", "../node_modules/@msgpack/msgpack/src/ExtData.ts", "../node_modules/@msgpack/msgpack/src/DecodeError.ts", "../node_modules/@msgpack/msgpack/src/timestamp.ts", "../node_modules/@msgpack/msgpack/src/ExtensionCodec.ts", "../node_modules/@msgpack/msgpack/src/utils/typedArrays.ts", "../node_modules/@msgpack/msgpack/src/Encoder.ts", "../node_modules/@msgpack/msgpack/src/encode.ts", "../node_modules/@msgpack/msgpack/src/utils/prettyByte.ts", "../node_modules/@msgpack/msgpack/src/CachedKeyDecoder.ts", "../node_modules/@msgpack/msgpack/src/Decoder.ts", "../node_modules/@msgpack/msgpack/src/decode.ts", "../node_modules/@msgpack/msgpack/src/utils/stream.ts", "../node_modules/@msgpack/msgpack/src/decodeAsync.ts", "../node_modules/@msgpack/msgpack/src/index.ts", "../node_modules/peerjs/dist/lib/exports.ts", "../node_modules/peerjs/dist/lib/util.ts", "../node_modules/peerjs/dist/lib/dataconnection/BufferedConnection/binaryPackChunker.ts", "../node_modules/peerjs/dist/lib/supports.ts", "../node_modules/peerjs/dist/lib/utils/validateId.ts", "../node_modules/peerjs/dist/lib/utils/randomToken.ts", "../node_modules/peerjs/dist/lib/peer.ts", "../node_modules/peerjs/dist/lib/logger.ts", "../node_modules/peerjs/dist/lib/socket.ts", "../node_modules/peerjs/dist/lib/enums.ts", "../node_modules/peerjs/dist/lib/version.ts", "../node_modules/peerjs/dist/lib/mediaconnection.ts", "../node_modules/peerjs/dist/lib/negotiator.ts", "../node_modules/peerjs/dist/lib/baseconnection.ts", "../node_modules/peerjs/dist/lib/peerError.ts", "../node_modules/peerjs/dist/lib/api.ts", "../node_modules/peerjs/dist/lib/dataconnection/BufferedConnection/BinaryPack.ts", "../node_modules/peerjs/dist/lib/dataconnection/BufferedConnection/BufferedConnection.ts", "../node_modules/peerjs/dist/lib/dataconnection/DataConnection.ts", "../node_modules/peerjs/dist/lib/dataconnection/BufferedConnection/Raw.ts", "../node_modules/peerjs/dist/lib/dataconnection/BufferedConnection/Json.ts", "../node_modules/peerjs/dist/lib/msgPackPeer.ts", "../node_modules/peerjs/dist/lib/dataconnection/StreamConnection/MsgPack.ts", "../node_modules/peerjs/dist/lib/dataconnection/StreamConnection/StreamConnection.ts", "../src/signaling/peerjs-signaling-provider.js", "../src/signaling/default-signaling-config.js", "../src/signaling/create-default-signaling-pool.js", "../src/network/in-memory-network.js", "../src/index.js"],
4
- "sourcesContent": ["class EventEmitter {\n constructor() {\n this.handlers = new Map();\n }\n\n on(eventName, handler) {\n if (!this.handlers.has(eventName)) {\n this.handlers.set(eventName, new Set());\n }\n\n this.handlers.get(eventName).add(handler);\n }\n\n off(eventName, handler) {\n const eventHandlers = this.handlers.get(eventName);\n if (!eventHandlers) {\n return;\n }\n\n eventHandlers.delete(handler);\n if (eventHandlers.size === 0) {\n this.handlers.delete(eventName);\n }\n }\n\n emit(eventName, payload) {\n const eventHandlers = this.handlers.get(eventName);\n if (!eventHandlers) {\n return;\n }\n\n for (const handler of eventHandlers) {\n handler(payload);\n }\n }\n}\n\nmodule.exports = EventEmitter;\n", "(function(nacl) {\n'use strict';\n\n// Ported in 2014 by Dmitry Chestnykh and Devi Mandiri.\n// Public domain.\n//\n// Implementation derived from TweetNaCl version 20140427.\n// See for details: http://tweetnacl.cr.yp.to/\n\nvar gf = function(init) {\n var i, r = new Float64Array(16);\n if (init) for (i = 0; i < init.length; i++) r[i] = init[i];\n return r;\n};\n\n// Pluggable, initialized in high-level API below.\nvar randombytes = function(/* x, n */) { throw new Error('no PRNG'); };\n\nvar _0 = new Uint8Array(16);\nvar _9 = new Uint8Array(32); _9[0] = 9;\n\nvar gf0 = gf(),\n gf1 = gf([1]),\n _121665 = gf([0xdb41, 1]),\n D = gf([0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]),\n D2 = gf([0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406]),\n X = gf([0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169]),\n Y = gf([0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666]),\n I = gf([0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]);\n\nfunction ts64(x, i, h, l) {\n x[i] = (h >> 24) & 0xff;\n x[i+1] = (h >> 16) & 0xff;\n x[i+2] = (h >> 8) & 0xff;\n x[i+3] = h & 0xff;\n x[i+4] = (l >> 24) & 0xff;\n x[i+5] = (l >> 16) & 0xff;\n x[i+6] = (l >> 8) & 0xff;\n x[i+7] = l & 0xff;\n}\n\nfunction vn(x, xi, y, yi, n) {\n var i,d = 0;\n for (i = 0; i < n; i++) d |= x[xi+i]^y[yi+i];\n return (1 & ((d - 1) >>> 8)) - 1;\n}\n\nfunction crypto_verify_16(x, xi, y, yi) {\n return vn(x,xi,y,yi,16);\n}\n\nfunction crypto_verify_32(x, xi, y, yi) {\n return vn(x,xi,y,yi,32);\n}\n\nfunction core_salsa20(o, p, k, c) {\n var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,\n j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,\n j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,\n j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,\n j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,\n j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,\n j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,\n j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,\n j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,\n j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,\n j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,\n j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,\n j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,\n j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,\n j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,\n j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;\n\n var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\n x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\n x15 = j15, u;\n\n for (var i = 0; i < 20; i += 2) {\n u = x0 + x12 | 0;\n x4 ^= u<<7 | u>>>(32-7);\n u = x4 + x0 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x4 | 0;\n x12 ^= u<<13 | u>>>(32-13);\n u = x12 + x8 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x1 | 0;\n x9 ^= u<<7 | u>>>(32-7);\n u = x9 + x5 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x9 | 0;\n x1 ^= u<<13 | u>>>(32-13);\n u = x1 + x13 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x6 | 0;\n x14 ^= u<<7 | u>>>(32-7);\n u = x14 + x10 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x14 | 0;\n x6 ^= u<<13 | u>>>(32-13);\n u = x6 + x2 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x11 | 0;\n x3 ^= u<<7 | u>>>(32-7);\n u = x3 + x15 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x3 | 0;\n x11 ^= u<<13 | u>>>(32-13);\n u = x11 + x7 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n\n u = x0 + x3 | 0;\n x1 ^= u<<7 | u>>>(32-7);\n u = x1 + x0 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x1 | 0;\n x3 ^= u<<13 | u>>>(32-13);\n u = x3 + x2 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x4 | 0;\n x6 ^= u<<7 | u>>>(32-7);\n u = x6 + x5 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x6 | 0;\n x4 ^= u<<13 | u>>>(32-13);\n u = x4 + x7 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x9 | 0;\n x11 ^= u<<7 | u>>>(32-7);\n u = x11 + x10 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x11 | 0;\n x9 ^= u<<13 | u>>>(32-13);\n u = x9 + x8 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x14 | 0;\n x12 ^= u<<7 | u>>>(32-7);\n u = x12 + x15 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x12 | 0;\n x14 ^= u<<13 | u>>>(32-13);\n u = x14 + x13 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n }\n x0 = x0 + j0 | 0;\n x1 = x1 + j1 | 0;\n x2 = x2 + j2 | 0;\n x3 = x3 + j3 | 0;\n x4 = x4 + j4 | 0;\n x5 = x5 + j5 | 0;\n x6 = x6 + j6 | 0;\n x7 = x7 + j7 | 0;\n x8 = x8 + j8 | 0;\n x9 = x9 + j9 | 0;\n x10 = x10 + j10 | 0;\n x11 = x11 + j11 | 0;\n x12 = x12 + j12 | 0;\n x13 = x13 + j13 | 0;\n x14 = x14 + j14 | 0;\n x15 = x15 + j15 | 0;\n\n o[ 0] = x0 >>> 0 & 0xff;\n o[ 1] = x0 >>> 8 & 0xff;\n o[ 2] = x0 >>> 16 & 0xff;\n o[ 3] = x0 >>> 24 & 0xff;\n\n o[ 4] = x1 >>> 0 & 0xff;\n o[ 5] = x1 >>> 8 & 0xff;\n o[ 6] = x1 >>> 16 & 0xff;\n o[ 7] = x1 >>> 24 & 0xff;\n\n o[ 8] = x2 >>> 0 & 0xff;\n o[ 9] = x2 >>> 8 & 0xff;\n o[10] = x2 >>> 16 & 0xff;\n o[11] = x2 >>> 24 & 0xff;\n\n o[12] = x3 >>> 0 & 0xff;\n o[13] = x3 >>> 8 & 0xff;\n o[14] = x3 >>> 16 & 0xff;\n o[15] = x3 >>> 24 & 0xff;\n\n o[16] = x4 >>> 0 & 0xff;\n o[17] = x4 >>> 8 & 0xff;\n o[18] = x4 >>> 16 & 0xff;\n o[19] = x4 >>> 24 & 0xff;\n\n o[20] = x5 >>> 0 & 0xff;\n o[21] = x5 >>> 8 & 0xff;\n o[22] = x5 >>> 16 & 0xff;\n o[23] = x5 >>> 24 & 0xff;\n\n o[24] = x6 >>> 0 & 0xff;\n o[25] = x6 >>> 8 & 0xff;\n o[26] = x6 >>> 16 & 0xff;\n o[27] = x6 >>> 24 & 0xff;\n\n o[28] = x7 >>> 0 & 0xff;\n o[29] = x7 >>> 8 & 0xff;\n o[30] = x7 >>> 16 & 0xff;\n o[31] = x7 >>> 24 & 0xff;\n\n o[32] = x8 >>> 0 & 0xff;\n o[33] = x8 >>> 8 & 0xff;\n o[34] = x8 >>> 16 & 0xff;\n o[35] = x8 >>> 24 & 0xff;\n\n o[36] = x9 >>> 0 & 0xff;\n o[37] = x9 >>> 8 & 0xff;\n o[38] = x9 >>> 16 & 0xff;\n o[39] = x9 >>> 24 & 0xff;\n\n o[40] = x10 >>> 0 & 0xff;\n o[41] = x10 >>> 8 & 0xff;\n o[42] = x10 >>> 16 & 0xff;\n o[43] = x10 >>> 24 & 0xff;\n\n o[44] = x11 >>> 0 & 0xff;\n o[45] = x11 >>> 8 & 0xff;\n o[46] = x11 >>> 16 & 0xff;\n o[47] = x11 >>> 24 & 0xff;\n\n o[48] = x12 >>> 0 & 0xff;\n o[49] = x12 >>> 8 & 0xff;\n o[50] = x12 >>> 16 & 0xff;\n o[51] = x12 >>> 24 & 0xff;\n\n o[52] = x13 >>> 0 & 0xff;\n o[53] = x13 >>> 8 & 0xff;\n o[54] = x13 >>> 16 & 0xff;\n o[55] = x13 >>> 24 & 0xff;\n\n o[56] = x14 >>> 0 & 0xff;\n o[57] = x14 >>> 8 & 0xff;\n o[58] = x14 >>> 16 & 0xff;\n o[59] = x14 >>> 24 & 0xff;\n\n o[60] = x15 >>> 0 & 0xff;\n o[61] = x15 >>> 8 & 0xff;\n o[62] = x15 >>> 16 & 0xff;\n o[63] = x15 >>> 24 & 0xff;\n}\n\nfunction core_hsalsa20(o,p,k,c) {\n var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,\n j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,\n j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,\n j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,\n j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,\n j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,\n j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,\n j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,\n j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,\n j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,\n j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,\n j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,\n j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,\n j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,\n j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,\n j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;\n\n var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\n x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\n x15 = j15, u;\n\n for (var i = 0; i < 20; i += 2) {\n u = x0 + x12 | 0;\n x4 ^= u<<7 | u>>>(32-7);\n u = x4 + x0 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x4 | 0;\n x12 ^= u<<13 | u>>>(32-13);\n u = x12 + x8 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x1 | 0;\n x9 ^= u<<7 | u>>>(32-7);\n u = x9 + x5 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x9 | 0;\n x1 ^= u<<13 | u>>>(32-13);\n u = x1 + x13 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x6 | 0;\n x14 ^= u<<7 | u>>>(32-7);\n u = x14 + x10 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x14 | 0;\n x6 ^= u<<13 | u>>>(32-13);\n u = x6 + x2 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x11 | 0;\n x3 ^= u<<7 | u>>>(32-7);\n u = x3 + x15 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x3 | 0;\n x11 ^= u<<13 | u>>>(32-13);\n u = x11 + x7 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n\n u = x0 + x3 | 0;\n x1 ^= u<<7 | u>>>(32-7);\n u = x1 + x0 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x1 | 0;\n x3 ^= u<<13 | u>>>(32-13);\n u = x3 + x2 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x4 | 0;\n x6 ^= u<<7 | u>>>(32-7);\n u = x6 + x5 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x6 | 0;\n x4 ^= u<<13 | u>>>(32-13);\n u = x4 + x7 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x9 | 0;\n x11 ^= u<<7 | u>>>(32-7);\n u = x11 + x10 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x11 | 0;\n x9 ^= u<<13 | u>>>(32-13);\n u = x9 + x8 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x14 | 0;\n x12 ^= u<<7 | u>>>(32-7);\n u = x12 + x15 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x12 | 0;\n x14 ^= u<<13 | u>>>(32-13);\n u = x14 + x13 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n }\n\n o[ 0] = x0 >>> 0 & 0xff;\n o[ 1] = x0 >>> 8 & 0xff;\n o[ 2] = x0 >>> 16 & 0xff;\n o[ 3] = x0 >>> 24 & 0xff;\n\n o[ 4] = x5 >>> 0 & 0xff;\n o[ 5] = x5 >>> 8 & 0xff;\n o[ 6] = x5 >>> 16 & 0xff;\n o[ 7] = x5 >>> 24 & 0xff;\n\n o[ 8] = x10 >>> 0 & 0xff;\n o[ 9] = x10 >>> 8 & 0xff;\n o[10] = x10 >>> 16 & 0xff;\n o[11] = x10 >>> 24 & 0xff;\n\n o[12] = x15 >>> 0 & 0xff;\n o[13] = x15 >>> 8 & 0xff;\n o[14] = x15 >>> 16 & 0xff;\n o[15] = x15 >>> 24 & 0xff;\n\n o[16] = x6 >>> 0 & 0xff;\n o[17] = x6 >>> 8 & 0xff;\n o[18] = x6 >>> 16 & 0xff;\n o[19] = x6 >>> 24 & 0xff;\n\n o[20] = x7 >>> 0 & 0xff;\n o[21] = x7 >>> 8 & 0xff;\n o[22] = x7 >>> 16 & 0xff;\n o[23] = x7 >>> 24 & 0xff;\n\n o[24] = x8 >>> 0 & 0xff;\n o[25] = x8 >>> 8 & 0xff;\n o[26] = x8 >>> 16 & 0xff;\n o[27] = x8 >>> 24 & 0xff;\n\n o[28] = x9 >>> 0 & 0xff;\n o[29] = x9 >>> 8 & 0xff;\n o[30] = x9 >>> 16 & 0xff;\n o[31] = x9 >>> 24 & 0xff;\n}\n\nfunction crypto_core_salsa20(out,inp,k,c) {\n core_salsa20(out,inp,k,c);\n}\n\nfunction crypto_core_hsalsa20(out,inp,k,c) {\n core_hsalsa20(out,inp,k,c);\n}\n\nvar sigma = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]);\n // \"expand 32-byte k\"\n\nfunction crypto_stream_salsa20_xor(c,cpos,m,mpos,b,n,k) {\n var z = new Uint8Array(16), x = new Uint8Array(64);\n var u, i;\n for (i = 0; i < 16; i++) z[i] = 0;\n for (i = 0; i < 8; i++) z[i] = n[i];\n while (b >= 64) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < 64; i++) c[cpos+i] = m[mpos+i] ^ x[i];\n u = 1;\n for (i = 8; i < 16; i++) {\n u = u + (z[i] & 0xff) | 0;\n z[i] = u & 0xff;\n u >>>= 8;\n }\n b -= 64;\n cpos += 64;\n mpos += 64;\n }\n if (b > 0) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < b; i++) c[cpos+i] = m[mpos+i] ^ x[i];\n }\n return 0;\n}\n\nfunction crypto_stream_salsa20(c,cpos,b,n,k) {\n var z = new Uint8Array(16), x = new Uint8Array(64);\n var u, i;\n for (i = 0; i < 16; i++) z[i] = 0;\n for (i = 0; i < 8; i++) z[i] = n[i];\n while (b >= 64) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < 64; i++) c[cpos+i] = x[i];\n u = 1;\n for (i = 8; i < 16; i++) {\n u = u + (z[i] & 0xff) | 0;\n z[i] = u & 0xff;\n u >>>= 8;\n }\n b -= 64;\n cpos += 64;\n }\n if (b > 0) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < b; i++) c[cpos+i] = x[i];\n }\n return 0;\n}\n\nfunction crypto_stream(c,cpos,d,n,k) {\n var s = new Uint8Array(32);\n crypto_core_hsalsa20(s,n,k,sigma);\n var sn = new Uint8Array(8);\n for (var i = 0; i < 8; i++) sn[i] = n[i+16];\n return crypto_stream_salsa20(c,cpos,d,sn,s);\n}\n\nfunction crypto_stream_xor(c,cpos,m,mpos,d,n,k) {\n var s = new Uint8Array(32);\n crypto_core_hsalsa20(s,n,k,sigma);\n var sn = new Uint8Array(8);\n for (var i = 0; i < 8; i++) sn[i] = n[i+16];\n return crypto_stream_salsa20_xor(c,cpos,m,mpos,d,sn,s);\n}\n\n/*\n* Port of Andrew Moon's Poly1305-donna-16. Public domain.\n* https://github.com/floodyberry/poly1305-donna\n*/\n\nvar poly1305 = function(key) {\n this.buffer = new Uint8Array(16);\n this.r = new Uint16Array(10);\n this.h = new Uint16Array(10);\n this.pad = new Uint16Array(8);\n this.leftover = 0;\n this.fin = 0;\n\n var t0, t1, t2, t3, t4, t5, t6, t7;\n\n t0 = key[ 0] & 0xff | (key[ 1] & 0xff) << 8; this.r[0] = ( t0 ) & 0x1fff;\n t1 = key[ 2] & 0xff | (key[ 3] & 0xff) << 8; this.r[1] = ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\n t2 = key[ 4] & 0xff | (key[ 5] & 0xff) << 8; this.r[2] = ((t1 >>> 10) | (t2 << 6)) & 0x1f03;\n t3 = key[ 6] & 0xff | (key[ 7] & 0xff) << 8; this.r[3] = ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\n t4 = key[ 8] & 0xff | (key[ 9] & 0xff) << 8; this.r[4] = ((t3 >>> 4) | (t4 << 12)) & 0x00ff;\n this.r[5] = ((t4 >>> 1)) & 0x1ffe;\n t5 = key[10] & 0xff | (key[11] & 0xff) << 8; this.r[6] = ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\n t6 = key[12] & 0xff | (key[13] & 0xff) << 8; this.r[7] = ((t5 >>> 11) | (t6 << 5)) & 0x1f81;\n t7 = key[14] & 0xff | (key[15] & 0xff) << 8; this.r[8] = ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\n this.r[9] = ((t7 >>> 5)) & 0x007f;\n\n this.pad[0] = key[16] & 0xff | (key[17] & 0xff) << 8;\n this.pad[1] = key[18] & 0xff | (key[19] & 0xff) << 8;\n this.pad[2] = key[20] & 0xff | (key[21] & 0xff) << 8;\n this.pad[3] = key[22] & 0xff | (key[23] & 0xff) << 8;\n this.pad[4] = key[24] & 0xff | (key[25] & 0xff) << 8;\n this.pad[5] = key[26] & 0xff | (key[27] & 0xff) << 8;\n this.pad[6] = key[28] & 0xff | (key[29] & 0xff) << 8;\n this.pad[7] = key[30] & 0xff | (key[31] & 0xff) << 8;\n};\n\npoly1305.prototype.blocks = function(m, mpos, bytes) {\n var hibit = this.fin ? 0 : (1 << 11);\n var t0, t1, t2, t3, t4, t5, t6, t7, c;\n var d0, d1, d2, d3, d4, d5, d6, d7, d8, d9;\n\n var h0 = this.h[0],\n h1 = this.h[1],\n h2 = this.h[2],\n h3 = this.h[3],\n h4 = this.h[4],\n h5 = this.h[5],\n h6 = this.h[6],\n h7 = this.h[7],\n h8 = this.h[8],\n h9 = this.h[9];\n\n var r0 = this.r[0],\n r1 = this.r[1],\n r2 = this.r[2],\n r3 = this.r[3],\n r4 = this.r[4],\n r5 = this.r[5],\n r6 = this.r[6],\n r7 = this.r[7],\n r8 = this.r[8],\n r9 = this.r[9];\n\n while (bytes >= 16) {\n t0 = m[mpos+ 0] & 0xff | (m[mpos+ 1] & 0xff) << 8; h0 += ( t0 ) & 0x1fff;\n t1 = m[mpos+ 2] & 0xff | (m[mpos+ 3] & 0xff) << 8; h1 += ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\n t2 = m[mpos+ 4] & 0xff | (m[mpos+ 5] & 0xff) << 8; h2 += ((t1 >>> 10) | (t2 << 6)) & 0x1fff;\n t3 = m[mpos+ 6] & 0xff | (m[mpos+ 7] & 0xff) << 8; h3 += ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\n t4 = m[mpos+ 8] & 0xff | (m[mpos+ 9] & 0xff) << 8; h4 += ((t3 >>> 4) | (t4 << 12)) & 0x1fff;\n h5 += ((t4 >>> 1)) & 0x1fff;\n t5 = m[mpos+10] & 0xff | (m[mpos+11] & 0xff) << 8; h6 += ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\n t6 = m[mpos+12] & 0xff | (m[mpos+13] & 0xff) << 8; h7 += ((t5 >>> 11) | (t6 << 5)) & 0x1fff;\n t7 = m[mpos+14] & 0xff | (m[mpos+15] & 0xff) << 8; h8 += ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\n h9 += ((t7 >>> 5)) | hibit;\n\n c = 0;\n\n d0 = c;\n d0 += h0 * r0;\n d0 += h1 * (5 * r9);\n d0 += h2 * (5 * r8);\n d0 += h3 * (5 * r7);\n d0 += h4 * (5 * r6);\n c = (d0 >>> 13); d0 &= 0x1fff;\n d0 += h5 * (5 * r5);\n d0 += h6 * (5 * r4);\n d0 += h7 * (5 * r3);\n d0 += h8 * (5 * r2);\n d0 += h9 * (5 * r1);\n c += (d0 >>> 13); d0 &= 0x1fff;\n\n d1 = c;\n d1 += h0 * r1;\n d1 += h1 * r0;\n d1 += h2 * (5 * r9);\n d1 += h3 * (5 * r8);\n d1 += h4 * (5 * r7);\n c = (d1 >>> 13); d1 &= 0x1fff;\n d1 += h5 * (5 * r6);\n d1 += h6 * (5 * r5);\n d1 += h7 * (5 * r4);\n d1 += h8 * (5 * r3);\n d1 += h9 * (5 * r2);\n c += (d1 >>> 13); d1 &= 0x1fff;\n\n d2 = c;\n d2 += h0 * r2;\n d2 += h1 * r1;\n d2 += h2 * r0;\n d2 += h3 * (5 * r9);\n d2 += h4 * (5 * r8);\n c = (d2 >>> 13); d2 &= 0x1fff;\n d2 += h5 * (5 * r7);\n d2 += h6 * (5 * r6);\n d2 += h7 * (5 * r5);\n d2 += h8 * (5 * r4);\n d2 += h9 * (5 * r3);\n c += (d2 >>> 13); d2 &= 0x1fff;\n\n d3 = c;\n d3 += h0 * r3;\n d3 += h1 * r2;\n d3 += h2 * r1;\n d3 += h3 * r0;\n d3 += h4 * (5 * r9);\n c = (d3 >>> 13); d3 &= 0x1fff;\n d3 += h5 * (5 * r8);\n d3 += h6 * (5 * r7);\n d3 += h7 * (5 * r6);\n d3 += h8 * (5 * r5);\n d3 += h9 * (5 * r4);\n c += (d3 >>> 13); d3 &= 0x1fff;\n\n d4 = c;\n d4 += h0 * r4;\n d4 += h1 * r3;\n d4 += h2 * r2;\n d4 += h3 * r1;\n d4 += h4 * r0;\n c = (d4 >>> 13); d4 &= 0x1fff;\n d4 += h5 * (5 * r9);\n d4 += h6 * (5 * r8);\n d4 += h7 * (5 * r7);\n d4 += h8 * (5 * r6);\n d4 += h9 * (5 * r5);\n c += (d4 >>> 13); d4 &= 0x1fff;\n\n d5 = c;\n d5 += h0 * r5;\n d5 += h1 * r4;\n d5 += h2 * r3;\n d5 += h3 * r2;\n d5 += h4 * r1;\n c = (d5 >>> 13); d5 &= 0x1fff;\n d5 += h5 * r0;\n d5 += h6 * (5 * r9);\n d5 += h7 * (5 * r8);\n d5 += h8 * (5 * r7);\n d5 += h9 * (5 * r6);\n c += (d5 >>> 13); d5 &= 0x1fff;\n\n d6 = c;\n d6 += h0 * r6;\n d6 += h1 * r5;\n d6 += h2 * r4;\n d6 += h3 * r3;\n d6 += h4 * r2;\n c = (d6 >>> 13); d6 &= 0x1fff;\n d6 += h5 * r1;\n d6 += h6 * r0;\n d6 += h7 * (5 * r9);\n d6 += h8 * (5 * r8);\n d6 += h9 * (5 * r7);\n c += (d6 >>> 13); d6 &= 0x1fff;\n\n d7 = c;\n d7 += h0 * r7;\n d7 += h1 * r6;\n d7 += h2 * r5;\n d7 += h3 * r4;\n d7 += h4 * r3;\n c = (d7 >>> 13); d7 &= 0x1fff;\n d7 += h5 * r2;\n d7 += h6 * r1;\n d7 += h7 * r0;\n d7 += h8 * (5 * r9);\n d7 += h9 * (5 * r8);\n c += (d7 >>> 13); d7 &= 0x1fff;\n\n d8 = c;\n d8 += h0 * r8;\n d8 += h1 * r7;\n d8 += h2 * r6;\n d8 += h3 * r5;\n d8 += h4 * r4;\n c = (d8 >>> 13); d8 &= 0x1fff;\n d8 += h5 * r3;\n d8 += h6 * r2;\n d8 += h7 * r1;\n d8 += h8 * r0;\n d8 += h9 * (5 * r9);\n c += (d8 >>> 13); d8 &= 0x1fff;\n\n d9 = c;\n d9 += h0 * r9;\n d9 += h1 * r8;\n d9 += h2 * r7;\n d9 += h3 * r6;\n d9 += h4 * r5;\n c = (d9 >>> 13); d9 &= 0x1fff;\n d9 += h5 * r4;\n d9 += h6 * r3;\n d9 += h7 * r2;\n d9 += h8 * r1;\n d9 += h9 * r0;\n c += (d9 >>> 13); d9 &= 0x1fff;\n\n c = (((c << 2) + c)) | 0;\n c = (c + d0) | 0;\n d0 = c & 0x1fff;\n c = (c >>> 13);\n d1 += c;\n\n h0 = d0;\n h1 = d1;\n h2 = d2;\n h3 = d3;\n h4 = d4;\n h5 = d5;\n h6 = d6;\n h7 = d7;\n h8 = d8;\n h9 = d9;\n\n mpos += 16;\n bytes -= 16;\n }\n this.h[0] = h0;\n this.h[1] = h1;\n this.h[2] = h2;\n this.h[3] = h3;\n this.h[4] = h4;\n this.h[5] = h5;\n this.h[6] = h6;\n this.h[7] = h7;\n this.h[8] = h8;\n this.h[9] = h9;\n};\n\npoly1305.prototype.finish = function(mac, macpos) {\n var g = new Uint16Array(10);\n var c, mask, f, i;\n\n if (this.leftover) {\n i = this.leftover;\n this.buffer[i++] = 1;\n for (; i < 16; i++) this.buffer[i] = 0;\n this.fin = 1;\n this.blocks(this.buffer, 0, 16);\n }\n\n c = this.h[1] >>> 13;\n this.h[1] &= 0x1fff;\n for (i = 2; i < 10; i++) {\n this.h[i] += c;\n c = this.h[i] >>> 13;\n this.h[i] &= 0x1fff;\n }\n this.h[0] += (c * 5);\n c = this.h[0] >>> 13;\n this.h[0] &= 0x1fff;\n this.h[1] += c;\n c = this.h[1] >>> 13;\n this.h[1] &= 0x1fff;\n this.h[2] += c;\n\n g[0] = this.h[0] + 5;\n c = g[0] >>> 13;\n g[0] &= 0x1fff;\n for (i = 1; i < 10; i++) {\n g[i] = this.h[i] + c;\n c = g[i] >>> 13;\n g[i] &= 0x1fff;\n }\n g[9] -= (1 << 13);\n\n mask = (c ^ 1) - 1;\n for (i = 0; i < 10; i++) g[i] &= mask;\n mask = ~mask;\n for (i = 0; i < 10; i++) this.h[i] = (this.h[i] & mask) | g[i];\n\n this.h[0] = ((this.h[0] ) | (this.h[1] << 13) ) & 0xffff;\n this.h[1] = ((this.h[1] >>> 3) | (this.h[2] << 10) ) & 0xffff;\n this.h[2] = ((this.h[2] >>> 6) | (this.h[3] << 7) ) & 0xffff;\n this.h[3] = ((this.h[3] >>> 9) | (this.h[4] << 4) ) & 0xffff;\n this.h[4] = ((this.h[4] >>> 12) | (this.h[5] << 1) | (this.h[6] << 14)) & 0xffff;\n this.h[5] = ((this.h[6] >>> 2) | (this.h[7] << 11) ) & 0xffff;\n this.h[6] = ((this.h[7] >>> 5) | (this.h[8] << 8) ) & 0xffff;\n this.h[7] = ((this.h[8] >>> 8) | (this.h[9] << 5) ) & 0xffff;\n\n f = this.h[0] + this.pad[0];\n this.h[0] = f & 0xffff;\n for (i = 1; i < 8; i++) {\n f = (((this.h[i] + this.pad[i]) | 0) + (f >>> 16)) | 0;\n this.h[i] = f & 0xffff;\n }\n\n mac[macpos+ 0] = (this.h[0] >>> 0) & 0xff;\n mac[macpos+ 1] = (this.h[0] >>> 8) & 0xff;\n mac[macpos+ 2] = (this.h[1] >>> 0) & 0xff;\n mac[macpos+ 3] = (this.h[1] >>> 8) & 0xff;\n mac[macpos+ 4] = (this.h[2] >>> 0) & 0xff;\n mac[macpos+ 5] = (this.h[2] >>> 8) & 0xff;\n mac[macpos+ 6] = (this.h[3] >>> 0) & 0xff;\n mac[macpos+ 7] = (this.h[3] >>> 8) & 0xff;\n mac[macpos+ 8] = (this.h[4] >>> 0) & 0xff;\n mac[macpos+ 9] = (this.h[4] >>> 8) & 0xff;\n mac[macpos+10] = (this.h[5] >>> 0) & 0xff;\n mac[macpos+11] = (this.h[5] >>> 8) & 0xff;\n mac[macpos+12] = (this.h[6] >>> 0) & 0xff;\n mac[macpos+13] = (this.h[6] >>> 8) & 0xff;\n mac[macpos+14] = (this.h[7] >>> 0) & 0xff;\n mac[macpos+15] = (this.h[7] >>> 8) & 0xff;\n};\n\npoly1305.prototype.update = function(m, mpos, bytes) {\n var i, want;\n\n if (this.leftover) {\n want = (16 - this.leftover);\n if (want > bytes)\n want = bytes;\n for (i = 0; i < want; i++)\n this.buffer[this.leftover + i] = m[mpos+i];\n bytes -= want;\n mpos += want;\n this.leftover += want;\n if (this.leftover < 16)\n return;\n this.blocks(this.buffer, 0, 16);\n this.leftover = 0;\n }\n\n if (bytes >= 16) {\n want = bytes - (bytes % 16);\n this.blocks(m, mpos, want);\n mpos += want;\n bytes -= want;\n }\n\n if (bytes) {\n for (i = 0; i < bytes; i++)\n this.buffer[this.leftover + i] = m[mpos+i];\n this.leftover += bytes;\n }\n};\n\nfunction crypto_onetimeauth(out, outpos, m, mpos, n, k) {\n var s = new poly1305(k);\n s.update(m, mpos, n);\n s.finish(out, outpos);\n return 0;\n}\n\nfunction crypto_onetimeauth_verify(h, hpos, m, mpos, n, k) {\n var x = new Uint8Array(16);\n crypto_onetimeauth(x,0,m,mpos,n,k);\n return crypto_verify_16(h,hpos,x,0);\n}\n\nfunction crypto_secretbox(c,m,d,n,k) {\n var i;\n if (d < 32) return -1;\n crypto_stream_xor(c,0,m,0,d,n,k);\n crypto_onetimeauth(c, 16, c, 32, d - 32, c);\n for (i = 0; i < 16; i++) c[i] = 0;\n return 0;\n}\n\nfunction crypto_secretbox_open(m,c,d,n,k) {\n var i;\n var x = new Uint8Array(32);\n if (d < 32) return -1;\n crypto_stream(x,0,32,n,k);\n if (crypto_onetimeauth_verify(c, 16,c, 32,d - 32,x) !== 0) return -1;\n crypto_stream_xor(m,0,c,0,d,n,k);\n for (i = 0; i < 32; i++) m[i] = 0;\n return 0;\n}\n\nfunction set25519(r, a) {\n var i;\n for (i = 0; i < 16; i++) r[i] = a[i]|0;\n}\n\nfunction car25519(o) {\n var i, v, c = 1;\n for (i = 0; i < 16; i++) {\n v = o[i] + c + 65535;\n c = Math.floor(v / 65536);\n o[i] = v - c * 65536;\n }\n o[0] += c-1 + 37 * (c-1);\n}\n\nfunction sel25519(p, q, b) {\n var t, c = ~(b-1);\n for (var i = 0; i < 16; i++) {\n t = c & (p[i] ^ q[i]);\n p[i] ^= t;\n q[i] ^= t;\n }\n}\n\nfunction pack25519(o, n) {\n var i, j, b;\n var m = gf(), t = gf();\n for (i = 0; i < 16; i++) t[i] = n[i];\n car25519(t);\n car25519(t);\n car25519(t);\n for (j = 0; j < 2; j++) {\n m[0] = t[0] - 0xffed;\n for (i = 1; i < 15; i++) {\n m[i] = t[i] - 0xffff - ((m[i-1]>>16) & 1);\n m[i-1] &= 0xffff;\n }\n m[15] = t[15] - 0x7fff - ((m[14]>>16) & 1);\n b = (m[15]>>16) & 1;\n m[14] &= 0xffff;\n sel25519(t, m, 1-b);\n }\n for (i = 0; i < 16; i++) {\n o[2*i] = t[i] & 0xff;\n o[2*i+1] = t[i]>>8;\n }\n}\n\nfunction neq25519(a, b) {\n var c = new Uint8Array(32), d = new Uint8Array(32);\n pack25519(c, a);\n pack25519(d, b);\n return crypto_verify_32(c, 0, d, 0);\n}\n\nfunction par25519(a) {\n var d = new Uint8Array(32);\n pack25519(d, a);\n return d[0] & 1;\n}\n\nfunction unpack25519(o, n) {\n var i;\n for (i = 0; i < 16; i++) o[i] = n[2*i] + (n[2*i+1] << 8);\n o[15] &= 0x7fff;\n}\n\nfunction A(o, a, b) {\n for (var i = 0; i < 16; i++) o[i] = a[i] + b[i];\n}\n\nfunction Z(o, a, b) {\n for (var i = 0; i < 16; i++) o[i] = a[i] - b[i];\n}\n\nfunction M(o, a, b) {\n var v, c,\n t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0,\n t8 = 0, t9 = 0, t10 = 0, t11 = 0, t12 = 0, t13 = 0, t14 = 0, t15 = 0,\n t16 = 0, t17 = 0, t18 = 0, t19 = 0, t20 = 0, t21 = 0, t22 = 0, t23 = 0,\n t24 = 0, t25 = 0, t26 = 0, t27 = 0, t28 = 0, t29 = 0, t30 = 0,\n b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3],\n b4 = b[4],\n b5 = b[5],\n b6 = b[6],\n b7 = b[7],\n b8 = b[8],\n b9 = b[9],\n b10 = b[10],\n b11 = b[11],\n b12 = b[12],\n b13 = b[13],\n b14 = b[14],\n b15 = b[15];\n\n v = a[0];\n t0 += v * b0;\n t1 += v * b1;\n t2 += v * b2;\n t3 += v * b3;\n t4 += v * b4;\n t5 += v * b5;\n t6 += v * b6;\n t7 += v * b7;\n t8 += v * b8;\n t9 += v * b9;\n t10 += v * b10;\n t11 += v * b11;\n t12 += v * b12;\n t13 += v * b13;\n t14 += v * b14;\n t15 += v * b15;\n v = a[1];\n t1 += v * b0;\n t2 += v * b1;\n t3 += v * b2;\n t4 += v * b3;\n t5 += v * b4;\n t6 += v * b5;\n t7 += v * b6;\n t8 += v * b7;\n t9 += v * b8;\n t10 += v * b9;\n t11 += v * b10;\n t12 += v * b11;\n t13 += v * b12;\n t14 += v * b13;\n t15 += v * b14;\n t16 += v * b15;\n v = a[2];\n t2 += v * b0;\n t3 += v * b1;\n t4 += v * b2;\n t5 += v * b3;\n t6 += v * b4;\n t7 += v * b5;\n t8 += v * b6;\n t9 += v * b7;\n t10 += v * b8;\n t11 += v * b9;\n t12 += v * b10;\n t13 += v * b11;\n t14 += v * b12;\n t15 += v * b13;\n t16 += v * b14;\n t17 += v * b15;\n v = a[3];\n t3 += v * b0;\n t4 += v * b1;\n t5 += v * b2;\n t6 += v * b3;\n t7 += v * b4;\n t8 += v * b5;\n t9 += v * b6;\n t10 += v * b7;\n t11 += v * b8;\n t12 += v * b9;\n t13 += v * b10;\n t14 += v * b11;\n t15 += v * b12;\n t16 += v * b13;\n t17 += v * b14;\n t18 += v * b15;\n v = a[4];\n t4 += v * b0;\n t5 += v * b1;\n t6 += v * b2;\n t7 += v * b3;\n t8 += v * b4;\n t9 += v * b5;\n t10 += v * b6;\n t11 += v * b7;\n t12 += v * b8;\n t13 += v * b9;\n t14 += v * b10;\n t15 += v * b11;\n t16 += v * b12;\n t17 += v * b13;\n t18 += v * b14;\n t19 += v * b15;\n v = a[5];\n t5 += v * b0;\n t6 += v * b1;\n t7 += v * b2;\n t8 += v * b3;\n t9 += v * b4;\n t10 += v * b5;\n t11 += v * b6;\n t12 += v * b7;\n t13 += v * b8;\n t14 += v * b9;\n t15 += v * b10;\n t16 += v * b11;\n t17 += v * b12;\n t18 += v * b13;\n t19 += v * b14;\n t20 += v * b15;\n v = a[6];\n t6 += v * b0;\n t7 += v * b1;\n t8 += v * b2;\n t9 += v * b3;\n t10 += v * b4;\n t11 += v * b5;\n t12 += v * b6;\n t13 += v * b7;\n t14 += v * b8;\n t15 += v * b9;\n t16 += v * b10;\n t17 += v * b11;\n t18 += v * b12;\n t19 += v * b13;\n t20 += v * b14;\n t21 += v * b15;\n v = a[7];\n t7 += v * b0;\n t8 += v * b1;\n t9 += v * b2;\n t10 += v * b3;\n t11 += v * b4;\n t12 += v * b5;\n t13 += v * b6;\n t14 += v * b7;\n t15 += v * b8;\n t16 += v * b9;\n t17 += v * b10;\n t18 += v * b11;\n t19 += v * b12;\n t20 += v * b13;\n t21 += v * b14;\n t22 += v * b15;\n v = a[8];\n t8 += v * b0;\n t9 += v * b1;\n t10 += v * b2;\n t11 += v * b3;\n t12 += v * b4;\n t13 += v * b5;\n t14 += v * b6;\n t15 += v * b7;\n t16 += v * b8;\n t17 += v * b9;\n t18 += v * b10;\n t19 += v * b11;\n t20 += v * b12;\n t21 += v * b13;\n t22 += v * b14;\n t23 += v * b15;\n v = a[9];\n t9 += v * b0;\n t10 += v * b1;\n t11 += v * b2;\n t12 += v * b3;\n t13 += v * b4;\n t14 += v * b5;\n t15 += v * b6;\n t16 += v * b7;\n t17 += v * b8;\n t18 += v * b9;\n t19 += v * b10;\n t20 += v * b11;\n t21 += v * b12;\n t22 += v * b13;\n t23 += v * b14;\n t24 += v * b15;\n v = a[10];\n t10 += v * b0;\n t11 += v * b1;\n t12 += v * b2;\n t13 += v * b3;\n t14 += v * b4;\n t15 += v * b5;\n t16 += v * b6;\n t17 += v * b7;\n t18 += v * b8;\n t19 += v * b9;\n t20 += v * b10;\n t21 += v * b11;\n t22 += v * b12;\n t23 += v * b13;\n t24 += v * b14;\n t25 += v * b15;\n v = a[11];\n t11 += v * b0;\n t12 += v * b1;\n t13 += v * b2;\n t14 += v * b3;\n t15 += v * b4;\n t16 += v * b5;\n t17 += v * b6;\n t18 += v * b7;\n t19 += v * b8;\n t20 += v * b9;\n t21 += v * b10;\n t22 += v * b11;\n t23 += v * b12;\n t24 += v * b13;\n t25 += v * b14;\n t26 += v * b15;\n v = a[12];\n t12 += v * b0;\n t13 += v * b1;\n t14 += v * b2;\n t15 += v * b3;\n t16 += v * b4;\n t17 += v * b5;\n t18 += v * b6;\n t19 += v * b7;\n t20 += v * b8;\n t21 += v * b9;\n t22 += v * b10;\n t23 += v * b11;\n t24 += v * b12;\n t25 += v * b13;\n t26 += v * b14;\n t27 += v * b15;\n v = a[13];\n t13 += v * b0;\n t14 += v * b1;\n t15 += v * b2;\n t16 += v * b3;\n t17 += v * b4;\n t18 += v * b5;\n t19 += v * b6;\n t20 += v * b7;\n t21 += v * b8;\n t22 += v * b9;\n t23 += v * b10;\n t24 += v * b11;\n t25 += v * b12;\n t26 += v * b13;\n t27 += v * b14;\n t28 += v * b15;\n v = a[14];\n t14 += v * b0;\n t15 += v * b1;\n t16 += v * b2;\n t17 += v * b3;\n t18 += v * b4;\n t19 += v * b5;\n t20 += v * b6;\n t21 += v * b7;\n t22 += v * b8;\n t23 += v * b9;\n t24 += v * b10;\n t25 += v * b11;\n t26 += v * b12;\n t27 += v * b13;\n t28 += v * b14;\n t29 += v * b15;\n v = a[15];\n t15 += v * b0;\n t16 += v * b1;\n t17 += v * b2;\n t18 += v * b3;\n t19 += v * b4;\n t20 += v * b5;\n t21 += v * b6;\n t22 += v * b7;\n t23 += v * b8;\n t24 += v * b9;\n t25 += v * b10;\n t26 += v * b11;\n t27 += v * b12;\n t28 += v * b13;\n t29 += v * b14;\n t30 += v * b15;\n\n t0 += 38 * t16;\n t1 += 38 * t17;\n t2 += 38 * t18;\n t3 += 38 * t19;\n t4 += 38 * t20;\n t5 += 38 * t21;\n t6 += 38 * t22;\n t7 += 38 * t23;\n t8 += 38 * t24;\n t9 += 38 * t25;\n t10 += 38 * t26;\n t11 += 38 * t27;\n t12 += 38 * t28;\n t13 += 38 * t29;\n t14 += 38 * t30;\n // t15 left as is\n\n // first car\n c = 1;\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n t0 += c-1 + 37 * (c-1);\n\n // second car\n c = 1;\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n t0 += c-1 + 37 * (c-1);\n\n o[ 0] = t0;\n o[ 1] = t1;\n o[ 2] = t2;\n o[ 3] = t3;\n o[ 4] = t4;\n o[ 5] = t5;\n o[ 6] = t6;\n o[ 7] = t7;\n o[ 8] = t8;\n o[ 9] = t9;\n o[10] = t10;\n o[11] = t11;\n o[12] = t12;\n o[13] = t13;\n o[14] = t14;\n o[15] = t15;\n}\n\nfunction S(o, a) {\n M(o, a, a);\n}\n\nfunction inv25519(o, i) {\n var c = gf();\n var a;\n for (a = 0; a < 16; a++) c[a] = i[a];\n for (a = 253; a >= 0; a--) {\n S(c, c);\n if(a !== 2 && a !== 4) M(c, c, i);\n }\n for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction pow2523(o, i) {\n var c = gf();\n var a;\n for (a = 0; a < 16; a++) c[a] = i[a];\n for (a = 250; a >= 0; a--) {\n S(c, c);\n if(a !== 1) M(c, c, i);\n }\n for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction crypto_scalarmult(q, n, p) {\n var z = new Uint8Array(32);\n var x = new Float64Array(80), r, i;\n var a = gf(), b = gf(), c = gf(),\n d = gf(), e = gf(), f = gf();\n for (i = 0; i < 31; i++) z[i] = n[i];\n z[31]=(n[31]&127)|64;\n z[0]&=248;\n unpack25519(x,p);\n for (i = 0; i < 16; i++) {\n b[i]=x[i];\n d[i]=a[i]=c[i]=0;\n }\n a[0]=d[0]=1;\n for (i=254; i>=0; --i) {\n r=(z[i>>>3]>>>(i&7))&1;\n sel25519(a,b,r);\n sel25519(c,d,r);\n A(e,a,c);\n Z(a,a,c);\n A(c,b,d);\n Z(b,b,d);\n S(d,e);\n S(f,a);\n M(a,c,a);\n M(c,b,e);\n A(e,a,c);\n Z(a,a,c);\n S(b,a);\n Z(c,d,f);\n M(a,c,_121665);\n A(a,a,d);\n M(c,c,a);\n M(a,d,f);\n M(d,b,x);\n S(b,e);\n sel25519(a,b,r);\n sel25519(c,d,r);\n }\n for (i = 0; i < 16; i++) {\n x[i+16]=a[i];\n x[i+32]=c[i];\n x[i+48]=b[i];\n x[i+64]=d[i];\n }\n var x32 = x.subarray(32);\n var x16 = x.subarray(16);\n inv25519(x32,x32);\n M(x16,x16,x32);\n pack25519(q,x16);\n return 0;\n}\n\nfunction crypto_scalarmult_base(q, n) {\n return crypto_scalarmult(q, n, _9);\n}\n\nfunction crypto_box_keypair(y, x) {\n randombytes(x, 32);\n return crypto_scalarmult_base(y, x);\n}\n\nfunction crypto_box_beforenm(k, y, x) {\n var s = new Uint8Array(32);\n crypto_scalarmult(s, x, y);\n return crypto_core_hsalsa20(k, _0, s, sigma);\n}\n\nvar crypto_box_afternm = crypto_secretbox;\nvar crypto_box_open_afternm = crypto_secretbox_open;\n\nfunction crypto_box(c, m, d, n, y, x) {\n var k = new Uint8Array(32);\n crypto_box_beforenm(k, y, x);\n return crypto_box_afternm(c, m, d, n, k);\n}\n\nfunction crypto_box_open(m, c, d, n, y, x) {\n var k = new Uint8Array(32);\n crypto_box_beforenm(k, y, x);\n return crypto_box_open_afternm(m, c, d, n, k);\n}\n\nvar K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction crypto_hashblocks_hl(hh, hl, m, n) {\n var wh = new Int32Array(16), wl = new Int32Array(16),\n bh0, bh1, bh2, bh3, bh4, bh5, bh6, bh7,\n bl0, bl1, bl2, bl3, bl4, bl5, bl6, bl7,\n th, tl, i, j, h, l, a, b, c, d;\n\n var ah0 = hh[0],\n ah1 = hh[1],\n ah2 = hh[2],\n ah3 = hh[3],\n ah4 = hh[4],\n ah5 = hh[5],\n ah6 = hh[6],\n ah7 = hh[7],\n\n al0 = hl[0],\n al1 = hl[1],\n al2 = hl[2],\n al3 = hl[3],\n al4 = hl[4],\n al5 = hl[5],\n al6 = hl[6],\n al7 = hl[7];\n\n var pos = 0;\n while (n >= 128) {\n for (i = 0; i < 16; i++) {\n j = 8 * i + pos;\n wh[i] = (m[j+0] << 24) | (m[j+1] << 16) | (m[j+2] << 8) | m[j+3];\n wl[i] = (m[j+4] << 24) | (m[j+5] << 16) | (m[j+6] << 8) | m[j+7];\n }\n for (i = 0; i < 80; i++) {\n bh0 = ah0;\n bh1 = ah1;\n bh2 = ah2;\n bh3 = ah3;\n bh4 = ah4;\n bh5 = ah5;\n bh6 = ah6;\n bh7 = ah7;\n\n bl0 = al0;\n bl1 = al1;\n bl2 = al2;\n bl3 = al3;\n bl4 = al4;\n bl5 = al5;\n bl6 = al6;\n bl7 = al7;\n\n // add\n h = ah7;\n l = al7;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n // Sigma1\n h = ((ah4 >>> 14) | (al4 << (32-14))) ^ ((ah4 >>> 18) | (al4 << (32-18))) ^ ((al4 >>> (41-32)) | (ah4 << (32-(41-32))));\n l = ((al4 >>> 14) | (ah4 << (32-14))) ^ ((al4 >>> 18) | (ah4 << (32-18))) ^ ((ah4 >>> (41-32)) | (al4 << (32-(41-32))));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // Ch\n h = (ah4 & ah5) ^ (~ah4 & ah6);\n l = (al4 & al5) ^ (~al4 & al6);\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // K\n h = K[i*2];\n l = K[i*2+1];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // w\n h = wh[i%16];\n l = wl[i%16];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n th = c & 0xffff | d << 16;\n tl = a & 0xffff | b << 16;\n\n // add\n h = th;\n l = tl;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n // Sigma0\n h = ((ah0 >>> 28) | (al0 << (32-28))) ^ ((al0 >>> (34-32)) | (ah0 << (32-(34-32)))) ^ ((al0 >>> (39-32)) | (ah0 << (32-(39-32))));\n l = ((al0 >>> 28) | (ah0 << (32-28))) ^ ((ah0 >>> (34-32)) | (al0 << (32-(34-32)))) ^ ((ah0 >>> (39-32)) | (al0 << (32-(39-32))));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // Maj\n h = (ah0 & ah1) ^ (ah0 & ah2) ^ (ah1 & ah2);\n l = (al0 & al1) ^ (al0 & al2) ^ (al1 & al2);\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n bh7 = (c & 0xffff) | (d << 16);\n bl7 = (a & 0xffff) | (b << 16);\n\n // add\n h = bh3;\n l = bl3;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = th;\n l = tl;\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n bh3 = (c & 0xffff) | (d << 16);\n bl3 = (a & 0xffff) | (b << 16);\n\n ah1 = bh0;\n ah2 = bh1;\n ah3 = bh2;\n ah4 = bh3;\n ah5 = bh4;\n ah6 = bh5;\n ah7 = bh6;\n ah0 = bh7;\n\n al1 = bl0;\n al2 = bl1;\n al3 = bl2;\n al4 = bl3;\n al5 = bl4;\n al6 = bl5;\n al7 = bl6;\n al0 = bl7;\n\n if (i%16 === 15) {\n for (j = 0; j < 16; j++) {\n // add\n h = wh[j];\n l = wl[j];\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = wh[(j+9)%16];\n l = wl[(j+9)%16];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // sigma0\n th = wh[(j+1)%16];\n tl = wl[(j+1)%16];\n h = ((th >>> 1) | (tl << (32-1))) ^ ((th >>> 8) | (tl << (32-8))) ^ (th >>> 7);\n l = ((tl >>> 1) | (th << (32-1))) ^ ((tl >>> 8) | (th << (32-8))) ^ ((tl >>> 7) | (th << (32-7)));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // sigma1\n th = wh[(j+14)%16];\n tl = wl[(j+14)%16];\n h = ((th >>> 19) | (tl << (32-19))) ^ ((tl >>> (61-32)) | (th << (32-(61-32)))) ^ (th >>> 6);\n l = ((tl >>> 19) | (th << (32-19))) ^ ((th >>> (61-32)) | (tl << (32-(61-32)))) ^ ((tl >>> 6) | (th << (32-6)));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n wh[j] = (c & 0xffff) | (d << 16);\n wl[j] = (a & 0xffff) | (b << 16);\n }\n }\n }\n\n // add\n h = ah0;\n l = al0;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[0];\n l = hl[0];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[0] = ah0 = (c & 0xffff) | (d << 16);\n hl[0] = al0 = (a & 0xffff) | (b << 16);\n\n h = ah1;\n l = al1;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[1];\n l = hl[1];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[1] = ah1 = (c & 0xffff) | (d << 16);\n hl[1] = al1 = (a & 0xffff) | (b << 16);\n\n h = ah2;\n l = al2;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[2];\n l = hl[2];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[2] = ah2 = (c & 0xffff) | (d << 16);\n hl[2] = al2 = (a & 0xffff) | (b << 16);\n\n h = ah3;\n l = al3;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[3];\n l = hl[3];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[3] = ah3 = (c & 0xffff) | (d << 16);\n hl[3] = al3 = (a & 0xffff) | (b << 16);\n\n h = ah4;\n l = al4;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[4];\n l = hl[4];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[4] = ah4 = (c & 0xffff) | (d << 16);\n hl[4] = al4 = (a & 0xffff) | (b << 16);\n\n h = ah5;\n l = al5;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[5];\n l = hl[5];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[5] = ah5 = (c & 0xffff) | (d << 16);\n hl[5] = al5 = (a & 0xffff) | (b << 16);\n\n h = ah6;\n l = al6;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[6];\n l = hl[6];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[6] = ah6 = (c & 0xffff) | (d << 16);\n hl[6] = al6 = (a & 0xffff) | (b << 16);\n\n h = ah7;\n l = al7;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[7];\n l = hl[7];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[7] = ah7 = (c & 0xffff) | (d << 16);\n hl[7] = al7 = (a & 0xffff) | (b << 16);\n\n pos += 128;\n n -= 128;\n }\n\n return n;\n}\n\nfunction crypto_hash(out, m, n) {\n var hh = new Int32Array(8),\n hl = new Int32Array(8),\n x = new Uint8Array(256),\n i, b = n;\n\n hh[0] = 0x6a09e667;\n hh[1] = 0xbb67ae85;\n hh[2] = 0x3c6ef372;\n hh[3] = 0xa54ff53a;\n hh[4] = 0x510e527f;\n hh[5] = 0x9b05688c;\n hh[6] = 0x1f83d9ab;\n hh[7] = 0x5be0cd19;\n\n hl[0] = 0xf3bcc908;\n hl[1] = 0x84caa73b;\n hl[2] = 0xfe94f82b;\n hl[3] = 0x5f1d36f1;\n hl[4] = 0xade682d1;\n hl[5] = 0x2b3e6c1f;\n hl[6] = 0xfb41bd6b;\n hl[7] = 0x137e2179;\n\n crypto_hashblocks_hl(hh, hl, m, n);\n n %= 128;\n\n for (i = 0; i < n; i++) x[i] = m[b-n+i];\n x[n] = 128;\n\n n = 256-128*(n<112?1:0);\n x[n-9] = 0;\n ts64(x, n-8, (b / 0x20000000) | 0, b << 3);\n crypto_hashblocks_hl(hh, hl, x, n);\n\n for (i = 0; i < 8; i++) ts64(out, 8*i, hh[i], hl[i]);\n\n return 0;\n}\n\nfunction add(p, q) {\n var a = gf(), b = gf(), c = gf(),\n d = gf(), e = gf(), f = gf(),\n g = gf(), h = gf(), t = gf();\n\n Z(a, p[1], p[0]);\n Z(t, q[1], q[0]);\n M(a, a, t);\n A(b, p[0], p[1]);\n A(t, q[0], q[1]);\n M(b, b, t);\n M(c, p[3], q[3]);\n M(c, c, D2);\n M(d, p[2], q[2]);\n A(d, d, d);\n Z(e, b, a);\n Z(f, d, c);\n A(g, d, c);\n A(h, b, a);\n\n M(p[0], e, f);\n M(p[1], h, g);\n M(p[2], g, f);\n M(p[3], e, h);\n}\n\nfunction cswap(p, q, b) {\n var i;\n for (i = 0; i < 4; i++) {\n sel25519(p[i], q[i], b);\n }\n}\n\nfunction pack(r, p) {\n var tx = gf(), ty = gf(), zi = gf();\n inv25519(zi, p[2]);\n M(tx, p[0], zi);\n M(ty, p[1], zi);\n pack25519(r, ty);\n r[31] ^= par25519(tx) << 7;\n}\n\nfunction scalarmult(p, q, s) {\n var b, i;\n set25519(p[0], gf0);\n set25519(p[1], gf1);\n set25519(p[2], gf1);\n set25519(p[3], gf0);\n for (i = 255; i >= 0; --i) {\n b = (s[(i/8)|0] >> (i&7)) & 1;\n cswap(p, q, b);\n add(q, p);\n add(p, p);\n cswap(p, q, b);\n }\n}\n\nfunction scalarbase(p, s) {\n var q = [gf(), gf(), gf(), gf()];\n set25519(q[0], X);\n set25519(q[1], Y);\n set25519(q[2], gf1);\n M(q[3], X, Y);\n scalarmult(p, q, s);\n}\n\nfunction crypto_sign_keypair(pk, sk, seeded) {\n var d = new Uint8Array(64);\n var p = [gf(), gf(), gf(), gf()];\n var i;\n\n if (!seeded) randombytes(sk, 32);\n crypto_hash(d, sk, 32);\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n\n scalarbase(p, d);\n pack(pk, p);\n\n for (i = 0; i < 32; i++) sk[i+32] = pk[i];\n return 0;\n}\n\nvar L = new Float64Array([0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10]);\n\nfunction modL(r, x) {\n var carry, i, j, k;\n for (i = 63; i >= 32; --i) {\n carry = 0;\n for (j = i - 32, k = i - 12; j < k; ++j) {\n x[j] += carry - 16 * x[i] * L[j - (i - 32)];\n carry = Math.floor((x[j] + 128) / 256);\n x[j] -= carry * 256;\n }\n x[j] += carry;\n x[i] = 0;\n }\n carry = 0;\n for (j = 0; j < 32; j++) {\n x[j] += carry - (x[31] >> 4) * L[j];\n carry = x[j] >> 8;\n x[j] &= 255;\n }\n for (j = 0; j < 32; j++) x[j] -= carry * L[j];\n for (i = 0; i < 32; i++) {\n x[i+1] += x[i] >> 8;\n r[i] = x[i] & 255;\n }\n}\n\nfunction reduce(r) {\n var x = new Float64Array(64), i;\n for (i = 0; i < 64; i++) x[i] = r[i];\n for (i = 0; i < 64; i++) r[i] = 0;\n modL(r, x);\n}\n\n// Note: difference from C - smlen returned, not passed as argument.\nfunction crypto_sign(sm, m, n, sk) {\n var d = new Uint8Array(64), h = new Uint8Array(64), r = new Uint8Array(64);\n var i, j, x = new Float64Array(64);\n var p = [gf(), gf(), gf(), gf()];\n\n crypto_hash(d, sk, 32);\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n\n var smlen = n + 64;\n for (i = 0; i < n; i++) sm[64 + i] = m[i];\n for (i = 0; i < 32; i++) sm[32 + i] = d[32 + i];\n\n crypto_hash(r, sm.subarray(32), n+32);\n reduce(r);\n scalarbase(p, r);\n pack(sm, p);\n\n for (i = 32; i < 64; i++) sm[i] = sk[i];\n crypto_hash(h, sm, n + 64);\n reduce(h);\n\n for (i = 0; i < 64; i++) x[i] = 0;\n for (i = 0; i < 32; i++) x[i] = r[i];\n for (i = 0; i < 32; i++) {\n for (j = 0; j < 32; j++) {\n x[i+j] += h[i] * d[j];\n }\n }\n\n modL(sm.subarray(32), x);\n return smlen;\n}\n\nfunction unpackneg(r, p) {\n var t = gf(), chk = gf(), num = gf(),\n den = gf(), den2 = gf(), den4 = gf(),\n den6 = gf();\n\n set25519(r[2], gf1);\n unpack25519(r[1], p);\n S(num, r[1]);\n M(den, num, D);\n Z(num, num, r[2]);\n A(den, r[2], den);\n\n S(den2, den);\n S(den4, den2);\n M(den6, den4, den2);\n M(t, den6, num);\n M(t, t, den);\n\n pow2523(t, t);\n M(t, t, num);\n M(t, t, den);\n M(t, t, den);\n M(r[0], t, den);\n\n S(chk, r[0]);\n M(chk, chk, den);\n if (neq25519(chk, num)) M(r[0], r[0], I);\n\n S(chk, r[0]);\n M(chk, chk, den);\n if (neq25519(chk, num)) return -1;\n\n if (par25519(r[0]) === (p[31]>>7)) Z(r[0], gf0, r[0]);\n\n M(r[3], r[0], r[1]);\n return 0;\n}\n\nfunction crypto_sign_open(m, sm, n, pk) {\n var i;\n var t = new Uint8Array(32), h = new Uint8Array(64);\n var p = [gf(), gf(), gf(), gf()],\n q = [gf(), gf(), gf(), gf()];\n\n if (n < 64) return -1;\n\n if (unpackneg(q, pk)) return -1;\n\n for (i = 0; i < n; i++) m[i] = sm[i];\n for (i = 0; i < 32; i++) m[i+32] = pk[i];\n crypto_hash(h, m, n);\n reduce(h);\n scalarmult(p, q, h);\n\n scalarbase(q, sm.subarray(32));\n add(p, q);\n pack(t, p);\n\n n -= 64;\n if (crypto_verify_32(sm, 0, t, 0)) {\n for (i = 0; i < n; i++) m[i] = 0;\n return -1;\n }\n\n for (i = 0; i < n; i++) m[i] = sm[i + 64];\n return n;\n}\n\nvar crypto_secretbox_KEYBYTES = 32,\n crypto_secretbox_NONCEBYTES = 24,\n crypto_secretbox_ZEROBYTES = 32,\n crypto_secretbox_BOXZEROBYTES = 16,\n crypto_scalarmult_BYTES = 32,\n crypto_scalarmult_SCALARBYTES = 32,\n crypto_box_PUBLICKEYBYTES = 32,\n crypto_box_SECRETKEYBYTES = 32,\n crypto_box_BEFORENMBYTES = 32,\n crypto_box_NONCEBYTES = crypto_secretbox_NONCEBYTES,\n crypto_box_ZEROBYTES = crypto_secretbox_ZEROBYTES,\n crypto_box_BOXZEROBYTES = crypto_secretbox_BOXZEROBYTES,\n crypto_sign_BYTES = 64,\n crypto_sign_PUBLICKEYBYTES = 32,\n crypto_sign_SECRETKEYBYTES = 64,\n crypto_sign_SEEDBYTES = 32,\n crypto_hash_BYTES = 64;\n\nnacl.lowlevel = {\n crypto_core_hsalsa20: crypto_core_hsalsa20,\n crypto_stream_xor: crypto_stream_xor,\n crypto_stream: crypto_stream,\n crypto_stream_salsa20_xor: crypto_stream_salsa20_xor,\n crypto_stream_salsa20: crypto_stream_salsa20,\n crypto_onetimeauth: crypto_onetimeauth,\n crypto_onetimeauth_verify: crypto_onetimeauth_verify,\n crypto_verify_16: crypto_verify_16,\n crypto_verify_32: crypto_verify_32,\n crypto_secretbox: crypto_secretbox,\n crypto_secretbox_open: crypto_secretbox_open,\n crypto_scalarmult: crypto_scalarmult,\n crypto_scalarmult_base: crypto_scalarmult_base,\n crypto_box_beforenm: crypto_box_beforenm,\n crypto_box_afternm: crypto_box_afternm,\n crypto_box: crypto_box,\n crypto_box_open: crypto_box_open,\n crypto_box_keypair: crypto_box_keypair,\n crypto_hash: crypto_hash,\n crypto_sign: crypto_sign,\n crypto_sign_keypair: crypto_sign_keypair,\n crypto_sign_open: crypto_sign_open,\n\n crypto_secretbox_KEYBYTES: crypto_secretbox_KEYBYTES,\n crypto_secretbox_NONCEBYTES: crypto_secretbox_NONCEBYTES,\n crypto_secretbox_ZEROBYTES: crypto_secretbox_ZEROBYTES,\n crypto_secretbox_BOXZEROBYTES: crypto_secretbox_BOXZEROBYTES,\n crypto_scalarmult_BYTES: crypto_scalarmult_BYTES,\n crypto_scalarmult_SCALARBYTES: crypto_scalarmult_SCALARBYTES,\n crypto_box_PUBLICKEYBYTES: crypto_box_PUBLICKEYBYTES,\n crypto_box_SECRETKEYBYTES: crypto_box_SECRETKEYBYTES,\n crypto_box_BEFORENMBYTES: crypto_box_BEFORENMBYTES,\n crypto_box_NONCEBYTES: crypto_box_NONCEBYTES,\n crypto_box_ZEROBYTES: crypto_box_ZEROBYTES,\n crypto_box_BOXZEROBYTES: crypto_box_BOXZEROBYTES,\n crypto_sign_BYTES: crypto_sign_BYTES,\n crypto_sign_PUBLICKEYBYTES: crypto_sign_PUBLICKEYBYTES,\n crypto_sign_SECRETKEYBYTES: crypto_sign_SECRETKEYBYTES,\n crypto_sign_SEEDBYTES: crypto_sign_SEEDBYTES,\n crypto_hash_BYTES: crypto_hash_BYTES,\n\n gf: gf,\n D: D,\n L: L,\n pack25519: pack25519,\n unpack25519: unpack25519,\n M: M,\n A: A,\n S: S,\n Z: Z,\n pow2523: pow2523,\n add: add,\n set25519: set25519,\n modL: modL,\n scalarmult: scalarmult,\n scalarbase: scalarbase,\n};\n\n/* High-level API */\n\nfunction checkLengths(k, n) {\n if (k.length !== crypto_secretbox_KEYBYTES) throw new Error('bad key size');\n if (n.length !== crypto_secretbox_NONCEBYTES) throw new Error('bad nonce size');\n}\n\nfunction checkBoxLengths(pk, sk) {\n if (pk.length !== crypto_box_PUBLICKEYBYTES) throw new Error('bad public key size');\n if (sk.length !== crypto_box_SECRETKEYBYTES) throw new Error('bad secret key size');\n}\n\nfunction checkArrayTypes() {\n for (var i = 0; i < arguments.length; i++) {\n if (!(arguments[i] instanceof Uint8Array))\n throw new TypeError('unexpected type, use Uint8Array');\n }\n}\n\nfunction cleanup(arr) {\n for (var i = 0; i < arr.length; i++) arr[i] = 0;\n}\n\nnacl.randomBytes = function(n) {\n var b = new Uint8Array(n);\n randombytes(b, n);\n return b;\n};\n\nnacl.secretbox = function(msg, nonce, key) {\n checkArrayTypes(msg, nonce, key);\n checkLengths(key, nonce);\n var m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.length);\n var c = new Uint8Array(m.length);\n for (var i = 0; i < msg.length; i++) m[i+crypto_secretbox_ZEROBYTES] = msg[i];\n crypto_secretbox(c, m, m.length, nonce, key);\n return c.subarray(crypto_secretbox_BOXZEROBYTES);\n};\n\nnacl.secretbox.open = function(box, nonce, key) {\n checkArrayTypes(box, nonce, key);\n checkLengths(key, nonce);\n var c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.length);\n var m = new Uint8Array(c.length);\n for (var i = 0; i < box.length; i++) c[i+crypto_secretbox_BOXZEROBYTES] = box[i];\n if (c.length < 32) return null;\n if (crypto_secretbox_open(m, c, c.length, nonce, key) !== 0) return null;\n return m.subarray(crypto_secretbox_ZEROBYTES);\n};\n\nnacl.secretbox.keyLength = crypto_secretbox_KEYBYTES;\nnacl.secretbox.nonceLength = crypto_secretbox_NONCEBYTES;\nnacl.secretbox.overheadLength = crypto_secretbox_BOXZEROBYTES;\n\nnacl.scalarMult = function(n, p) {\n checkArrayTypes(n, p);\n if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');\n if (p.length !== crypto_scalarmult_BYTES) throw new Error('bad p size');\n var q = new Uint8Array(crypto_scalarmult_BYTES);\n crypto_scalarmult(q, n, p);\n return q;\n};\n\nnacl.scalarMult.base = function(n) {\n checkArrayTypes(n);\n if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');\n var q = new Uint8Array(crypto_scalarmult_BYTES);\n crypto_scalarmult_base(q, n);\n return q;\n};\n\nnacl.scalarMult.scalarLength = crypto_scalarmult_SCALARBYTES;\nnacl.scalarMult.groupElementLength = crypto_scalarmult_BYTES;\n\nnacl.box = function(msg, nonce, publicKey, secretKey) {\n var k = nacl.box.before(publicKey, secretKey);\n return nacl.secretbox(msg, nonce, k);\n};\n\nnacl.box.before = function(publicKey, secretKey) {\n checkArrayTypes(publicKey, secretKey);\n checkBoxLengths(publicKey, secretKey);\n var k = new Uint8Array(crypto_box_BEFORENMBYTES);\n crypto_box_beforenm(k, publicKey, secretKey);\n return k;\n};\n\nnacl.box.after = nacl.secretbox;\n\nnacl.box.open = function(msg, nonce, publicKey, secretKey) {\n var k = nacl.box.before(publicKey, secretKey);\n return nacl.secretbox.open(msg, nonce, k);\n};\n\nnacl.box.open.after = nacl.secretbox.open;\n\nnacl.box.keyPair = function() {\n var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_box_SECRETKEYBYTES);\n crypto_box_keypair(pk, sk);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.box.keyPair.fromSecretKey = function(secretKey) {\n checkArrayTypes(secretKey);\n if (secretKey.length !== crypto_box_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);\n crypto_scalarmult_base(pk, secretKey);\n return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\n};\n\nnacl.box.publicKeyLength = crypto_box_PUBLICKEYBYTES;\nnacl.box.secretKeyLength = crypto_box_SECRETKEYBYTES;\nnacl.box.sharedKeyLength = crypto_box_BEFORENMBYTES;\nnacl.box.nonceLength = crypto_box_NONCEBYTES;\nnacl.box.overheadLength = nacl.secretbox.overheadLength;\n\nnacl.sign = function(msg, secretKey) {\n checkArrayTypes(msg, secretKey);\n if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var signedMsg = new Uint8Array(crypto_sign_BYTES+msg.length);\n crypto_sign(signedMsg, msg, msg.length, secretKey);\n return signedMsg;\n};\n\nnacl.sign.open = function(signedMsg, publicKey) {\n checkArrayTypes(signedMsg, publicKey);\n if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n throw new Error('bad public key size');\n var tmp = new Uint8Array(signedMsg.length);\n var mlen = crypto_sign_open(tmp, signedMsg, signedMsg.length, publicKey);\n if (mlen < 0) return null;\n var m = new Uint8Array(mlen);\n for (var i = 0; i < m.length; i++) m[i] = tmp[i];\n return m;\n};\n\nnacl.sign.detached = function(msg, secretKey) {\n var signedMsg = nacl.sign(msg, secretKey);\n var sig = new Uint8Array(crypto_sign_BYTES);\n for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i];\n return sig;\n};\n\nnacl.sign.detached.verify = function(msg, sig, publicKey) {\n checkArrayTypes(msg, sig, publicKey);\n if (sig.length !== crypto_sign_BYTES)\n throw new Error('bad signature size');\n if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n throw new Error('bad public key size');\n var sm = new Uint8Array(crypto_sign_BYTES + msg.length);\n var m = new Uint8Array(crypto_sign_BYTES + msg.length);\n var i;\n for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i];\n for (i = 0; i < msg.length; i++) sm[i+crypto_sign_BYTES] = msg[i];\n return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0);\n};\n\nnacl.sign.keyPair = function() {\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\n crypto_sign_keypair(pk, sk);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.sign.keyPair.fromSecretKey = function(secretKey) {\n checkArrayTypes(secretKey);\n if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n for (var i = 0; i < pk.length; i++) pk[i] = secretKey[32+i];\n return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\n};\n\nnacl.sign.keyPair.fromSeed = function(seed) {\n checkArrayTypes(seed);\n if (seed.length !== crypto_sign_SEEDBYTES)\n throw new Error('bad seed size');\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\n for (var i = 0; i < 32; i++) sk[i] = seed[i];\n crypto_sign_keypair(pk, sk, true);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.sign.publicKeyLength = crypto_sign_PUBLICKEYBYTES;\nnacl.sign.secretKeyLength = crypto_sign_SECRETKEYBYTES;\nnacl.sign.seedLength = crypto_sign_SEEDBYTES;\nnacl.sign.signatureLength = crypto_sign_BYTES;\n\nnacl.hash = function(msg) {\n checkArrayTypes(msg);\n var h = new Uint8Array(crypto_hash_BYTES);\n crypto_hash(h, msg, msg.length);\n return h;\n};\n\nnacl.hash.hashLength = crypto_hash_BYTES;\n\nnacl.verify = function(x, y) {\n checkArrayTypes(x, y);\n // Zero length arguments are considered not equal.\n if (x.length === 0 || y.length === 0) return false;\n if (x.length !== y.length) return false;\n return (vn(x, 0, y, 0, x.length) === 0) ? true : false;\n};\n\nnacl.setPRNG = function(fn) {\n randombytes = fn;\n};\n\n(function() {\n // Initialize PRNG if environment provides CSPRNG.\n // If not, methods calling randombytes will throw.\n var crypto = typeof self !== 'undefined' ? (self.crypto || self.msCrypto) : null;\n if (crypto && crypto.getRandomValues) {\n // Browsers.\n var QUOTA = 65536;\n nacl.setPRNG(function(x, n) {\n var i, v = new Uint8Array(n);\n for (i = 0; i < n; i += QUOTA) {\n crypto.getRandomValues(v.subarray(i, i + Math.min(n - i, QUOTA)));\n }\n for (i = 0; i < n; i++) x[i] = v[i];\n cleanup(v);\n });\n } else if (typeof require !== 'undefined') {\n // Node.js.\n crypto = require('crypto');\n if (crypto && crypto.randomBytes) {\n nacl.setPRNG(function(x, n) {\n var i, v = crypto.randomBytes(n);\n for (i = 0; i < n; i++) x[i] = v[i];\n cleanup(v);\n });\n }\n }\n})();\n\n})(typeof module !== 'undefined' && module.exports ? module.exports : (self.nacl = self.nacl || {}));\n", "// Written in 2014-2016 by Dmitry Chestnykh and Devi Mandiri.\n// Public domain.\n(function(root, f) {\n 'use strict';\n if (typeof module !== 'undefined' && module.exports) module.exports = f();\n else if (root.nacl) root.nacl.util = f();\n else {\n root.nacl = {};\n root.nacl.util = f();\n }\n}(this, function() {\n 'use strict';\n\n var util = {};\n\n function validateBase64(s) {\n if (!(/^(?:[A-Za-z0-9+\\/]{2}[A-Za-z0-9+\\/]{2})*(?:[A-Za-z0-9+\\/]{2}==|[A-Za-z0-9+\\/]{3}=)?$/.test(s))) {\n throw new TypeError('invalid encoding');\n }\n }\n\n util.decodeUTF8 = function(s) {\n if (typeof s !== 'string') throw new TypeError('expected string');\n var i, d = unescape(encodeURIComponent(s)), b = new Uint8Array(d.length);\n for (i = 0; i < d.length; i++) b[i] = d.charCodeAt(i);\n return b;\n };\n\n util.encodeUTF8 = function(arr) {\n var i, s = [];\n for (i = 0; i < arr.length; i++) s.push(String.fromCharCode(arr[i]));\n return decodeURIComponent(escape(s.join('')));\n };\n\n if (typeof atob === 'undefined') {\n // Node.js\n\n if (typeof Buffer.from !== 'undefined') {\n // Node v6 and later\n util.encodeBase64 = function (arr) { // v6 and later\n return Buffer.from(arr).toString('base64');\n };\n\n util.decodeBase64 = function (s) {\n validateBase64(s);\n return new Uint8Array(Array.prototype.slice.call(Buffer.from(s, 'base64'), 0));\n };\n\n } else {\n // Node earlier than v6\n util.encodeBase64 = function (arr) { // v6 and later\n return (new Buffer(arr)).toString('base64');\n };\n\n util.decodeBase64 = function(s) {\n validateBase64(s);\n return new Uint8Array(Array.prototype.slice.call(new Buffer(s, 'base64'), 0));\n };\n }\n\n } else {\n // Browsers\n\n util.encodeBase64 = function(arr) {\n var i, s = [], len = arr.length;\n for (i = 0; i < len; i++) s.push(String.fromCharCode(arr[i]));\n return btoa(s.join(''));\n };\n\n util.decodeBase64 = function(s) {\n validateBase64(s);\n var i, d = atob(s), b = new Uint8Array(d.length);\n for (i = 0; i < d.length; i++) b[i] = d.charCodeAt(i);\n return b;\n };\n\n }\n\n return util;\n\n}));\n", "/*\n * Sloth permutation adaptation based on:\n * https://github.com/hyperhyperspace/pulsar/blob/main/src/model/SlothVDF.ts\n */\nclass SlothPermutation {\n static p = BigInt(\n '170082004324204494273811327264862981553264701145937538369570764779791492622392118654022654452947093285873855529044371650895045691292912712699015605832276411308653107069798639938826015099738961427172366594187783204437869906954750443653318078358839409699824714551430573905637228307966826784684174483831608534979'\n );\n\n fastPow(base, exponent, modulus) {\n if (modulus === BigInt(1)) {\n return BigInt(0);\n }\n\n let result = BigInt(1);\n let powBase = base % modulus;\n let powExponent = exponent;\n\n while (powExponent > 0) {\n if (powExponent % BigInt(2) === BigInt(1)) {\n result = (result * powBase) % modulus;\n }\n\n powExponent = powExponent / BigInt(2);\n powBase = (powBase * powBase) % modulus;\n }\n\n return result;\n }\n\n quadRes(x) {\n return this.fastPow(x, (SlothPermutation.p - BigInt(1)) / BigInt(2), SlothPermutation.p) === BigInt(1);\n }\n\n modSqrtOp(x) {\n let y;\n let value = x;\n\n if (this.quadRes(value)) {\n y = this.fastPow(value, (SlothPermutation.p + BigInt(1)) / BigInt(4), SlothPermutation.p);\n } else {\n value = (-value + SlothPermutation.p) % SlothPermutation.p;\n y = this.fastPow(value, (SlothPermutation.p + BigInt(1)) / BigInt(4), SlothPermutation.p);\n }\n\n return y;\n }\n\n modOp(x, t) {\n let value = x % SlothPermutation.p;\n\n for (let i = BigInt(0); i < t; i += BigInt(1)) {\n value = this.modSqrtOp(value);\n }\n\n return value;\n }\n\n modVerif(y, x, t) {\n const input = x % SlothPermutation.p;\n let value = y;\n\n for (let i = BigInt(0); i < t; i += BigInt(1)) {\n value = (value ** BigInt(2)) % SlothPermutation.p;\n }\n\n if (!this.quadRes(value)) {\n value = (-value + SlothPermutation.p) % SlothPermutation.p;\n }\n\n return input === value || ((-input + SlothPermutation.p) % SlothPermutation.p) === value;\n }\n\n generateProofVDF(t, x) {\n return this.modOp(x, t);\n }\n\n verifyProofVDF(t, x, y) {\n return this.modVerif(y, x, t);\n }\n}\n\nmodule.exports = SlothPermutation;\n", "/*\n * VDF wrapper adaptation based on:\n * https://github.com/hyperhyperspace/pulsar/blob/main/src/model/VDF.ts\n */\nconst SlothPermutation = require('./sloth-vdf');\n\nclass VDF {\n static async compute(challengeHex, steps) {\n const vdfInstance = new SlothPermutation();\n const challengeBigInt = BigInt(`0x${challengeHex}`);\n const result = vdfInstance.generateProofVDF(steps, challengeBigInt);\n return result.toString(16);\n }\n\n static async verify(challengeHex, steps, resultHex) {\n const vdfInstance = new SlothPermutation();\n const challengeBigInt = BigInt(`0x${challengeHex}`);\n const resultBigInt = BigInt(`0x${resultHex}`);\n return vdfInstance.verifyProofVDF(steps, challengeBigInt, resultBigInt);\n }\n}\n\nmodule.exports = VDF;\n", "const nacl = require('tweetnacl');\nconst naclUtil = require('tweetnacl-util');\nconst VDF = require('./vdf');\n\nconst DEFAULT_SECURITY_OPTIONS = {\n enabled: true,\n signingEnabled: true,\n encryptionEnabled: true,\n powEnabled: true,\n powTargetMs: 1000,\n appPassword: 'change-this-app-password',\n broadcastPasswords: {},\n resolveBroadcastPassword: null,\n powSteps: 22,\n trustedPeerKeys: {}\n};\n\nfunction stableStringify(value) {\n if (value === null || typeof value !== 'object') {\n return JSON.stringify(value);\n }\n\n if (Array.isArray(value)) {\n return `[${value.map((entry) => stableStringify(entry)).join(',')}]`;\n }\n\n const keys = Object.keys(value).sort();\n return `{${keys.map((key) => `${JSON.stringify(key)}:${stableStringify(value[key])}`).join(',')}}`;\n}\n\nfunction concatBytes(a, b) {\n const result = new Uint8Array(a.length + b.length);\n result.set(a, 0);\n result.set(b, a.length);\n return result;\n}\n\nfunction hash32(bytes) {\n return nacl.hash(bytes).slice(0, 32);\n}\n\nfunction bytesToHex(bytes) {\n return Array.from(bytes, (byte) => byte.toString(16).padStart(2, '0')).join('');\n}\n\nfunction utf8ToBytes(value) {\n return naclUtil.decodeUTF8(value);\n}\n\nfunction normalizePeerPublicKey(publicKey) {\n if (!publicKey || typeof publicKey !== 'object') {\n throw new Error('Public key must be an object with signingPublicKey and encryptionPublicKey');\n }\n\n if (!publicKey.signingPublicKey || !publicKey.encryptionPublicKey) {\n throw new Error('Public key object is missing signingPublicKey or encryptionPublicKey');\n }\n\n return {\n signingPublicKey: publicKey.signingPublicKey,\n encryptionPublicKey: publicKey.encryptionPublicKey\n };\n}\n\nclass MessageSecurityService {\n constructor({ nodeId, options = {}, now } = {}) {\n if (!nodeId) {\n throw new Error('MessageSecurityService requires nodeId');\n }\n\n this.nodeId = nodeId;\n this.options = {\n ...DEFAULT_SECURITY_OPTIONS,\n ...options\n };\n this.now = now || (() => Date.now());\n\n const keyPair = options.keyPair || {\n signing: nacl.sign.keyPair(),\n encryption: nacl.box.keyPair()\n };\n\n this.signingSecretKey = keyPair.signing.secretKey;\n this.signingPublicKey = keyPair.signing.publicKey;\n this.encryptionSecretKey = keyPair.encryption.secretKey;\n this.encryptionPublicKey = keyPair.encryption.publicKey;\n\n this.publicKeyBundle = {\n signingPublicKey: naclUtil.encodeBase64(this.signingPublicKey),\n encryptionPublicKey: naclUtil.encodeBase64(this.encryptionPublicKey)\n };\n\n this.peerPublicKeys = new Map();\n for (const [peerId, peerKey] of Object.entries(this.options.trustedPeerKeys || {})) {\n this.peerPublicKeys.set(peerId, normalizePeerPublicKey(peerKey));\n }\n\n this.calibratedPowSteps = this.options.powSteps;\n }\n\n getPublicKey() {\n return { ...this.publicKeyBundle };\n }\n\n registerPeerPublicKey(peerId, publicKey) {\n this.peerPublicKeys.set(peerId, normalizePeerPublicKey(publicKey));\n }\n\n resolvePeerPublicKey(peerId, fallbackPublicKey) {\n const trusted = this.peerPublicKeys.get(peerId);\n const fallback = fallbackPublicKey ? normalizePeerPublicKey(fallbackPublicKey) : null;\n\n if (trusted && fallback) {\n const mismatch =\n trusted.signingPublicKey !== fallback.signingPublicKey ||\n trusted.encryptionPublicKey !== fallback.encryptionPublicKey;\n\n if (mismatch) {\n throw new Error(`Public key mismatch for peer ${peerId}`);\n }\n }\n\n return trusted || fallback || null;\n }\n\n buildEnvelopeBase({ messageType, payload, targetId = null }) {\n return {\n version: 1,\n senderId: this.nodeId,\n senderPublicKey: this.getPublicKey(),\n targetId,\n messageType,\n timestamp: this.now(),\n payload\n };\n }\n\n async secureOutgoingMessage({ messageType, payload, targetId = null, securityContext = {} }) {\n if (!this.options.enabled) {\n return this.buildEnvelopeBase({ messageType, payload, targetId });\n }\n\n const envelope = this.buildEnvelopeBase({ messageType, payload, targetId });\n const encryptionInfo = await this.encryptPayload({ payload, targetId, securityContext });\n envelope.payload = encryptionInfo.payload;\n envelope.security = {\n encryption: encryptionInfo.security,\n signing: { enabled: false },\n pow: { enabled: false }\n };\n\n if (this.options.powEnabled) {\n const pow = await this.generatePow(envelope);\n envelope.security.pow = {\n enabled: true,\n messageHash: pow.messageHash,\n challenge: pow.challenge,\n proof: pow.proof,\n steps: pow.steps,\n durationMs: pow.durationMs\n };\n }\n\n if (this.options.signingEnabled) {\n const signatureBase = this.canonicalSigningInput(envelope);\n const signature = nacl.sign.detached(\n naclUtil.decodeUTF8(signatureBase),\n this.signingSecretKey\n );\n\n envelope.security.signing = {\n enabled: true,\n algorithm: 'ed25519',\n signature: naclUtil.encodeBase64(signature)\n };\n }\n\n return envelope;\n }\n\n canonicalSigningInput(envelope) {\n return stableStringify({\n version: envelope.version,\n senderId: envelope.senderId,\n senderPublicKey: envelope.senderPublicKey,\n targetId: envelope.targetId,\n messageType: envelope.messageType,\n timestamp: envelope.timestamp,\n payload: envelope.payload,\n security: {\n encryption: envelope.security ? envelope.security.encryption : { enabled: false },\n pow: envelope.security ? envelope.security.pow : { enabled: false }\n }\n });\n }\n\n canonicalPowInput(envelope) {\n return stableStringify({\n version: envelope.version,\n senderId: envelope.senderId,\n senderPublicKey: envelope.senderPublicKey,\n targetId: envelope.targetId,\n messageType: envelope.messageType,\n timestamp: envelope.timestamp,\n payload: envelope.payload,\n security: {\n encryption: envelope.security ? envelope.security.encryption : { enabled: false }\n }\n });\n }\n\n computePowMessageHash(envelope) {\n return bytesToHex(hash32(utf8ToBytes(this.canonicalPowInput(envelope))));\n }\n\n async decryptIncomingMessage(envelope) {\n if (!this.options.enabled) {\n return {\n ignored: false,\n messageType: envelope.messageType,\n senderId: envelope.senderId,\n targetId: envelope.targetId,\n payload: envelope.payload\n };\n }\n\n if (!envelope || typeof envelope !== 'object') {\n throw new Error('Incoming message is invalid');\n }\n\n if (envelope.targetId && envelope.targetId !== this.nodeId) {\n return { ignored: true };\n }\n\n if (envelope.security && envelope.security.pow && envelope.security.pow.enabled && this.options.powEnabled) {\n await this.verifyPow(envelope);\n }\n\n if (envelope.security && envelope.security.signing && envelope.security.signing.enabled && this.options.signingEnabled) {\n this.verifySignature(envelope);\n }\n\n const payload = this.decryptPayload(envelope);\n\n return {\n ignored: false,\n messageType: envelope.messageType,\n senderId: envelope.senderId,\n targetId: envelope.targetId,\n payload\n };\n }\n\n resolveBroadcastPassword(scope) {\n const normalizedScope = scope || 'default';\n\n if (typeof this.options.resolveBroadcastPassword === 'function') {\n const resolved = this.options.resolveBroadcastPassword({\n scope: normalizedScope,\n nodeId: this.nodeId,\n defaultPassword: this.options.appPassword,\n broadcastPasswords: this.options.broadcastPasswords || {}\n });\n\n if (typeof resolved === 'string' && resolved.length > 0) {\n return resolved;\n }\n }\n\n const scopePassword = this.options.broadcastPasswords\n ? this.options.broadcastPasswords[normalizedScope]\n : null;\n\n if (typeof scopePassword === 'string' && scopePassword.length > 0) {\n return scopePassword;\n }\n\n return this.options.appPassword;\n }\n\n async encryptPayload({ payload, targetId, securityContext = {} }) {\n if (!this.options.encryptionEnabled) {\n return {\n payload,\n security: {\n enabled: false,\n mode: 'none'\n }\n };\n }\n\n const plainText = naclUtil.decodeUTF8(JSON.stringify(payload));\n\n if (targetId) {\n const recipientPublicKey = this.resolvePeerPublicKey(targetId, null);\n if (!recipientPublicKey) {\n throw new Error(`Missing public key for target peer ${targetId}`);\n }\n\n const nonce = nacl.randomBytes(nacl.box.nonceLength);\n const encrypted = nacl.box(\n plainText,\n nonce,\n naclUtil.decodeBase64(recipientPublicKey.encryptionPublicKey),\n this.encryptionSecretKey\n );\n\n return {\n payload: naclUtil.encodeBase64(encrypted),\n security: {\n enabled: true,\n mode: 'direct',\n nonce: naclUtil.encodeBase64(nonce),\n senderEncryptionPublicKey: this.publicKeyBundle.encryptionPublicKey\n }\n };\n }\n\n const scope = securityContext.broadcastScope || 'default';\n const nonce = nacl.randomBytes(nacl.secretbox.nonceLength);\n const salt = nacl.randomBytes(16);\n const password = this.resolveBroadcastPassword(scope);\n const key = hash32(concatBytes(utf8ToBytes(password), salt));\n const encrypted = nacl.secretbox(plainText, nonce, key);\n\n return {\n payload: naclUtil.encodeBase64(encrypted),\n security: {\n enabled: true,\n mode: 'broadcast',\n scope,\n nonce: naclUtil.encodeBase64(nonce),\n salt: naclUtil.encodeBase64(salt)\n }\n };\n }\n\n decryptPayload(envelope) {\n const encryption = envelope.security ? envelope.security.encryption : null;\n\n if (!encryption || !encryption.enabled || !this.options.encryptionEnabled) {\n return envelope.payload;\n }\n\n const encryptedBuffer = naclUtil.decodeBase64(envelope.payload);\n\n if (encryption.mode === 'broadcast') {\n const scope = encryption.scope || 'default';\n const password = this.resolveBroadcastPassword(scope);\n const salt = naclUtil.decodeBase64(encryption.salt);\n const nonce = naclUtil.decodeBase64(encryption.nonce);\n const key = hash32(concatBytes(utf8ToBytes(password), salt));\n const decrypted = nacl.secretbox.open(encryptedBuffer, nonce, key);\n\n if (!decrypted) {\n throw new Error('Unable to decrypt broadcast payload');\n }\n\n return JSON.parse(naclUtil.encodeUTF8(decrypted));\n }\n\n if (encryption.mode === 'direct') {\n const senderPublicKey = naclUtil.decodeBase64(encryption.senderEncryptionPublicKey);\n const nonce = naclUtil.decodeBase64(encryption.nonce);\n const decrypted = nacl.box.open(\n encryptedBuffer,\n nonce,\n senderPublicKey,\n this.encryptionSecretKey\n );\n\n if (!decrypted) {\n throw new Error('Unable to decrypt direct payload');\n }\n\n return JSON.parse(naclUtil.encodeUTF8(decrypted));\n }\n\n throw new Error(`Unsupported encryption mode: ${encryption.mode}`);\n }\n\n verifySignature(envelope) {\n const senderPublicKey = this.resolvePeerPublicKey(envelope.senderId, envelope.senderPublicKey);\n if (!senderPublicKey) {\n throw new Error(`Missing public key for sender ${envelope.senderId}`);\n }\n\n const signatureBase = this.canonicalSigningInput(envelope);\n const isValid = nacl.sign.detached.verify(\n naclUtil.decodeUTF8(signatureBase),\n naclUtil.decodeBase64(envelope.security.signing.signature),\n naclUtil.decodeBase64(senderPublicKey.signingPublicKey)\n );\n\n if (!isValid) {\n const error = new Error(`Invalid signature for sender ${envelope.senderId}`);\n error.code = 'INVALID_SIGNATURE';\n throw error;\n }\n\n return true;\n }\n\n async determinePowSteps() {\n if (typeof this.calibratedPowSteps === 'bigint') {\n return this.calibratedPowSteps;\n }\n\n if (typeof this.options.powSteps === 'number') {\n this.calibratedPowSteps = BigInt(Math.max(1, this.options.powSteps));\n return this.calibratedPowSteps;\n }\n\n const targetMs = Math.max(1, Number(this.options.powTargetMs || 1));\n const probeChallenge = bytesToHex(hash32(utf8ToBytes(`probe:${this.nodeId}:${this.now()}`)));\n const probeSteps = BigInt(2);\n\n const start = this.now();\n await VDF.compute(probeChallenge, probeSteps);\n const elapsedMs = Math.max(1, this.now() - start);\n\n const scaled = Math.max(1, Math.round((targetMs / elapsedMs) * Number(probeSteps)));\n this.calibratedPowSteps = BigInt(scaled);\n return this.calibratedPowSteps;\n }\n\n async generatePow(envelope) {\n const messageHash = this.computePowMessageHash(envelope);\n const challenge = messageHash;\n const steps = await this.determinePowSteps();\n const start = this.now();\n const proof = await VDF.compute(challenge, steps);\n const durationMs = this.now() - start;\n\n return {\n messageHash,\n challenge,\n proof,\n steps: steps.toString(),\n durationMs\n };\n }\n\n async verifyPow(envelope) {\n const expectedMessageHash = this.computePowMessageHash(envelope);\n const pow = envelope.security.pow;\n\n if (\n !pow ||\n !pow.messageHash ||\n pow.messageHash !== expectedMessageHash ||\n pow.challenge !== pow.messageHash\n ) {\n const error = new Error('PoW challenge mismatch');\n error.code = 'INVALID_POW';\n throw error;\n }\n\n const verified = await VDF.verify(pow.messageHash, BigInt(pow.steps), pow.proof);\n if (!verified) {\n const error = new Error('PoW verification failed');\n error.code = 'INVALID_POW';\n throw error;\n }\n\n return true;\n }\n}\n\nmodule.exports = {\n MessageSecurityService,\n stableStringify,\n DEFAULT_SECURITY_OPTIONS\n};\n", "const EventEmitter = require('../utils/event-emitter');\nconst { MessageSecurityService } = require('../security/message-security-service');\n\n/**\n * Core node API for replicated object collections.\n *\n * Interface shape is intentionally REST-like:\n * - create(collection, data)\n * - read(collection, id)\n * - list(collection)\n * - update(collection, id, patch)\n * - remove(collection, id)\n *\n * Authorization model:\n * - object creator is the owner\n * - only owner can update or delete\n */\nclass DignityP2P extends EventEmitter {\n constructor({ nodeId, networkAdapter, idGenerator, now, security } = {}) {\n super();\n\n if (!nodeId) {\n throw new Error('DignityP2P requires nodeId');\n }\n\n if (!networkAdapter) {\n throw new Error('DignityP2P requires networkAdapter');\n }\n\n this.nodeId = nodeId;\n this.networkAdapter = networkAdapter;\n this.idGenerator = idGenerator || (() => `${Date.now()}-${Math.random().toString(16).slice(2)}`);\n this.now = now || (() => Date.now());\n this.securityService = new MessageSecurityService({\n nodeId: this.nodeId,\n options: security || {},\n now: this.now\n });\n this.bannedPeers = new Map();\n this.peerBanDurationMs = security && typeof security.banDurationMs === 'number'\n ? security.banDurationMs\n : 48 * 60 * 60 * 1000;\n this.resolveBroadcastScope = security && typeof security.resolveBroadcastScope === 'function'\n ? security.resolveBroadcastScope\n : (() => 'default');\n this.defaultDiscoveryHeartbeatMs = security && typeof security.discoveryHeartbeatMs === 'number'\n ? security.discoveryHeartbeatMs\n : 15000;\n this.defaultPresenceTtlMs = security && typeof security.presenceTtlMs === 'number'\n ? security.presenceTtlMs\n : 45000;\n this.discoveryRooms = new Map(); // scope -> { metadata, heartbeatIntervalMs, ttlMs, timer }\n this.presenceByScope = new Map(); // scope -> Map(peerId -> presence)\n\n this.state = new Map(); // collection -> Map(id -> record)\n this.appliedOperations = new Set();\n this.boundMessageHandler = this.handleIncomingMessage.bind(this);\n }\n\n async start() {\n this.networkAdapter.onMessage(this.boundMessageHandler);\n await this.networkAdapter.start(this.nodeId);\n }\n\n async stop() {\n const joinedScopes = Array.from(this.discoveryRooms.keys());\n for (const scope of joinedScopes) {\n // Best effort leave announce; do not fail node shutdown if network is interrupted.\n try {\n await this.leaveDiscovery(scope);\n } catch (error) {\n this.emit('warning', { type: 'presence-leave-failed', scope, error });\n }\n }\n\n this.networkAdapter.offMessage(this.boundMessageHandler);\n await this.networkAdapter.stop();\n }\n\n getCollection(collectionName) {\n if (!collectionName) {\n throw new Error('collectionName is required');\n }\n\n if (!this.state.has(collectionName)) {\n this.state.set(collectionName, new Map());\n }\n\n return this.state.get(collectionName);\n }\n\n normalizeRecord(record) {\n if (!record || record.deletedAt) {\n return null;\n }\n\n return {\n id: record.id,\n ownerId: record.ownerId,\n createdAt: record.createdAt,\n updatedAt: record.updatedAt,\n version: record.version,\n data: { ...record.data }\n };\n }\n\n async create(collectionName, data, options = {}) {\n const collection = this.getCollection(collectionName);\n const id = options.id || this.idGenerator();\n\n if (collection.has(id) && !collection.get(id).deletedAt) {\n throw new Error(`Object ${id} already exists in ${collectionName}`);\n }\n\n const timestamp = this.now();\n const operation = {\n opId: this.idGenerator(),\n kind: 'create',\n collectionName,\n id,\n actorId: this.nodeId,\n ownerId: this.nodeId,\n timestamp,\n payload: { ...data }\n };\n\n this.applyOperation(operation);\n await this.broadcastMessage('operation', operation, {\n broadcastScope: options.broadcastScope || this.resolveBroadcastScope({\n messageType: 'operation',\n operation,\n collectionName\n })\n });\n\n return this.read(collectionName, id);\n }\n\n read(collectionName, id) {\n const collection = this.getCollection(collectionName);\n return this.normalizeRecord(collection.get(id));\n }\n\n list(collectionName, options = {}) {\n const collection = this.getCollection(collectionName);\n const includeDeleted = options.includeDeleted || false;\n\n const records = [];\n for (const record of collection.values()) {\n if (record.deletedAt && !includeDeleted) {\n continue;\n }\n\n if (record.deletedAt && includeDeleted) {\n records.push({\n id: record.id,\n ownerId: record.ownerId,\n deletedAt: record.deletedAt,\n version: record.version\n });\n continue;\n }\n\n records.push(this.normalizeRecord(record));\n }\n\n return records;\n }\n\n async update(collectionName, id, partialData, options = {}) {\n const existing = this.getCollection(collectionName).get(id);\n\n if (!existing || existing.deletedAt) {\n throw new Error(`Object ${id} does not exist in ${collectionName}`);\n }\n\n if (existing.ownerId !== this.nodeId) {\n throw new Error(`Only owner ${existing.ownerId} can update object ${id}`);\n }\n\n const operation = {\n opId: this.idGenerator(),\n kind: 'update',\n collectionName,\n id,\n actorId: this.nodeId,\n timestamp: this.now(),\n baseVersion: existing.version,\n payload: { ...partialData }\n };\n\n this.applyOperation(operation);\n await this.broadcastMessage('operation', operation, {\n broadcastScope: options.broadcastScope || this.resolveBroadcastScope({\n messageType: 'operation',\n operation,\n collectionName\n })\n });\n\n return this.read(collectionName, id);\n }\n\n async remove(collectionName, id, options = {}) {\n const existing = this.getCollection(collectionName).get(id);\n\n if (!existing || existing.deletedAt) {\n throw new Error(`Object ${id} does not exist in ${collectionName}`);\n }\n\n if (existing.ownerId !== this.nodeId) {\n throw new Error(`Only owner ${existing.ownerId} can delete object ${id}`);\n }\n\n const operation = {\n opId: this.idGenerator(),\n kind: 'delete',\n collectionName,\n id,\n actorId: this.nodeId,\n timestamp: this.now(),\n baseVersion: existing.version\n };\n\n this.applyOperation(operation);\n await this.broadcastMessage('operation', operation, {\n broadcastScope: options.broadcastScope || this.resolveBroadcastScope({\n messageType: 'operation',\n operation,\n collectionName\n })\n });\n }\n\n registerPeerPublicKey(peerId, publicKey) {\n this.securityService.registerPeerPublicKey(peerId, publicKey);\n }\n\n getPublicKey() {\n return this.securityService.getPublicKey();\n }\n\n async broadcastMessage(messageType, payload, securityContext = {}) {\n const envelope = await this.securityService.secureOutgoingMessage({\n messageType,\n payload,\n targetId: null,\n securityContext\n });\n await this.networkAdapter.broadcast(envelope);\n }\n\n async sendDirectMessage(targetId, messageType, payload) {\n const envelope = await this.securityService.secureOutgoingMessage({\n messageType,\n payload,\n targetId\n });\n await this.networkAdapter.broadcast(envelope);\n }\n\n getPresenceMap(scope) {\n if (!this.presenceByScope.has(scope)) {\n this.presenceByScope.set(scope, new Map());\n }\n\n return this.presenceByScope.get(scope);\n }\n\n upsertPresence(scope, peerId, metadata, ttlMs, announcedAt) {\n const map = this.getPresenceMap(scope);\n const existing = map.get(peerId);\n const next = {\n peerId,\n scope,\n metadata: metadata ? { ...metadata } : {},\n lastSeenAt: announcedAt,\n expiresAt: announcedAt + ttlMs\n };\n map.set(peerId, next);\n\n if (!existing) {\n this.emit('peerdiscovered', { scope, peerId, metadata: next.metadata });\n }\n\n return next;\n }\n\n prunePresence(scope) {\n const map = this.presenceByScope.get(scope);\n if (!map) {\n return;\n }\n\n const now = this.now();\n for (const [peerId, entry] of map.entries()) {\n if (entry.expiresAt <= now) {\n map.delete(peerId);\n this.emit('peerleft', { scope, peerId, reason: 'timeout' });\n }\n }\n }\n\n async joinDiscovery(scope = 'main', options = {}) {\n const normalizedScope = scope || 'main';\n const heartbeatIntervalMs = options.heartbeatIntervalMs || this.defaultDiscoveryHeartbeatMs;\n const ttlMs = options.ttlMs || this.defaultPresenceTtlMs;\n const metadata = options.metadata || {};\n\n const existing = this.discoveryRooms.get(normalizedScope);\n if (existing && existing.timer) {\n clearInterval(existing.timer);\n }\n\n const timer = setInterval(() => {\n this.announcePresence(normalizedScope).catch((error) => {\n this.emit('warning', { type: 'presence-heartbeat-failed', scope: normalizedScope, error });\n });\n }, heartbeatIntervalMs);\n\n this.discoveryRooms.set(normalizedScope, {\n metadata,\n heartbeatIntervalMs,\n ttlMs,\n timer\n });\n\n this.upsertPresence(normalizedScope, this.nodeId, metadata, ttlMs, this.now());\n await this.announcePresence(normalizedScope);\n }\n\n async announcePresence(scope = 'main', metadataOverride = null) {\n const normalizedScope = scope || 'main';\n const room = this.discoveryRooms.get(normalizedScope);\n if (!room) {\n throw new Error(`Scope ${normalizedScope} has not been joined for discovery`);\n }\n\n const metadata = metadataOverride || room.metadata || {};\n const announcedAt = this.now();\n this.upsertPresence(normalizedScope, this.nodeId, metadata, room.ttlMs, announcedAt);\n\n await this.broadcastMessage(\n 'presence:announce',\n {\n scope: normalizedScope,\n peerId: this.nodeId,\n metadata,\n ttlMs: room.ttlMs,\n announcedAt\n },\n { broadcastScope: normalizedScope }\n );\n }\n\n async leaveDiscovery(scope = 'main') {\n const normalizedScope = scope || 'main';\n const room = this.discoveryRooms.get(normalizedScope);\n if (!room) {\n return;\n }\n\n if (room.timer) {\n clearInterval(room.timer);\n }\n this.discoveryRooms.delete(normalizedScope);\n\n const map = this.presenceByScope.get(normalizedScope);\n if (map) {\n map.delete(this.nodeId);\n }\n\n await this.broadcastMessage(\n 'presence:leave',\n {\n scope: normalizedScope,\n peerId: this.nodeId,\n leftAt: this.now()\n },\n { broadcastScope: normalizedScope }\n );\n }\n\n listPeers(scope = 'main', options = {}) {\n const normalizedScope = scope || 'main';\n const includeSelf = options.includeSelf !== false;\n this.prunePresence(normalizedScope);\n\n const map = this.presenceByScope.get(normalizedScope);\n if (!map) {\n return [];\n }\n\n return Array.from(map.values())\n .filter((entry) => includeSelf || entry.peerId !== this.nodeId)\n .map((entry) => ({\n peerId: entry.peerId,\n scope: entry.scope,\n metadata: { ...entry.metadata },\n lastSeenAt: entry.lastSeenAt,\n expiresAt: entry.expiresAt\n }));\n }\n\n async handleIncomingMessage(message) {\n // Backward compatibility for raw operation payloads\n if (message && message.opId && message.kind) {\n this.applyOperation(message);\n return;\n }\n\n if (message && message.senderId && this.isPeerBanned(message.senderId)) {\n this.emit('messageignored', {\n senderId: message.senderId,\n reason: 'peer-banned'\n });\n return;\n }\n\n let decrypted;\n try {\n decrypted = await this.securityService.decryptIncomingMessage(message);\n } catch (error) {\n const senderId = message ? message.senderId : null;\n if (senderId && (error.code === 'INVALID_SIGNATURE' || error.code === 'INVALID_POW')) {\n this.banPeer(senderId, this.peerBanDurationMs, error.code);\n }\n\n this.emit('securityerror', {\n senderId,\n error\n });\n return;\n }\n\n if (!decrypted || decrypted.ignored) {\n return;\n }\n\n if (decrypted.messageType === 'operation') {\n this.applyOperation(decrypted.payload);\n return;\n }\n\n if (decrypted.messageType === 'presence:announce') {\n const payload = decrypted.payload || {};\n const scope = payload.scope || 'main';\n const peerId = payload.peerId || decrypted.senderId;\n if (!peerId) {\n return;\n }\n\n const presenceMap = this.getPresenceMap(scope);\n const isNewPeerInScope = !presenceMap.has(peerId);\n\n this.upsertPresence(\n scope,\n peerId,\n payload.metadata || {},\n payload.ttlMs || this.defaultPresenceTtlMs,\n payload.announcedAt || this.now()\n );\n\n // Discovery handshake: when a new peer appears in a joined scope,\n // send our current presence so late joiners quickly converge.\n if (isNewPeerInScope && peerId !== this.nodeId && this.discoveryRooms.has(scope)) {\n this.announcePresence(scope).catch((error) => {\n this.emit('warning', { type: 'presence-handshake-failed', scope, error });\n });\n }\n return;\n }\n\n if (decrypted.messageType === 'presence:leave') {\n const payload = decrypted.payload || {};\n const scope = payload.scope || 'main';\n const peerId = payload.peerId || decrypted.senderId;\n const map = this.presenceByScope.get(scope);\n if (map && peerId && map.has(peerId)) {\n map.delete(peerId);\n this.emit('peerleft', { scope, peerId, reason: 'leave' });\n }\n return;\n }\n\n this.emit('message', {\n senderId: decrypted.senderId,\n targetId: decrypted.targetId,\n type: decrypted.messageType,\n payload: decrypted.payload\n });\n }\n\n banPeer(peerId, durationMs = this.peerBanDurationMs, reason = 'manual') {\n if (!peerId) {\n return;\n }\n\n const bannedUntil = this.now() + Math.max(1, durationMs);\n this.bannedPeers.set(peerId, {\n peerId,\n reason,\n bannedAt: this.now(),\n bannedUntil\n });\n\n this.emit('peerbanned', {\n peerId,\n reason,\n bannedUntil\n });\n }\n\n unbanPeer(peerId) {\n this.bannedPeers.delete(peerId);\n this.emit('peerunbanned', { peerId });\n }\n\n getBanInfo(peerId) {\n const info = this.bannedPeers.get(peerId);\n if (!info) {\n return null;\n }\n\n if (info.bannedUntil <= this.now()) {\n this.bannedPeers.delete(peerId);\n return null;\n }\n\n return { ...info };\n }\n\n isPeerBanned(peerId) {\n return this.getBanInfo(peerId) !== null;\n }\n\n applyOperation(operation) {\n if (!operation || !operation.opId || this.appliedOperations.has(operation.opId)) {\n return false;\n }\n\n const collection = this.getCollection(operation.collectionName);\n const current = collection.get(operation.id);\n\n if (operation.kind === 'create') {\n if (current && !current.deletedAt) {\n return false;\n }\n\n collection.set(operation.id, {\n id: operation.id,\n ownerId: operation.ownerId,\n data: { ...operation.payload },\n createdAt: operation.timestamp,\n updatedAt: operation.timestamp,\n deletedAt: null,\n version: 1\n });\n\n this.appliedOperations.add(operation.opId);\n this.emit('change', { kind: 'create', collection: operation.collectionName, id: operation.id });\n return true;\n }\n\n if (!current || current.deletedAt) {\n return false;\n }\n\n if (operation.actorId !== current.ownerId) {\n return false;\n }\n\n if (typeof operation.baseVersion === 'number' && operation.baseVersion !== current.version) {\n return false;\n }\n\n if (operation.kind === 'update') {\n current.data = {\n ...current.data,\n ...operation.payload\n };\n current.updatedAt = operation.timestamp;\n current.version += 1;\n\n this.appliedOperations.add(operation.opId);\n this.emit('change', { kind: 'update', collection: operation.collectionName, id: operation.id });\n return true;\n }\n\n if (operation.kind === 'delete') {\n current.deletedAt = operation.timestamp;\n current.updatedAt = operation.timestamp;\n current.version += 1;\n\n this.appliedOperations.add(operation.opId);\n this.emit('change', { kind: 'delete', collection: operation.collectionName, id: operation.id });\n return true;\n }\n\n return false;\n }\n}\n\nmodule.exports = DignityP2P;\n", "class SignalingPool {\n constructor(providers = []) {\n this.providers = [...providers];\n this.activeProvider = null;\n }\n\n registerProvider(provider) {\n this.providers.push(provider);\n }\n\n getProvidersByPriority() {\n return [...this.providers].sort((a, b) => (a.priority || 0) - (b.priority || 0));\n }\n\n async connect(excludedProviderIds = new Set()) {\n const providers = this.getProvidersByPriority().filter(\n (provider) => !excludedProviderIds.has(provider.id)\n );\n let lastError;\n\n for (const provider of providers) {\n try {\n await provider.connect();\n this.activeProvider = provider;\n return provider;\n } catch (error) {\n lastError = error;\n }\n }\n\n throw lastError || new Error('No signaling provider could connect');\n }\n\n async send(message) {\n if (!this.activeProvider) {\n await this.connect();\n }\n\n try {\n await this.activeProvider.send(message);\n } catch (error) {\n if (this.activeProvider && typeof this.activeProvider.disconnect === 'function') {\n await this.activeProvider.disconnect();\n }\n\n const failedProviderId = this.activeProvider ? this.activeProvider.id : null;\n this.activeProvider = null;\n const excludedProviderIds = failedProviderId ? new Set([failedProviderId]) : new Set();\n await this.connect(excludedProviderIds);\n await this.activeProvider.send(message);\n return error;\n }\n\n return null;\n }\n\n onMessage(handler) {\n for (const provider of this.providers) {\n if (typeof provider.onMessage === 'function') {\n provider.onMessage(handler);\n }\n }\n }\n\n async disconnect() {\n const disconnections = this.providers\n .filter((provider) => typeof provider.disconnect === 'function')\n .map((provider) => provider.disconnect());\n\n await Promise.all(disconnections);\n this.activeProvider = null;\n }\n}\n\nmodule.exports = SignalingPool;\n", "class WebSocketSignalingProvider {\n constructor({ id, url, WebSocketImpl, priority = 0 }) {\n if (!url) {\n throw new Error('WebSocket signaling provider requires a url');\n }\n\n this.id = id || url;\n this.url = url;\n this.priority = priority;\n this.WebSocketImpl = WebSocketImpl || globalThis.WebSocket;\n this.socket = null;\n this.messageHandlers = new Set();\n }\n\n async connect() {\n if (!this.WebSocketImpl) {\n throw new Error('WebSocket implementation is not available');\n }\n\n await new Promise((resolve, reject) => {\n const socket = new this.WebSocketImpl(this.buildConnectionUrl());\n\n socket.onopen = () => {\n this.socket = socket;\n resolve();\n };\n\n socket.onerror = () => {\n reject(new Error(`Unable to connect to signaling url ${this.url}`));\n };\n\n socket.onmessage = (event) => {\n let payload = event.data;\n try {\n payload = JSON.parse(event.data);\n } catch (error) {\n payload = event.data;\n }\n\n for (const handler of this.messageHandlers) {\n handler(payload);\n }\n };\n });\n }\n\n buildConnectionUrl() {\n const peerJsHostPattern = /^wss:\\/\\/(peerjs\\.92k\\.de|0\\.peerjs\\.com)(\\/|$)/;\n if (!peerJsHostPattern.test(this.url)) {\n return this.url;\n }\n\n const connectionId = `dignityjs_${Math.random().toString(36).slice(2, 12)}`;\n const token = Math.random().toString(36).slice(2, 12);\n const hasQuery = this.url.includes('?');\n const hasId = /[?&]id=/.test(this.url);\n const hasToken = /[?&]token=/.test(this.url);\n\n let url = this.url;\n if (!hasId) {\n url += `${hasQuery ? '&' : '?'}id=${connectionId}`;\n }\n if (!hasToken) {\n url += `${url.includes('?') ? '&' : '?'}token=${token}`;\n }\n\n return url;\n }\n\n onMessage(handler) {\n this.messageHandlers.add(handler);\n }\n\n async send(message) {\n if (!this.socket || this.socket.readyState !== 1) {\n throw new Error(`Signaling socket is not open for ${this.url}`);\n }\n\n this.socket.send(JSON.stringify(message));\n }\n\n async disconnect() {\n if (!this.socket) {\n return;\n }\n\n this.socket.close();\n this.socket = null;\n }\n}\n\nmodule.exports = WebSocketSignalingProvider;\n", "import { BufferBuilder } from \"./bufferbuilder\";\n\nexport type Packable =\n\t| null\n\t| undefined\n\t| string\n\t| number\n\t| boolean\n\t| Date\n\t| ArrayBuffer\n\t| Blob\n\t| Array<Packable>\n\t| { [key: string]: Packable }\n\t| ({ BYTES_PER_ELEMENT: number } & ArrayBufferView);\nexport type Unpackable =\n\t| null\n\t| undefined\n\t| string\n\t| number\n\t| boolean\n\t| ArrayBuffer\n\t| Array<Unpackable>\n\t| { [key: string]: Unpackable };\n\nexport function unpack<T extends Unpackable>(data: ArrayBuffer) {\n\tconst unpacker = new Unpacker(data);\n\treturn unpacker.unpack() as T;\n}\n\nexport function pack(data: Packable) {\n\tconst packer = new Packer();\n\tconst res = packer.pack(data);\n\tif (res instanceof Promise) {\n\t\treturn res.then(() => packer.getBuffer());\n\t}\n\treturn packer.getBuffer();\n}\n\nclass Unpacker {\n\tprivate index: number;\n\tprivate readonly dataBuffer: ArrayBuffer;\n\tprivate readonly dataView: Uint8Array;\n\tprivate readonly length: number;\n\n\tconstructor(data: ArrayBuffer) {\n\t\tthis.index = 0;\n\t\tthis.dataBuffer = data;\n\t\tthis.dataView = new Uint8Array(this.dataBuffer);\n\t\tthis.length = this.dataBuffer.byteLength;\n\t}\n\n\tunpack(): Unpackable {\n\t\tconst type = this.unpack_uint8();\n\t\tif (type < 0x80) {\n\t\t\treturn type;\n\t\t} else if ((type ^ 0xe0) < 0x20) {\n\t\t\treturn (type ^ 0xe0) - 0x20;\n\t\t}\n\n\t\tlet size;\n\t\tif ((size = type ^ 0xa0) <= 0x0f) {\n\t\t\treturn this.unpack_raw(size);\n\t\t} else if ((size = type ^ 0xb0) <= 0x0f) {\n\t\t\treturn this.unpack_string(size);\n\t\t} else if ((size = type ^ 0x90) <= 0x0f) {\n\t\t\treturn this.unpack_array(size);\n\t\t} else if ((size = type ^ 0x80) <= 0x0f) {\n\t\t\treturn this.unpack_map(size);\n\t\t}\n\n\t\tswitch (type) {\n\t\t\tcase 0xc0:\n\t\t\t\treturn null;\n\t\t\tcase 0xc1:\n\t\t\t\treturn undefined;\n\t\t\tcase 0xc2:\n\t\t\t\treturn false;\n\t\t\tcase 0xc3:\n\t\t\t\treturn true;\n\t\t\tcase 0xca:\n\t\t\t\treturn this.unpack_float();\n\t\t\tcase 0xcb:\n\t\t\t\treturn this.unpack_double();\n\t\t\tcase 0xcc:\n\t\t\t\treturn this.unpack_uint8();\n\t\t\tcase 0xcd:\n\t\t\t\treturn this.unpack_uint16();\n\t\t\tcase 0xce:\n\t\t\t\treturn this.unpack_uint32();\n\t\t\tcase 0xcf:\n\t\t\t\treturn this.unpack_uint64();\n\t\t\tcase 0xd0:\n\t\t\t\treturn this.unpack_int8();\n\t\t\tcase 0xd1:\n\t\t\t\treturn this.unpack_int16();\n\t\t\tcase 0xd2:\n\t\t\t\treturn this.unpack_int32();\n\t\t\tcase 0xd3:\n\t\t\t\treturn this.unpack_int64();\n\t\t\tcase 0xd4:\n\t\t\t\treturn undefined;\n\t\t\tcase 0xd5:\n\t\t\t\treturn undefined;\n\t\t\tcase 0xd6:\n\t\t\t\treturn undefined;\n\t\t\tcase 0xd7:\n\t\t\t\treturn undefined;\n\t\t\tcase 0xd8:\n\t\t\t\tsize = this.unpack_uint16();\n\t\t\t\treturn this.unpack_string(size);\n\t\t\tcase 0xd9:\n\t\t\t\tsize = this.unpack_uint32();\n\t\t\t\treturn this.unpack_string(size);\n\t\t\tcase 0xda:\n\t\t\t\tsize = this.unpack_uint16();\n\t\t\t\treturn this.unpack_raw(size);\n\t\t\tcase 0xdb:\n\t\t\t\tsize = this.unpack_uint32();\n\t\t\t\treturn this.unpack_raw(size);\n\t\t\tcase 0xdc:\n\t\t\t\tsize = this.unpack_uint16();\n\t\t\t\treturn this.unpack_array(size);\n\t\t\tcase 0xdd:\n\t\t\t\tsize = this.unpack_uint32();\n\t\t\t\treturn this.unpack_array(size);\n\t\t\tcase 0xde:\n\t\t\t\tsize = this.unpack_uint16();\n\t\t\t\treturn this.unpack_map(size);\n\t\t\tcase 0xdf:\n\t\t\t\tsize = this.unpack_uint32();\n\t\t\t\treturn this.unpack_map(size);\n\t\t}\n\t}\n\n\tunpack_uint8() {\n\t\tconst byte = this.dataView[this.index] & 0xff;\n\t\tthis.index++;\n\t\treturn byte;\n\t}\n\n\tunpack_uint16() {\n\t\tconst bytes = this.read(2);\n\t\tconst uint16 = (bytes[0] & 0xff) * 256 + (bytes[1] & 0xff);\n\t\tthis.index += 2;\n\t\treturn uint16;\n\t}\n\n\tunpack_uint32() {\n\t\tconst bytes = this.read(4);\n\t\tconst uint32 =\n\t\t\t((bytes[0] * 256 + bytes[1]) * 256 + bytes[2]) * 256 + bytes[3];\n\t\tthis.index += 4;\n\t\treturn uint32;\n\t}\n\n\tunpack_uint64() {\n\t\tconst bytes = this.read(8);\n\t\tconst uint64 =\n\t\t\t((((((bytes[0] * 256 + bytes[1]) * 256 + bytes[2]) * 256 + bytes[3]) *\n\t\t\t\t256 +\n\t\t\t\tbytes[4]) *\n\t\t\t\t256 +\n\t\t\t\tbytes[5]) *\n\t\t\t\t256 +\n\t\t\t\tbytes[6]) *\n\t\t\t\t256 +\n\t\t\tbytes[7];\n\t\tthis.index += 8;\n\t\treturn uint64;\n\t}\n\n\tunpack_int8() {\n\t\tconst uint8 = this.unpack_uint8();\n\t\treturn uint8 < 0x80 ? uint8 : uint8 - (1 << 8);\n\t}\n\n\tunpack_int16() {\n\t\tconst uint16 = this.unpack_uint16();\n\t\treturn uint16 < 0x8000 ? uint16 : uint16 - (1 << 16);\n\t}\n\n\tunpack_int32() {\n\t\tconst uint32 = this.unpack_uint32();\n\t\treturn uint32 < 2 ** 31 ? uint32 : uint32 - 2 ** 32;\n\t}\n\n\tunpack_int64() {\n\t\tconst uint64 = this.unpack_uint64();\n\t\treturn uint64 < 2 ** 63 ? uint64 : uint64 - 2 ** 64;\n\t}\n\n\tunpack_raw(size: number) {\n\t\tif (this.length < this.index + size) {\n\t\t\tthrow new Error(\n\t\t\t\t`BinaryPackFailure: index is out of range ${this.index} ${size} ${this.length}`,\n\t\t\t);\n\t\t}\n\t\tconst buf = this.dataBuffer.slice(this.index, this.index + size);\n\t\tthis.index += size;\n\n\t\treturn buf;\n\t}\n\n\tunpack_string(size: number) {\n\t\tconst bytes = this.read(size);\n\t\tlet i = 0;\n\t\tlet str = \"\";\n\t\tlet c;\n\t\tlet code;\n\n\t\twhile (i < size) {\n\t\t\tc = bytes[i];\n\t\t\t// The length of a UTF-8 sequence is specified in the first byte:\n\t\t\t// 0xxxxxxx means length 1,\n\t\t\t// 110xxxxx means length 2,\n\t\t\t// 1110xxxx means length 3,\n\t\t\t// 11110xxx means length 4.\n\t\t\t// 10xxxxxx is for non-initial bytes.\n\t\t\tif (c < 0xa0) {\n\t\t\t\t// One-byte sequence: bits 0xxxxxxx\n\t\t\t\tcode = c;\n\t\t\t\ti++;\n\t\t\t} else if ((c ^ 0xc0) < 0x20) {\n\t\t\t\t// Two-byte sequence: bits 110xxxxx 10xxxxxx\n\t\t\t\tcode = ((c & 0x1f) << 6) | (bytes[i + 1] & 0x3f);\n\t\t\t\ti += 2;\n\t\t\t} else if ((c ^ 0xe0) < 0x10) {\n\t\t\t\t// Three-byte sequence: bits 1110xxxx 10xxxxxx 10xxxxxx\n\t\t\t\tcode =\n\t\t\t\t\t((c & 0x0f) << 12) |\n\t\t\t\t\t((bytes[i + 1] & 0x3f) << 6) |\n\t\t\t\t\t(bytes[i + 2] & 0x3f);\n\t\t\t\ti += 3;\n\t\t\t} else {\n\t\t\t\t// Four-byte sequence: bits 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx\n\t\t\t\tcode =\n\t\t\t\t\t((c & 0x07) << 18) |\n\t\t\t\t\t((bytes[i + 1] & 0x3f) << 12) |\n\t\t\t\t\t((bytes[i + 2] & 0x3f) << 6) |\n\t\t\t\t\t(bytes[i + 3] & 0x3f);\n\t\t\t\ti += 4;\n\t\t\t}\n\t\t\tstr += String.fromCodePoint(code);\n\t\t}\n\n\t\tthis.index += size;\n\t\treturn str;\n\t}\n\n\tunpack_array(size: number) {\n\t\tconst objects = new Array<Unpackable>(size);\n\t\tfor (let i = 0; i < size; i++) {\n\t\t\tobjects[i] = this.unpack();\n\t\t}\n\t\treturn objects;\n\t}\n\n\tunpack_map(size: number) {\n\t\tconst map: { [key: string]: Unpackable } = {};\n\t\tfor (let i = 0; i < size; i++) {\n\t\t\tconst key = this.unpack() as string;\n\t\t\tmap[key] = this.unpack();\n\t\t}\n\t\treturn map;\n\t}\n\n\tunpack_float() {\n\t\tconst uint32 = this.unpack_uint32();\n\t\tconst sign = uint32 >> 31;\n\t\tconst exp = ((uint32 >> 23) & 0xff) - 127;\n\t\tconst fraction = (uint32 & 0x7fffff) | 0x800000;\n\t\treturn (sign === 0 ? 1 : -1) * fraction * 2 ** (exp - 23);\n\t}\n\n\tunpack_double() {\n\t\tconst h32 = this.unpack_uint32();\n\t\tconst l32 = this.unpack_uint32();\n\t\tconst sign = h32 >> 31;\n\t\tconst exp = ((h32 >> 20) & 0x7ff) - 1023;\n\t\tconst hfrac = (h32 & 0xfffff) | 0x100000;\n\t\tconst frac = hfrac * 2 ** (exp - 20) + l32 * 2 ** (exp - 52);\n\t\treturn (sign === 0 ? 1 : -1) * frac;\n\t}\n\n\tread(length: number) {\n\t\tconst j = this.index;\n\t\tif (j + length <= this.length) {\n\t\t\treturn this.dataView.subarray(j, j + length);\n\t\t} else {\n\t\t\tthrow new Error(\"BinaryPackFailure: read index out of range\");\n\t\t}\n\t}\n}\n\nexport class Packer {\n\tprivate _bufferBuilder = new BufferBuilder();\n\tprivate _textEncoder = new TextEncoder();\n\n\tgetBuffer() {\n\t\treturn this._bufferBuilder.toArrayBuffer();\n\t}\n\n\tpack(value: Packable) {\n\t\tif (typeof value === \"string\") {\n\t\t\tthis.pack_string(value);\n\t\t} else if (typeof value === \"number\") {\n\t\t\tif (Math.floor(value) === value) {\n\t\t\t\tthis.pack_integer(value);\n\t\t\t} else {\n\t\t\t\tthis.pack_double(value);\n\t\t\t}\n\t\t} else if (typeof value === \"boolean\") {\n\t\t\tif (value === true) {\n\t\t\t\tthis._bufferBuilder.append(0xc3);\n\t\t\t} else if (value === false) {\n\t\t\t\tthis._bufferBuilder.append(0xc2);\n\t\t\t}\n\t\t} else if (value === undefined) {\n\t\t\tthis._bufferBuilder.append(0xc0);\n\t\t} else if (typeof value === \"object\") {\n\t\t\tif (value === null) {\n\t\t\t\tthis._bufferBuilder.append(0xc0);\n\t\t\t} else {\n\t\t\t\tconst constructor = value.constructor;\n\t\t\t\tif (value instanceof Array) {\n\t\t\t\t\tconst res = this.pack_array(value);\n\t\t\t\t\tif (res instanceof Promise) {\n\t\t\t\t\t\treturn res.then(() => this._bufferBuilder.flush());\n\t\t\t\t\t}\n\t\t\t\t} else if (value instanceof ArrayBuffer) {\n\t\t\t\t\tthis.pack_bin(new Uint8Array(value));\n\t\t\t\t} else if (\"BYTES_PER_ELEMENT\" in value) {\n\t\t\t\t\tconst v = value as unknown as DataView;\n\t\t\t\t\tthis.pack_bin(new Uint8Array(v.buffer, v.byteOffset, v.byteLength));\n\t\t\t\t} else if (value instanceof Date) {\n\t\t\t\t\tthis.pack_string(value.toString());\n\t\t\t\t} else if (value instanceof Blob) {\n\t\t\t\t\treturn value.arrayBuffer().then((buffer) => {\n\t\t\t\t\t\tthis.pack_bin(new Uint8Array(buffer));\n\t\t\t\t\t\tthis._bufferBuilder.flush();\n\t\t\t\t\t});\n\t\t\t\t\t// this.pack_bin(new Uint8Array(await value.arrayBuffer()));\n\t\t\t\t} else if (\n\t\t\t\t\tconstructor == Object ||\n\t\t\t\t\tconstructor.toString().startsWith(\"class\")\n\t\t\t\t) {\n\t\t\t\t\tconst res = this.pack_object(value);\n\t\t\t\t\tif (res instanceof Promise) {\n\t\t\t\t\t\treturn res.then(() => this._bufferBuilder.flush());\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error(`Type \"${constructor.toString()}\" not yet supported`);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tthrow new Error(`Type \"${typeof value}\" not yet supported`);\n\t\t}\n\t\tthis._bufferBuilder.flush();\n\t}\n\n\tpack_bin(blob: Uint8Array) {\n\t\tconst length = blob.length;\n\n\t\tif (length <= 0x0f) {\n\t\t\tthis.pack_uint8(0xa0 + length);\n\t\t} else if (length <= 0xffff) {\n\t\t\tthis._bufferBuilder.append(0xda);\n\t\t\tthis.pack_uint16(length);\n\t\t} else if (length <= 0xffffffff) {\n\t\t\tthis._bufferBuilder.append(0xdb);\n\t\t\tthis.pack_uint32(length);\n\t\t} else {\n\t\t\tthrow new Error(\"Invalid length\");\n\t\t}\n\t\tthis._bufferBuilder.append_buffer(blob);\n\t}\n\n\tpack_string(str: string) {\n\t\tconst encoded = this._textEncoder.encode(str);\n\t\tconst length = encoded.length;\n\n\t\tif (length <= 0x0f) {\n\t\t\tthis.pack_uint8(0xb0 + length);\n\t\t} else if (length <= 0xffff) {\n\t\t\tthis._bufferBuilder.append(0xd8);\n\t\t\tthis.pack_uint16(length);\n\t\t} else if (length <= 0xffffffff) {\n\t\t\tthis._bufferBuilder.append(0xd9);\n\t\t\tthis.pack_uint32(length);\n\t\t} else {\n\t\t\tthrow new Error(\"Invalid length\");\n\t\t}\n\t\tthis._bufferBuilder.append_buffer(encoded);\n\t}\n\n\tpack_array(ary: Packable[]) {\n\t\tconst length = ary.length;\n\t\tif (length <= 0x0f) {\n\t\t\tthis.pack_uint8(0x90 + length);\n\t\t} else if (length <= 0xffff) {\n\t\t\tthis._bufferBuilder.append(0xdc);\n\t\t\tthis.pack_uint16(length);\n\t\t} else if (length <= 0xffffffff) {\n\t\t\tthis._bufferBuilder.append(0xdd);\n\t\t\tthis.pack_uint32(length);\n\t\t} else {\n\t\t\tthrow new Error(\"Invalid length\");\n\t\t}\n\n\t\tconst packNext = (index: number): Promise<void> | void => {\n\t\t\tif (index < length) {\n\t\t\t\tconst res = this.pack(ary[index]);\n\t\t\t\tif (res instanceof Promise) {\n\t\t\t\t\treturn res.then(() => packNext(index + 1));\n\t\t\t\t}\n\t\t\t\treturn packNext(index + 1);\n\t\t\t}\n\t\t};\n\n\t\treturn packNext(0);\n\t}\n\n\tpack_integer(num: number) {\n\t\tif (num >= -0x20 && num <= 0x7f) {\n\t\t\tthis._bufferBuilder.append(num & 0xff);\n\t\t} else if (num >= 0x00 && num <= 0xff) {\n\t\t\tthis._bufferBuilder.append(0xcc);\n\t\t\tthis.pack_uint8(num);\n\t\t} else if (num >= -0x80 && num <= 0x7f) {\n\t\t\tthis._bufferBuilder.append(0xd0);\n\t\t\tthis.pack_int8(num);\n\t\t} else if (num >= 0x0000 && num <= 0xffff) {\n\t\t\tthis._bufferBuilder.append(0xcd);\n\t\t\tthis.pack_uint16(num);\n\t\t} else if (num >= -0x8000 && num <= 0x7fff) {\n\t\t\tthis._bufferBuilder.append(0xd1);\n\t\t\tthis.pack_int16(num);\n\t\t} else if (num >= 0x00000000 && num <= 0xffffffff) {\n\t\t\tthis._bufferBuilder.append(0xce);\n\t\t\tthis.pack_uint32(num);\n\t\t} else if (num >= -0x80000000 && num <= 0x7fffffff) {\n\t\t\tthis._bufferBuilder.append(0xd2);\n\t\t\tthis.pack_int32(num);\n\t\t} else if (num >= -0x8000000000000000 && num <= 0x7fffffffffffffff) {\n\t\t\tthis._bufferBuilder.append(0xd3);\n\t\t\tthis.pack_int64(num);\n\t\t} else if (num >= 0x0000000000000000 && num <= 0xffffffffffffffff) {\n\t\t\tthis._bufferBuilder.append(0xcf);\n\t\t\tthis.pack_uint64(num);\n\t\t} else {\n\t\t\tthrow new Error(\"Invalid integer\");\n\t\t}\n\t}\n\n\tpack_double(num: number) {\n\t\tlet sign = 0;\n\t\tif (num < 0) {\n\t\t\tsign = 1;\n\t\t\tnum = -num;\n\t\t}\n\t\tconst exp = Math.floor(Math.log(num) / Math.LN2);\n\t\tconst frac0 = num / 2 ** exp - 1;\n\t\tconst frac1 = Math.floor(frac0 * 2 ** 52);\n\t\tconst b32 = 2 ** 32;\n\t\tconst h32 =\n\t\t\t(sign << 31) | ((exp + 1023) << 20) | ((frac1 / b32) & 0x0fffff);\n\t\tconst l32 = frac1 % b32;\n\t\tthis._bufferBuilder.append(0xcb);\n\t\tthis.pack_int32(h32);\n\t\tthis.pack_int32(l32);\n\t}\n\n\tpack_object(obj: { [key: string]: Packable }) {\n\t\tconst keys = Object.keys(obj);\n\t\tconst length = keys.length;\n\t\tif (length <= 0x0f) {\n\t\t\tthis.pack_uint8(0x80 + length);\n\t\t} else if (length <= 0xffff) {\n\t\t\tthis._bufferBuilder.append(0xde);\n\t\t\tthis.pack_uint16(length);\n\t\t} else if (length <= 0xffffffff) {\n\t\t\tthis._bufferBuilder.append(0xdf);\n\t\t\tthis.pack_uint32(length);\n\t\t} else {\n\t\t\tthrow new Error(\"Invalid length\");\n\t\t}\n\n\t\tconst packNext = (index: number): Promise<void> | void => {\n\t\t\tif (index < keys.length) {\n\t\t\t\tconst prop = keys[index];\n\t\t\t\t// eslint-disable-next-line no-prototype-builtins\n\t\t\t\tif (obj.hasOwnProperty(prop)) {\n\t\t\t\t\tthis.pack(prop);\n\t\t\t\t\tconst res = this.pack(obj[prop]);\n\t\t\t\t\tif (res instanceof Promise) {\n\t\t\t\t\t\treturn res.then(() => packNext(index + 1));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn packNext(index + 1);\n\t\t\t}\n\t\t};\n\n\t\treturn packNext(0);\n\t}\n\n\tpack_uint8(num: number) {\n\t\tthis._bufferBuilder.append(num);\n\t}\n\n\tpack_uint16(num: number) {\n\t\tthis._bufferBuilder.append(num >> 8);\n\t\tthis._bufferBuilder.append(num & 0xff);\n\t}\n\n\tpack_uint32(num: number) {\n\t\tconst n = num & 0xffffffff;\n\t\tthis._bufferBuilder.append((n & 0xff000000) >>> 24);\n\t\tthis._bufferBuilder.append((n & 0x00ff0000) >>> 16);\n\t\tthis._bufferBuilder.append((n & 0x0000ff00) >>> 8);\n\t\tthis._bufferBuilder.append(n & 0x000000ff);\n\t}\n\n\tpack_uint64(num: number) {\n\t\tconst high = num / 2 ** 32;\n\t\tconst low = num % 2 ** 32;\n\t\tthis._bufferBuilder.append((high & 0xff000000) >>> 24);\n\t\tthis._bufferBuilder.append((high & 0x00ff0000) >>> 16);\n\t\tthis._bufferBuilder.append((high & 0x0000ff00) >>> 8);\n\t\tthis._bufferBuilder.append(high & 0x000000ff);\n\t\tthis._bufferBuilder.append((low & 0xff000000) >>> 24);\n\t\tthis._bufferBuilder.append((low & 0x00ff0000) >>> 16);\n\t\tthis._bufferBuilder.append((low & 0x0000ff00) >>> 8);\n\t\tthis._bufferBuilder.append(low & 0x000000ff);\n\t}\n\n\tpack_int8(num: number) {\n\t\tthis._bufferBuilder.append(num & 0xff);\n\t}\n\n\tpack_int16(num: number) {\n\t\tthis._bufferBuilder.append((num & 0xff00) >> 8);\n\t\tthis._bufferBuilder.append(num & 0xff);\n\t}\n\n\tpack_int32(num: number) {\n\t\tthis._bufferBuilder.append((num >>> 24) & 0xff);\n\t\tthis._bufferBuilder.append((num & 0x00ff0000) >>> 16);\n\t\tthis._bufferBuilder.append((num & 0x0000ff00) >>> 8);\n\t\tthis._bufferBuilder.append(num & 0x000000ff);\n\t}\n\n\tpack_int64(num: number) {\n\t\tconst high = Math.floor(num / 2 ** 32);\n\t\tconst low = num % 2 ** 32;\n\t\tthis._bufferBuilder.append((high & 0xff000000) >>> 24);\n\t\tthis._bufferBuilder.append((high & 0x00ff0000) >>> 16);\n\t\tthis._bufferBuilder.append((high & 0x0000ff00) >>> 8);\n\t\tthis._bufferBuilder.append(high & 0x000000ff);\n\t\tthis._bufferBuilder.append((low & 0xff000000) >>> 24);\n\t\tthis._bufferBuilder.append((low & 0x00ff0000) >>> 16);\n\t\tthis._bufferBuilder.append((low & 0x0000ff00) >>> 8);\n\t\tthis._bufferBuilder.append(low & 0x000000ff);\n\t}\n}\n", "class BufferBuilder {\n\tprivate _pieces: number[];\n\tprivate readonly _parts: ArrayBufferView[];\n\n\tconstructor() {\n\t\tthis._pieces = [];\n\t\tthis._parts = [];\n\t}\n\n\tappend_buffer(data: ArrayBufferView) {\n\t\tthis.flush();\n\t\tthis._parts.push(data);\n\t}\n\n\tappend(data: number) {\n\t\tthis._pieces.push(data);\n\t}\n\n\tflush() {\n\t\tif (this._pieces.length > 0) {\n\t\t\tconst buf = new Uint8Array(this._pieces);\n\t\t\tthis._parts.push(buf);\n\t\t\tthis._pieces = [];\n\t\t}\n\t}\n\n\tprivate encoder = new TextEncoder();\n\n\tpublic toArrayBuffer() {\n\t\tconst buffer = [];\n\t\tfor (const part of this._parts) {\n\t\t\tbuffer.push(part);\n\t\t}\n\t\treturn concatArrayBuffers(buffer).buffer;\n\t}\n}\n\nexport { BufferBuilder };\n\nfunction concatArrayBuffers(bufs: ArrayBufferView[]) {\n\tlet size = 0;\n\tfor (const buf of bufs) {\n\t\tsize += buf.byteLength;\n\t}\n\tconst result = new Uint8Array(size);\n\tlet offset = 0;\n\tfor (const buf of bufs) {\n\t\tconst view = new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);\n\t\tresult.set(view, offset);\n\t\toffset += buf.byteLength;\n\t}\n\treturn result;\n}\n", "/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.compactObject = compactObject;\nexports.deprecated = deprecated;\nexports.detectBrowser = detectBrowser;\nexports.disableLog = disableLog;\nexports.disableWarnings = disableWarnings;\nexports.extractVersion = extractVersion;\nexports.filterStats = filterStats;\nexports.log = log;\nexports.walkStats = walkStats;\nexports.wrapPeerConnectionEvent = wrapPeerConnectionEvent;\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nvar logDisabled_ = true;\nvar deprecationWarnings_ = true;\n\n/**\n * Extract browser version out of the provided user agent string.\n *\n * @param {!string} uastring userAgent string.\n * @param {!string} expr Regular expression used as match criteria.\n * @param {!number} pos position in the version string to be returned.\n * @return {!number} browser version.\n */\nfunction extractVersion(uastring, expr, pos) {\n var match = uastring.match(expr);\n return match && match.length >= pos && parseFloat(match[pos], 10);\n}\n\n// Wraps the peerconnection event eventNameToWrap in a function\n// which returns the modified event object (or false to prevent\n// the event).\nfunction wrapPeerConnectionEvent(window, eventNameToWrap, wrapper) {\n if (!window.RTCPeerConnection) {\n return;\n }\n var proto = window.RTCPeerConnection.prototype;\n var nativeAddEventListener = proto.addEventListener;\n proto.addEventListener = function (nativeEventName, cb) {\n if (nativeEventName !== eventNameToWrap) {\n return nativeAddEventListener.apply(this, arguments);\n }\n var wrappedCallback = function wrappedCallback(e) {\n var modifiedEvent = wrapper(e);\n if (modifiedEvent) {\n if (cb.handleEvent) {\n cb.handleEvent(modifiedEvent);\n } else {\n cb(modifiedEvent);\n }\n }\n };\n this._eventMap = this._eventMap || {};\n if (!this._eventMap[eventNameToWrap]) {\n this._eventMap[eventNameToWrap] = new Map();\n }\n this._eventMap[eventNameToWrap].set(cb, wrappedCallback);\n return nativeAddEventListener.apply(this, [nativeEventName, wrappedCallback]);\n };\n var nativeRemoveEventListener = proto.removeEventListener;\n proto.removeEventListener = function (nativeEventName, cb) {\n if (nativeEventName !== eventNameToWrap || !this._eventMap || !this._eventMap[eventNameToWrap]) {\n return nativeRemoveEventListener.apply(this, arguments);\n }\n if (!this._eventMap[eventNameToWrap].has(cb)) {\n return nativeRemoveEventListener.apply(this, arguments);\n }\n var unwrappedCb = this._eventMap[eventNameToWrap].get(cb);\n this._eventMap[eventNameToWrap][\"delete\"](cb);\n if (this._eventMap[eventNameToWrap].size === 0) {\n delete this._eventMap[eventNameToWrap];\n }\n if (Object.keys(this._eventMap).length === 0) {\n delete this._eventMap;\n }\n return nativeRemoveEventListener.apply(this, [nativeEventName, unwrappedCb]);\n };\n Object.defineProperty(proto, 'on' + eventNameToWrap, {\n get: function get() {\n return this['_on' + eventNameToWrap];\n },\n set: function set(cb) {\n if (this['_on' + eventNameToWrap]) {\n this.removeEventListener(eventNameToWrap, this['_on' + eventNameToWrap]);\n delete this['_on' + eventNameToWrap];\n }\n if (cb) {\n this.addEventListener(eventNameToWrap, this['_on' + eventNameToWrap] = cb);\n }\n },\n enumerable: true,\n configurable: true\n });\n}\nfunction disableLog(bool) {\n if (typeof bool !== 'boolean') {\n return new Error('Argument type: ' + _typeof(bool) + '. Please use a boolean.');\n }\n logDisabled_ = bool;\n return bool ? 'adapter.js logging disabled' : 'adapter.js logging enabled';\n}\n\n/**\n * Disable or enable deprecation warnings\n * @param {!boolean} bool set to true to disable warnings.\n */\nfunction disableWarnings(bool) {\n if (typeof bool !== 'boolean') {\n return new Error('Argument type: ' + _typeof(bool) + '. Please use a boolean.');\n }\n deprecationWarnings_ = !bool;\n return 'adapter.js deprecation warnings ' + (bool ? 'disabled' : 'enabled');\n}\nfunction log() {\n if ((typeof window === \"undefined\" ? \"undefined\" : _typeof(window)) === 'object') {\n if (logDisabled_) {\n return;\n }\n if (typeof console !== 'undefined' && typeof console.log === 'function') {\n console.log.apply(console, arguments);\n }\n }\n}\n\n/**\n * Shows a deprecation warning suggesting the modern and spec-compatible API.\n */\nfunction deprecated(oldMethod, newMethod) {\n if (!deprecationWarnings_) {\n return;\n }\n console.warn(oldMethod + ' is deprecated, please use ' + newMethod + ' instead.');\n}\n\n/**\n * Browser detector.\n *\n * @return {object} result containing browser and version\n * properties.\n */\nfunction detectBrowser(window) {\n // Returned result object.\n var result = {\n browser: null,\n version: null\n };\n\n // Fail early if it's not a browser\n if (typeof window === 'undefined' || !window.navigator || !window.navigator.userAgent) {\n result.browser = 'Not a browser.';\n return result;\n }\n var navigator = window.navigator;\n\n // Prefer navigator.userAgentData.\n if (navigator.userAgentData && navigator.userAgentData.brands) {\n var chromium = navigator.userAgentData.brands.find(function (brand) {\n return brand.brand === 'Chromium';\n });\n if (chromium) {\n return {\n browser: 'chrome',\n version: parseInt(chromium.version, 10)\n };\n }\n }\n if (navigator.mozGetUserMedia) {\n // Firefox.\n result.browser = 'firefox';\n result.version = parseInt(extractVersion(navigator.userAgent, /Firefox\\/(\\d+)\\./, 1));\n } else if (navigator.webkitGetUserMedia || window.isSecureContext === false && window.webkitRTCPeerConnection) {\n // Chrome, Chromium, Webview, Opera.\n // Version matches Chrome/WebRTC version.\n // Chrome 74 removed webkitGetUserMedia on http as well so we need the\n // more complicated fallback to webkitRTCPeerConnection.\n result.browser = 'chrome';\n result.version = parseInt(extractVersion(navigator.userAgent, /Chrom(e|ium)\\/(\\d+)\\./, 2)) || null;\n } else if (window.RTCPeerConnection && navigator.userAgent.match(/AppleWebKit\\/(\\d+)\\./)) {\n // Safari.\n result.browser = 'safari';\n result.version = parseInt(extractVersion(navigator.userAgent, /AppleWebKit\\/(\\d+)\\./, 1));\n result.supportsUnifiedPlan = window.RTCRtpTransceiver && 'currentDirection' in window.RTCRtpTransceiver.prototype;\n // Only for internal usage.\n result._safariVersion = extractVersion(navigator.userAgent, /Version\\/(\\d+(\\.?\\d+))/, 1);\n } else {\n // Default fallthrough: not supported.\n result.browser = 'Not a supported browser.';\n return result;\n }\n return result;\n}\n\n/**\n * Checks if something is an object.\n *\n * @param {*} val The something you want to check.\n * @return true if val is an object, false otherwise.\n */\nfunction isObject(val) {\n return Object.prototype.toString.call(val) === '[object Object]';\n}\n\n/**\n * Remove all empty objects and undefined values\n * from a nested object -- an enhanced and vanilla version\n * of Lodash's `compact`.\n */\nfunction compactObject(data) {\n if (!isObject(data)) {\n return data;\n }\n return Object.keys(data).reduce(function (accumulator, key) {\n var isObj = isObject(data[key]);\n var value = isObj ? compactObject(data[key]) : data[key];\n var isEmptyObject = isObj && !Object.keys(value).length;\n if (value === undefined || isEmptyObject) {\n return accumulator;\n }\n return Object.assign(accumulator, _defineProperty({}, key, value));\n }, {});\n}\n\n/* iterates the stats graph recursively. */\nfunction walkStats(stats, base, resultSet) {\n if (!base || resultSet.has(base.id)) {\n return;\n }\n resultSet.set(base.id, base);\n Object.keys(base).forEach(function (name) {\n if (name.endsWith('Id')) {\n walkStats(stats, stats.get(base[name]), resultSet);\n } else if (name.endsWith('Ids')) {\n base[name].forEach(function (id) {\n walkStats(stats, stats.get(id), resultSet);\n });\n }\n });\n}\n\n/* filter getStats for a sender/receiver track. */\nfunction filterStats(result, track, outbound) {\n var streamStatsType = outbound ? 'outbound-rtp' : 'inbound-rtp';\n var filteredResult = new Map();\n if (track === null) {\n return filteredResult;\n }\n var trackStats = [];\n result.forEach(function (value) {\n if (value.type === 'track' && value.trackIdentifier === track.id) {\n trackStats.push(value);\n }\n });\n trackStats.forEach(function (trackStat) {\n result.forEach(function (stats) {\n if (stats.type === streamStatsType && stats.trackId === trackStat.id) {\n walkStats(result, stats, filteredResult);\n }\n });\n });\n return filteredResult;\n}\n", "/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.shimGetUserMedia = shimGetUserMedia;\nvar utils = _interopRequireWildcard(require(\"../utils.js\"));\nfunction _interopRequireWildcard(e, t) { if (\"function\" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, \"default\": e }; if (null === e || \"object\" != _typeof(e) && \"function\" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) \"default\" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nvar logging = utils.log;\nfunction shimGetUserMedia(window, browserDetails) {\n var navigator = window && window.navigator;\n if (!navigator.mediaDevices) {\n return;\n }\n var constraintsToChrome_ = function constraintsToChrome_(c) {\n if (_typeof(c) !== 'object' || c.mandatory || c.optional) {\n return c;\n }\n var cc = {};\n Object.keys(c).forEach(function (key) {\n if (key === 'require' || key === 'advanced' || key === 'mediaSource') {\n return;\n }\n var r = _typeof(c[key]) === 'object' ? c[key] : {\n ideal: c[key]\n };\n if (r.exact !== undefined && typeof r.exact === 'number') {\n r.min = r.max = r.exact;\n }\n var oldname_ = function oldname_(prefix, name) {\n if (prefix) {\n return prefix + name.charAt(0).toUpperCase() + name.slice(1);\n }\n return name === 'deviceId' ? 'sourceId' : name;\n };\n if (r.ideal !== undefined) {\n cc.optional = cc.optional || [];\n var oc = {};\n if (typeof r.ideal === 'number') {\n oc[oldname_('min', key)] = r.ideal;\n cc.optional.push(oc);\n oc = {};\n oc[oldname_('max', key)] = r.ideal;\n cc.optional.push(oc);\n } else {\n oc[oldname_('', key)] = r.ideal;\n cc.optional.push(oc);\n }\n }\n if (r.exact !== undefined && typeof r.exact !== 'number') {\n cc.mandatory = cc.mandatory || {};\n cc.mandatory[oldname_('', key)] = r.exact;\n } else {\n ['min', 'max'].forEach(function (mix) {\n if (r[mix] !== undefined) {\n cc.mandatory = cc.mandatory || {};\n cc.mandatory[oldname_(mix, key)] = r[mix];\n }\n });\n }\n });\n if (c.advanced) {\n cc.optional = (cc.optional || []).concat(c.advanced);\n }\n return cc;\n };\n var shimConstraints_ = function shimConstraints_(constraints, func) {\n if (browserDetails.version >= 61) {\n return func(constraints);\n }\n constraints = JSON.parse(JSON.stringify(constraints));\n if (constraints && _typeof(constraints.audio) === 'object') {\n var remap = function remap(obj, a, b) {\n if (a in obj && !(b in obj)) {\n obj[b] = obj[a];\n delete obj[a];\n }\n };\n constraints = JSON.parse(JSON.stringify(constraints));\n remap(constraints.audio, 'autoGainControl', 'googAutoGainControl');\n remap(constraints.audio, 'noiseSuppression', 'googNoiseSuppression');\n constraints.audio = constraintsToChrome_(constraints.audio);\n }\n if (constraints && _typeof(constraints.video) === 'object') {\n // Shim facingMode for mobile & surface pro.\n var face = constraints.video.facingMode;\n face = face && (_typeof(face) === 'object' ? face : {\n ideal: face\n });\n var getSupportedFacingModeLies = browserDetails.version < 66;\n if (face && (face.exact === 'user' || face.exact === 'environment' || face.ideal === 'user' || face.ideal === 'environment') && !(navigator.mediaDevices.getSupportedConstraints && navigator.mediaDevices.getSupportedConstraints().facingMode && !getSupportedFacingModeLies)) {\n delete constraints.video.facingMode;\n var matches;\n if (face.exact === 'environment' || face.ideal === 'environment') {\n matches = ['back', 'rear'];\n } else if (face.exact === 'user' || face.ideal === 'user') {\n matches = ['front'];\n }\n if (matches) {\n // Look for matches in label, or use last cam for back (typical).\n return navigator.mediaDevices.enumerateDevices().then(function (devices) {\n devices = devices.filter(function (d) {\n return d.kind === 'videoinput';\n });\n var dev = devices.find(function (d) {\n return matches.some(function (match) {\n return d.label.toLowerCase().includes(match);\n });\n });\n if (!dev && devices.length && matches.includes('back')) {\n dev = devices[devices.length - 1]; // more likely the back cam\n }\n if (dev) {\n constraints.video.deviceId = face.exact ? {\n exact: dev.deviceId\n } : {\n ideal: dev.deviceId\n };\n }\n constraints.video = constraintsToChrome_(constraints.video);\n logging('chrome: ' + JSON.stringify(constraints));\n return func(constraints);\n });\n }\n }\n constraints.video = constraintsToChrome_(constraints.video);\n }\n logging('chrome: ' + JSON.stringify(constraints));\n return func(constraints);\n };\n var shimError_ = function shimError_(e) {\n if (browserDetails.version >= 64) {\n return e;\n }\n return {\n name: {\n PermissionDeniedError: 'NotAllowedError',\n PermissionDismissedError: 'NotAllowedError',\n InvalidStateError: 'NotAllowedError',\n DevicesNotFoundError: 'NotFoundError',\n ConstraintNotSatisfiedError: 'OverconstrainedError',\n TrackStartError: 'NotReadableError',\n MediaDeviceFailedDueToShutdown: 'NotAllowedError',\n MediaDeviceKillSwitchOn: 'NotAllowedError',\n TabCaptureError: 'AbortError',\n ScreenCaptureError: 'AbortError',\n DeviceCaptureError: 'AbortError'\n }[e.name] || e.name,\n message: e.message,\n constraint: e.constraint || e.constraintName,\n toString: function toString() {\n return this.name + (this.message && ': ') + this.message;\n }\n };\n };\n var getUserMedia_ = function getUserMedia_(constraints, onSuccess, onError) {\n shimConstraints_(constraints, function (c) {\n navigator.webkitGetUserMedia(c, onSuccess, function (e) {\n if (onError) {\n onError(shimError_(e));\n }\n });\n });\n };\n navigator.getUserMedia = getUserMedia_.bind(navigator);\n\n // Even though Chrome 45 has navigator.mediaDevices and a getUserMedia\n // function which returns a Promise, it does not accept spec-style\n // constraints.\n if (navigator.mediaDevices.getUserMedia) {\n var origGetUserMedia = navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);\n navigator.mediaDevices.getUserMedia = function (cs) {\n return shimConstraints_(cs, function (c) {\n return origGetUserMedia(c).then(function (stream) {\n if (c.audio && !stream.getAudioTracks().length || c.video && !stream.getVideoTracks().length) {\n stream.getTracks().forEach(function (track) {\n track.stop();\n });\n throw new DOMException('', 'NotFoundError');\n }\n return stream;\n }, function (e) {\n return Promise.reject(shimError_(e));\n });\n });\n };\n }\n}\n", "/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.fixNegotiationNeeded = fixNegotiationNeeded;\nexports.shimAddTrackRemoveTrack = shimAddTrackRemoveTrack;\nexports.shimAddTrackRemoveTrackWithNative = shimAddTrackRemoveTrackWithNative;\nexports.shimGetSendersWithDtmf = shimGetSendersWithDtmf;\nObject.defineProperty(exports, \"shimGetUserMedia\", {\n enumerable: true,\n get: function get() {\n return _getusermedia.shimGetUserMedia;\n }\n});\nexports.shimMediaStream = shimMediaStream;\nexports.shimOnTrack = shimOnTrack;\nexports.shimPeerConnection = shimPeerConnection;\nexports.shimSenderReceiverGetStats = shimSenderReceiverGetStats;\nvar utils = _interopRequireWildcard(require(\"../utils.js\"));\nvar _getusermedia = require(\"./getusermedia\");\nfunction _interopRequireWildcard(e, t) { if (\"function\" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, \"default\": e }; if (null === e || \"object\" != _typeof(e) && \"function\" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) \"default\" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction shimMediaStream(window) {\n window.MediaStream = window.MediaStream || window.webkitMediaStream;\n}\nfunction shimOnTrack(window) {\n if (_typeof(window) === 'object' && window.RTCPeerConnection && !('ontrack' in window.RTCPeerConnection.prototype)) {\n Object.defineProperty(window.RTCPeerConnection.prototype, 'ontrack', {\n get: function get() {\n return this._ontrack;\n },\n set: function set(f) {\n if (this._ontrack) {\n this.removeEventListener('track', this._ontrack);\n }\n this.addEventListener('track', this._ontrack = f);\n },\n enumerable: true,\n configurable: true\n });\n var origSetRemoteDescription = window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription() {\n var _this = this;\n if (!this._ontrackpoly) {\n this._ontrackpoly = function (e) {\n // onaddstream does not fire when a track is added to an existing\n // stream. But stream.onaddtrack is implemented so we use that.\n e.stream.addEventListener('addtrack', function (te) {\n var receiver;\n if (window.RTCPeerConnection.prototype.getReceivers) {\n receiver = _this.getReceivers().find(function (r) {\n return r.track && r.track.id === te.track.id;\n });\n } else {\n receiver = {\n track: te.track\n };\n }\n var event = new Event('track');\n event.track = te.track;\n event.receiver = receiver;\n event.transceiver = {\n receiver: receiver\n };\n event.streams = [e.stream];\n _this.dispatchEvent(event);\n });\n e.stream.getTracks().forEach(function (track) {\n var receiver;\n if (window.RTCPeerConnection.prototype.getReceivers) {\n receiver = _this.getReceivers().find(function (r) {\n return r.track && r.track.id === track.id;\n });\n } else {\n receiver = {\n track: track\n };\n }\n var event = new Event('track');\n event.track = track;\n event.receiver = receiver;\n event.transceiver = {\n receiver: receiver\n };\n event.streams = [e.stream];\n _this.dispatchEvent(event);\n });\n };\n this.addEventListener('addstream', this._ontrackpoly);\n }\n return origSetRemoteDescription.apply(this, arguments);\n };\n } else {\n // even if RTCRtpTransceiver is in window, it is only used and\n // emitted in unified-plan. Unfortunately this means we need\n // to unconditionally wrap the event.\n utils.wrapPeerConnectionEvent(window, 'track', function (e) {\n if (!e.transceiver) {\n Object.defineProperty(e, 'transceiver', {\n value: {\n receiver: e.receiver\n }\n });\n }\n return e;\n });\n }\n}\nfunction shimGetSendersWithDtmf(window) {\n // Overrides addTrack/removeTrack, depends on shimAddTrackRemoveTrack.\n if (_typeof(window) === 'object' && window.RTCPeerConnection && !('getSenders' in window.RTCPeerConnection.prototype) && 'createDTMFSender' in window.RTCPeerConnection.prototype) {\n var shimSenderWithDtmf = function shimSenderWithDtmf(pc, track) {\n return {\n track: track,\n get dtmf() {\n if (this._dtmf === undefined) {\n if (track.kind === 'audio') {\n this._dtmf = pc.createDTMFSender(track);\n } else {\n this._dtmf = null;\n }\n }\n return this._dtmf;\n },\n _pc: pc\n };\n };\n\n // augment addTrack when getSenders is not available.\n if (!window.RTCPeerConnection.prototype.getSenders) {\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n this._senders = this._senders || [];\n return this._senders.slice(); // return a copy of the internal state.\n };\n var origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n window.RTCPeerConnection.prototype.addTrack = function addTrack(track, stream) {\n var sender = origAddTrack.apply(this, arguments);\n if (!sender) {\n sender = shimSenderWithDtmf(this, track);\n this._senders.push(sender);\n }\n return sender;\n };\n var origRemoveTrack = window.RTCPeerConnection.prototype.removeTrack;\n window.RTCPeerConnection.prototype.removeTrack = function removeTrack(sender) {\n origRemoveTrack.apply(this, arguments);\n var idx = this._senders.indexOf(sender);\n if (idx !== -1) {\n this._senders.splice(idx, 1);\n }\n };\n }\n var origAddStream = window.RTCPeerConnection.prototype.addStream;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n var _this2 = this;\n this._senders = this._senders || [];\n origAddStream.apply(this, [stream]);\n stream.getTracks().forEach(function (track) {\n _this2._senders.push(shimSenderWithDtmf(_this2, track));\n });\n };\n var origRemoveStream = window.RTCPeerConnection.prototype.removeStream;\n window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) {\n var _this3 = this;\n this._senders = this._senders || [];\n origRemoveStream.apply(this, [stream]);\n stream.getTracks().forEach(function (track) {\n var sender = _this3._senders.find(function (s) {\n return s.track === track;\n });\n if (sender) {\n // remove sender\n _this3._senders.splice(_this3._senders.indexOf(sender), 1);\n }\n });\n };\n } else if (_typeof(window) === 'object' && window.RTCPeerConnection && 'getSenders' in window.RTCPeerConnection.prototype && 'createDTMFSender' in window.RTCPeerConnection.prototype && window.RTCRtpSender && !('dtmf' in window.RTCRtpSender.prototype)) {\n var origGetSenders = window.RTCPeerConnection.prototype.getSenders;\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n var _this4 = this;\n var senders = origGetSenders.apply(this, []);\n senders.forEach(function (sender) {\n return sender._pc = _this4;\n });\n return senders;\n };\n Object.defineProperty(window.RTCRtpSender.prototype, 'dtmf', {\n get: function get() {\n if (this._dtmf === undefined) {\n if (this.track.kind === 'audio') {\n this._dtmf = this._pc.createDTMFSender(this.track);\n } else {\n this._dtmf = null;\n }\n }\n return this._dtmf;\n }\n });\n }\n}\nfunction shimSenderReceiverGetStats(window) {\n if (!(_typeof(window) === 'object' && window.RTCPeerConnection && window.RTCRtpSender && window.RTCRtpReceiver)) {\n return;\n }\n\n // shim sender stats.\n if (!('getStats' in window.RTCRtpSender.prototype)) {\n var origGetSenders = window.RTCPeerConnection.prototype.getSenders;\n if (origGetSenders) {\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n var _this5 = this;\n var senders = origGetSenders.apply(this, []);\n senders.forEach(function (sender) {\n return sender._pc = _this5;\n });\n return senders;\n };\n }\n var origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n if (origAddTrack) {\n window.RTCPeerConnection.prototype.addTrack = function addTrack() {\n var sender = origAddTrack.apply(this, arguments);\n sender._pc = this;\n return sender;\n };\n }\n window.RTCRtpSender.prototype.getStats = function getStats() {\n var sender = this;\n return this._pc.getStats().then(function (result) {\n return (\n /* Note: this will include stats of all senders that\n * send a track with the same id as sender.track as\n * it is not possible to identify the RTCRtpSender.\n */\n utils.filterStats(result, sender.track, true)\n );\n });\n };\n }\n\n // shim receiver stats.\n if (!('getStats' in window.RTCRtpReceiver.prototype)) {\n var origGetReceivers = window.RTCPeerConnection.prototype.getReceivers;\n if (origGetReceivers) {\n window.RTCPeerConnection.prototype.getReceivers = function getReceivers() {\n var _this6 = this;\n var receivers = origGetReceivers.apply(this, []);\n receivers.forEach(function (receiver) {\n return receiver._pc = _this6;\n });\n return receivers;\n };\n }\n utils.wrapPeerConnectionEvent(window, 'track', function (e) {\n e.receiver._pc = e.srcElement;\n return e;\n });\n window.RTCRtpReceiver.prototype.getStats = function getStats() {\n var receiver = this;\n return this._pc.getStats().then(function (result) {\n return utils.filterStats(result, receiver.track, false);\n });\n };\n }\n if (!('getStats' in window.RTCRtpSender.prototype && 'getStats' in window.RTCRtpReceiver.prototype)) {\n return;\n }\n\n // shim RTCPeerConnection.getStats(track).\n var origGetStats = window.RTCPeerConnection.prototype.getStats;\n window.RTCPeerConnection.prototype.getStats = function getStats() {\n if (arguments.length > 0 && arguments[0] instanceof window.MediaStreamTrack) {\n var track = arguments[0];\n var sender;\n var receiver;\n var err;\n this.getSenders().forEach(function (s) {\n if (s.track === track) {\n if (sender) {\n err = true;\n } else {\n sender = s;\n }\n }\n });\n this.getReceivers().forEach(function (r) {\n if (r.track === track) {\n if (receiver) {\n err = true;\n } else {\n receiver = r;\n }\n }\n return r.track === track;\n });\n if (err || sender && receiver) {\n return Promise.reject(new DOMException('There are more than one sender or receiver for the track.', 'InvalidAccessError'));\n } else if (sender) {\n return sender.getStats();\n } else if (receiver) {\n return receiver.getStats();\n }\n return Promise.reject(new DOMException('There is no sender or receiver for the track.', 'InvalidAccessError'));\n }\n return origGetStats.apply(this, arguments);\n };\n}\nfunction shimAddTrackRemoveTrackWithNative(window) {\n // shim addTrack/removeTrack with native variants in order to make\n // the interactions with legacy getLocalStreams behave as in other browsers.\n // Keeps a mapping stream.id => [stream, rtpsenders...]\n window.RTCPeerConnection.prototype.getLocalStreams = function getLocalStreams() {\n var _this7 = this;\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n return Object.keys(this._shimmedLocalStreams).map(function (streamId) {\n return _this7._shimmedLocalStreams[streamId][0];\n });\n };\n var origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n window.RTCPeerConnection.prototype.addTrack = function addTrack(track, stream) {\n if (!stream) {\n return origAddTrack.apply(this, arguments);\n }\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n var sender = origAddTrack.apply(this, arguments);\n if (!this._shimmedLocalStreams[stream.id]) {\n this._shimmedLocalStreams[stream.id] = [stream, sender];\n } else if (this._shimmedLocalStreams[stream.id].indexOf(sender) === -1) {\n this._shimmedLocalStreams[stream.id].push(sender);\n }\n return sender;\n };\n var origAddStream = window.RTCPeerConnection.prototype.addStream;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n var _this8 = this;\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n stream.getTracks().forEach(function (track) {\n var alreadyExists = _this8.getSenders().find(function (s) {\n return s.track === track;\n });\n if (alreadyExists) {\n throw new DOMException('Track already exists.', 'InvalidAccessError');\n }\n });\n var existingSenders = this.getSenders();\n origAddStream.apply(this, arguments);\n var newSenders = this.getSenders().filter(function (newSender) {\n return existingSenders.indexOf(newSender) === -1;\n });\n this._shimmedLocalStreams[stream.id] = [stream].concat(newSenders);\n };\n var origRemoveStream = window.RTCPeerConnection.prototype.removeStream;\n window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) {\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n delete this._shimmedLocalStreams[stream.id];\n return origRemoveStream.apply(this, arguments);\n };\n var origRemoveTrack = window.RTCPeerConnection.prototype.removeTrack;\n window.RTCPeerConnection.prototype.removeTrack = function removeTrack(sender) {\n var _this9 = this;\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n if (sender) {\n Object.keys(this._shimmedLocalStreams).forEach(function (streamId) {\n var idx = _this9._shimmedLocalStreams[streamId].indexOf(sender);\n if (idx !== -1) {\n _this9._shimmedLocalStreams[streamId].splice(idx, 1);\n }\n if (_this9._shimmedLocalStreams[streamId].length === 1) {\n delete _this9._shimmedLocalStreams[streamId];\n }\n });\n }\n return origRemoveTrack.apply(this, arguments);\n };\n}\nfunction shimAddTrackRemoveTrack(window, browserDetails) {\n if (!window.RTCPeerConnection) {\n return;\n }\n // shim addTrack and removeTrack.\n if (window.RTCPeerConnection.prototype.addTrack && browserDetails.version >= 65) {\n return shimAddTrackRemoveTrackWithNative(window);\n }\n\n // also shim pc.getLocalStreams when addTrack is shimmed\n // to return the original streams.\n var origGetLocalStreams = window.RTCPeerConnection.prototype.getLocalStreams;\n window.RTCPeerConnection.prototype.getLocalStreams = function getLocalStreams() {\n var _this0 = this;\n var nativeStreams = origGetLocalStreams.apply(this);\n this._reverseStreams = this._reverseStreams || {};\n return nativeStreams.map(function (stream) {\n return _this0._reverseStreams[stream.id];\n });\n };\n var origAddStream = window.RTCPeerConnection.prototype.addStream;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n var _this1 = this;\n this._streams = this._streams || {};\n this._reverseStreams = this._reverseStreams || {};\n stream.getTracks().forEach(function (track) {\n var alreadyExists = _this1.getSenders().find(function (s) {\n return s.track === track;\n });\n if (alreadyExists) {\n throw new DOMException('Track already exists.', 'InvalidAccessError');\n }\n });\n // Add identity mapping for consistency with addTrack.\n // Unless this is being used with a stream from addTrack.\n if (!this._reverseStreams[stream.id]) {\n var newStream = new window.MediaStream(stream.getTracks());\n this._streams[stream.id] = newStream;\n this._reverseStreams[newStream.id] = stream;\n stream = newStream;\n }\n origAddStream.apply(this, [stream]);\n };\n var origRemoveStream = window.RTCPeerConnection.prototype.removeStream;\n window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) {\n this._streams = this._streams || {};\n this._reverseStreams = this._reverseStreams || {};\n origRemoveStream.apply(this, [this._streams[stream.id] || stream]);\n delete this._reverseStreams[this._streams[stream.id] ? this._streams[stream.id].id : stream.id];\n delete this._streams[stream.id];\n };\n window.RTCPeerConnection.prototype.addTrack = function addTrack(track, stream) {\n var _this10 = this;\n if (this.signalingState === 'closed') {\n throw new DOMException('The RTCPeerConnection\\'s signalingState is \\'closed\\'.', 'InvalidStateError');\n }\n var streams = [].slice.call(arguments, 1);\n if (streams.length !== 1 || !streams[0].getTracks().find(function (t) {\n return t === track;\n })) {\n // this is not fully correct but all we can manage without\n // [[associated MediaStreams]] internal slot.\n throw new DOMException('The adapter.js addTrack polyfill only supports a single ' + ' stream which is associated with the specified track.', 'NotSupportedError');\n }\n var alreadyExists = this.getSenders().find(function (s) {\n return s.track === track;\n });\n if (alreadyExists) {\n throw new DOMException('Track already exists.', 'InvalidAccessError');\n }\n this._streams = this._streams || {};\n this._reverseStreams = this._reverseStreams || {};\n var oldStream = this._streams[stream.id];\n if (oldStream) {\n // this is using odd Chrome behaviour, use with caution:\n // https://bugs.chromium.org/p/webrtc/issues/detail?id=7815\n // Note: we rely on the high-level addTrack/dtmf shim to\n // create the sender with a dtmf sender.\n oldStream.addTrack(track);\n\n // Trigger ONN async.\n Promise.resolve().then(function () {\n _this10.dispatchEvent(new Event('negotiationneeded'));\n });\n } else {\n var newStream = new window.MediaStream([track]);\n this._streams[stream.id] = newStream;\n this._reverseStreams[newStream.id] = stream;\n this.addStream(newStream);\n }\n return this.getSenders().find(function (s) {\n return s.track === track;\n });\n };\n\n // replace the internal stream id with the external one and\n // vice versa.\n function replaceInternalStreamId(pc, description) {\n var sdp = description.sdp;\n Object.keys(pc._reverseStreams || []).forEach(function (internalId) {\n var externalStream = pc._reverseStreams[internalId];\n var internalStream = pc._streams[externalStream.id];\n sdp = sdp.replace(new RegExp(internalStream.id, 'g'), externalStream.id);\n });\n return new RTCSessionDescription({\n type: description.type,\n sdp: sdp\n });\n }\n function replaceExternalStreamId(pc, description) {\n var sdp = description.sdp;\n Object.keys(pc._reverseStreams || []).forEach(function (internalId) {\n var externalStream = pc._reverseStreams[internalId];\n var internalStream = pc._streams[externalStream.id];\n sdp = sdp.replace(new RegExp(externalStream.id, 'g'), internalStream.id);\n });\n return new RTCSessionDescription({\n type: description.type,\n sdp: sdp\n });\n }\n ['createOffer', 'createAnswer'].forEach(function (method) {\n var nativeMethod = window.RTCPeerConnection.prototype[method];\n var methodObj = _defineProperty({}, method, function () {\n var _this11 = this;\n var args = arguments;\n var isLegacyCall = arguments.length && typeof arguments[0] === 'function';\n if (isLegacyCall) {\n return nativeMethod.apply(this, [function (description) {\n var desc = replaceInternalStreamId(_this11, description);\n args[0].apply(null, [desc]);\n }, function (err) {\n if (args[1]) {\n args[1].apply(null, err);\n }\n }, arguments[2]]);\n }\n return nativeMethod.apply(this, arguments).then(function (description) {\n return replaceInternalStreamId(_this11, description);\n });\n });\n window.RTCPeerConnection.prototype[method] = methodObj[method];\n });\n var origSetLocalDescription = window.RTCPeerConnection.prototype.setLocalDescription;\n window.RTCPeerConnection.prototype.setLocalDescription = function setLocalDescription() {\n if (!arguments.length || !arguments[0].type) {\n return origSetLocalDescription.apply(this, arguments);\n }\n arguments[0] = replaceExternalStreamId(this, arguments[0]);\n return origSetLocalDescription.apply(this, arguments);\n };\n\n // TODO: mangle getStats: https://w3c.github.io/webrtc-stats/#dom-rtcmediastreamstats-streamidentifier\n\n var origLocalDescription = Object.getOwnPropertyDescriptor(window.RTCPeerConnection.prototype, 'localDescription');\n Object.defineProperty(window.RTCPeerConnection.prototype, 'localDescription', {\n get: function get() {\n var description = origLocalDescription.get.apply(this);\n if (description.type === '') {\n return description;\n }\n return replaceInternalStreamId(this, description);\n }\n });\n window.RTCPeerConnection.prototype.removeTrack = function removeTrack(sender) {\n var _this12 = this;\n if (this.signalingState === 'closed') {\n throw new DOMException('The RTCPeerConnection\\'s signalingState is \\'closed\\'.', 'InvalidStateError');\n }\n // We can not yet check for sender instanceof RTCRtpSender\n // since we shim RTPSender. So we check if sender._pc is set.\n if (!sender._pc) {\n throw new DOMException('Argument 1 of RTCPeerConnection.removeTrack ' + 'does not implement interface RTCRtpSender.', 'TypeError');\n }\n var isLocal = sender._pc === this;\n if (!isLocal) {\n throw new DOMException('Sender was not created by this connection.', 'InvalidAccessError');\n }\n\n // Search for the native stream the senders track belongs to.\n this._streams = this._streams || {};\n var stream;\n Object.keys(this._streams).forEach(function (streamid) {\n var hasTrack = _this12._streams[streamid].getTracks().find(function (track) {\n return sender.track === track;\n });\n if (hasTrack) {\n stream = _this12._streams[streamid];\n }\n });\n if (stream) {\n if (stream.getTracks().length === 1) {\n // if this is the last track of the stream, remove the stream. This\n // takes care of any shimmed _senders.\n this.removeStream(this._reverseStreams[stream.id]);\n } else {\n // relying on the same odd chrome behaviour as above.\n stream.removeTrack(sender.track);\n }\n this.dispatchEvent(new Event('negotiationneeded'));\n }\n };\n}\nfunction shimPeerConnection(window, browserDetails) {\n if (!window.RTCPeerConnection && window.webkitRTCPeerConnection) {\n // very basic support for old versions.\n window.RTCPeerConnection = window.webkitRTCPeerConnection;\n }\n if (!window.RTCPeerConnection) {\n return;\n }\n\n // shim implicit creation of RTCSessionDescription/RTCIceCandidate\n if (browserDetails.version < 53) {\n ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate'].forEach(function (method) {\n var nativeMethod = window.RTCPeerConnection.prototype[method];\n var methodObj = _defineProperty({}, method, function () {\n arguments[0] = new (method === 'addIceCandidate' ? window.RTCIceCandidate : window.RTCSessionDescription)(arguments[0]);\n return nativeMethod.apply(this, arguments);\n });\n window.RTCPeerConnection.prototype[method] = methodObj[method];\n });\n }\n}\n\n// Attempt to fix ONN in plan-b mode.\nfunction fixNegotiationNeeded(window, browserDetails) {\n utils.wrapPeerConnectionEvent(window, 'negotiationneeded', function (e) {\n var pc = e.target;\n if (browserDetails.version < 72 || pc.getConfiguration && pc.getConfiguration().sdpSemantics === 'plan-b') {\n if (pc.signalingState !== 'stable') {\n return;\n }\n }\n return e;\n });\n}\n", "/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.shimGetUserMedia = shimGetUserMedia;\nvar utils = _interopRequireWildcard(require(\"../utils\"));\nfunction _interopRequireWildcard(e, t) { if (\"function\" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, \"default\": e }; if (null === e || \"object\" != _typeof(e) && \"function\" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) \"default\" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction shimGetUserMedia(window, browserDetails) {\n var navigator = window && window.navigator;\n var MediaStreamTrack = window && window.MediaStreamTrack;\n navigator.getUserMedia = function (constraints, onSuccess, onError) {\n // Replace Firefox 44+'s deprecation warning with unprefixed version.\n utils.deprecated('navigator.getUserMedia', 'navigator.mediaDevices.getUserMedia');\n navigator.mediaDevices.getUserMedia(constraints).then(onSuccess, onError);\n };\n if (!(browserDetails.version > 55 && 'autoGainControl' in navigator.mediaDevices.getSupportedConstraints())) {\n var remap = function remap(obj, a, b) {\n if (a in obj && !(b in obj)) {\n obj[b] = obj[a];\n delete obj[a];\n }\n };\n var nativeGetUserMedia = navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);\n navigator.mediaDevices.getUserMedia = function (c) {\n if (_typeof(c) === 'object' && _typeof(c.audio) === 'object') {\n c = JSON.parse(JSON.stringify(c));\n remap(c.audio, 'autoGainControl', 'mozAutoGainControl');\n remap(c.audio, 'noiseSuppression', 'mozNoiseSuppression');\n }\n return nativeGetUserMedia(c);\n };\n if (MediaStreamTrack && MediaStreamTrack.prototype.getSettings) {\n var nativeGetSettings = MediaStreamTrack.prototype.getSettings;\n MediaStreamTrack.prototype.getSettings = function () {\n var obj = nativeGetSettings.apply(this, arguments);\n remap(obj, 'mozAutoGainControl', 'autoGainControl');\n remap(obj, 'mozNoiseSuppression', 'noiseSuppression');\n return obj;\n };\n }\n if (MediaStreamTrack && MediaStreamTrack.prototype.applyConstraints) {\n var nativeApplyConstraints = MediaStreamTrack.prototype.applyConstraints;\n MediaStreamTrack.prototype.applyConstraints = function (c) {\n if (this.kind === 'audio' && _typeof(c) === 'object') {\n c = JSON.parse(JSON.stringify(c));\n remap(c, 'autoGainControl', 'mozAutoGainControl');\n remap(c, 'noiseSuppression', 'mozNoiseSuppression');\n }\n return nativeApplyConstraints.apply(this, [c]);\n };\n }\n }\n}\n", "/*\n * Copyright (c) 2018 The adapter.js project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.shimGetDisplayMedia = shimGetDisplayMedia;\nfunction shimGetDisplayMedia(window, preferredMediaSource) {\n if (window.navigator.mediaDevices && 'getDisplayMedia' in window.navigator.mediaDevices) {\n return;\n }\n if (!window.navigator.mediaDevices) {\n return;\n }\n window.navigator.mediaDevices.getDisplayMedia = function getDisplayMedia(constraints) {\n if (!(constraints && constraints.video)) {\n var err = new DOMException('getDisplayMedia without video ' + 'constraints is undefined');\n err.name = 'NotFoundError';\n // from https://heycam.github.io/webidl/#idl-DOMException-error-names\n err.code = 8;\n return Promise.reject(err);\n }\n if (constraints.video === true) {\n constraints.video = {\n mediaSource: preferredMediaSource\n };\n } else {\n constraints.video.mediaSource = preferredMediaSource;\n }\n return window.navigator.mediaDevices.getUserMedia(constraints);\n };\n}\n", "/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.shimAddTransceiver = shimAddTransceiver;\nexports.shimCreateAnswer = shimCreateAnswer;\nexports.shimCreateOffer = shimCreateOffer;\nObject.defineProperty(exports, \"shimGetDisplayMedia\", {\n enumerable: true,\n get: function get() {\n return _getdisplaymedia.shimGetDisplayMedia;\n }\n});\nexports.shimGetParameters = shimGetParameters;\nObject.defineProperty(exports, \"shimGetUserMedia\", {\n enumerable: true,\n get: function get() {\n return _getusermedia.shimGetUserMedia;\n }\n});\nexports.shimOnTrack = shimOnTrack;\nexports.shimPeerConnection = shimPeerConnection;\nexports.shimRTCDataChannel = shimRTCDataChannel;\nexports.shimReceiverGetStats = shimReceiverGetStats;\nexports.shimRemoveStream = shimRemoveStream;\nexports.shimSenderGetStats = shimSenderGetStats;\nvar utils = _interopRequireWildcard(require(\"../utils\"));\nvar _getusermedia = require(\"./getusermedia\");\nvar _getdisplaymedia = require(\"./getdisplaymedia\");\nfunction _interopRequireWildcard(e, t) { if (\"function\" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, \"default\": e }; if (null === e || \"object\" != _typeof(e) && \"function\" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) \"default\" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }\nfunction _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _iterableToArray(r) { if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r); }\nfunction _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction shimOnTrack(window) {\n if (_typeof(window) === 'object' && window.RTCTrackEvent && 'receiver' in window.RTCTrackEvent.prototype && !('transceiver' in window.RTCTrackEvent.prototype)) {\n Object.defineProperty(window.RTCTrackEvent.prototype, 'transceiver', {\n get: function get() {\n return {\n receiver: this.receiver\n };\n }\n });\n }\n}\nfunction shimPeerConnection(window, browserDetails) {\n if (_typeof(window) !== 'object' || !(window.RTCPeerConnection || window.mozRTCPeerConnection)) {\n return; // probably media.peerconnection.enabled=false in about:config\n }\n if (!window.RTCPeerConnection && window.mozRTCPeerConnection) {\n // very basic support for old versions.\n window.RTCPeerConnection = window.mozRTCPeerConnection;\n }\n if (browserDetails.version < 53) {\n // shim away need for obsolete RTCIceCandidate/RTCSessionDescription.\n ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate'].forEach(function (method) {\n var nativeMethod = window.RTCPeerConnection.prototype[method];\n var methodObj = _defineProperty({}, method, function () {\n arguments[0] = new (method === 'addIceCandidate' ? window.RTCIceCandidate : window.RTCSessionDescription)(arguments[0]);\n return nativeMethod.apply(this, arguments);\n });\n window.RTCPeerConnection.prototype[method] = methodObj[method];\n });\n }\n var modernStatsTypes = {\n inboundrtp: 'inbound-rtp',\n outboundrtp: 'outbound-rtp',\n candidatepair: 'candidate-pair',\n localcandidate: 'local-candidate',\n remotecandidate: 'remote-candidate'\n };\n var nativeGetStats = window.RTCPeerConnection.prototype.getStats;\n window.RTCPeerConnection.prototype.getStats = function getStats() {\n var _arguments = Array.prototype.slice.call(arguments),\n selector = _arguments[0],\n onSucc = _arguments[1],\n onErr = _arguments[2];\n return nativeGetStats.apply(this, [selector || null]).then(function (stats) {\n if (browserDetails.version < 53 && !onSucc) {\n // Shim only promise getStats with spec-hyphens in type names\n // Leave callback version alone; misc old uses of forEach before Map\n try {\n stats.forEach(function (stat) {\n stat.type = modernStatsTypes[stat.type] || stat.type;\n });\n } catch (e) {\n if (e.name !== 'TypeError') {\n throw e;\n }\n // Avoid TypeError: \"type\" is read-only, in old versions. 34-43ish\n stats.forEach(function (stat, i) {\n stats.set(i, Object.assign({}, stat, {\n type: modernStatsTypes[stat.type] || stat.type\n }));\n });\n }\n }\n return stats;\n }).then(onSucc, onErr);\n };\n}\nfunction shimSenderGetStats(window) {\n if (!(_typeof(window) === 'object' && window.RTCPeerConnection && window.RTCRtpSender)) {\n return;\n }\n if (window.RTCRtpSender && 'getStats' in window.RTCRtpSender.prototype) {\n return;\n }\n var origGetSenders = window.RTCPeerConnection.prototype.getSenders;\n if (origGetSenders) {\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n var _this = this;\n var senders = origGetSenders.apply(this, []);\n senders.forEach(function (sender) {\n return sender._pc = _this;\n });\n return senders;\n };\n }\n var origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n if (origAddTrack) {\n window.RTCPeerConnection.prototype.addTrack = function addTrack() {\n var sender = origAddTrack.apply(this, arguments);\n sender._pc = this;\n return sender;\n };\n }\n window.RTCRtpSender.prototype.getStats = function getStats() {\n return this.track ? this._pc.getStats(this.track) : Promise.resolve(new Map());\n };\n}\nfunction shimReceiverGetStats(window) {\n if (!(_typeof(window) === 'object' && window.RTCPeerConnection && window.RTCRtpSender)) {\n return;\n }\n if (window.RTCRtpSender && 'getStats' in window.RTCRtpReceiver.prototype) {\n return;\n }\n var origGetReceivers = window.RTCPeerConnection.prototype.getReceivers;\n if (origGetReceivers) {\n window.RTCPeerConnection.prototype.getReceivers = function getReceivers() {\n var _this2 = this;\n var receivers = origGetReceivers.apply(this, []);\n receivers.forEach(function (receiver) {\n return receiver._pc = _this2;\n });\n return receivers;\n };\n }\n utils.wrapPeerConnectionEvent(window, 'track', function (e) {\n e.receiver._pc = e.srcElement;\n return e;\n });\n window.RTCRtpReceiver.prototype.getStats = function getStats() {\n return this._pc.getStats(this.track);\n };\n}\nfunction shimRemoveStream(window) {\n if (!window.RTCPeerConnection || 'removeStream' in window.RTCPeerConnection.prototype) {\n return;\n }\n window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) {\n var _this3 = this;\n utils.deprecated('removeStream', 'removeTrack');\n this.getSenders().forEach(function (sender) {\n if (sender.track && stream.getTracks().includes(sender.track)) {\n _this3.removeTrack(sender);\n }\n });\n };\n}\nfunction shimRTCDataChannel(window) {\n // rename DataChannel to RTCDataChannel (native fix in FF60):\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1173851\n if (window.DataChannel && !window.RTCDataChannel) {\n window.RTCDataChannel = window.DataChannel;\n }\n}\nfunction shimAddTransceiver(window) {\n // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647\n // Firefox ignores the init sendEncodings options passed to addTransceiver\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918\n if (!(_typeof(window) === 'object' && window.RTCPeerConnection)) {\n return;\n }\n var origAddTransceiver = window.RTCPeerConnection.prototype.addTransceiver;\n if (origAddTransceiver) {\n window.RTCPeerConnection.prototype.addTransceiver = function addTransceiver() {\n this.setParametersPromises = [];\n // WebIDL input coercion and validation\n var sendEncodings = arguments[1] && arguments[1].sendEncodings;\n if (sendEncodings === undefined) {\n sendEncodings = [];\n }\n sendEncodings = _toConsumableArray(sendEncodings);\n var shouldPerformCheck = sendEncodings.length > 0;\n if (shouldPerformCheck) {\n // If sendEncodings params are provided, validate grammar\n sendEncodings.forEach(function (encodingParam) {\n if ('rid' in encodingParam) {\n var ridRegex = /^[a-z0-9]{0,16}$/i;\n if (!ridRegex.test(encodingParam.rid)) {\n throw new TypeError('Invalid RID value provided.');\n }\n }\n if ('scaleResolutionDownBy' in encodingParam) {\n if (!(parseFloat(encodingParam.scaleResolutionDownBy) >= 1.0)) {\n throw new RangeError('scale_resolution_down_by must be >= 1.0');\n }\n }\n if ('maxFramerate' in encodingParam) {\n if (!(parseFloat(encodingParam.maxFramerate) >= 0)) {\n throw new RangeError('max_framerate must be >= 0.0');\n }\n }\n });\n }\n var transceiver = origAddTransceiver.apply(this, arguments);\n if (shouldPerformCheck) {\n // Check if the init options were applied. If not we do this in an\n // asynchronous way and save the promise reference in a global object.\n // This is an ugly hack, but at the same time is way more robust than\n // checking the sender parameters before and after the createOffer\n // Also note that after the createoffer we are not 100% sure that\n // the params were asynchronously applied so we might miss the\n // opportunity to recreate offer.\n var sender = transceiver.sender;\n var params = sender.getParameters();\n if (!('encodings' in params) ||\n // Avoid being fooled by patched getParameters() below.\n params.encodings.length === 1 && Object.keys(params.encodings[0]).length === 0) {\n params.encodings = sendEncodings;\n sender.sendEncodings = sendEncodings;\n this.setParametersPromises.push(sender.setParameters(params).then(function () {\n delete sender.sendEncodings;\n })[\"catch\"](function () {\n delete sender.sendEncodings;\n }));\n }\n }\n return transceiver;\n };\n }\n}\nfunction shimGetParameters(window) {\n if (!(_typeof(window) === 'object' && window.RTCRtpSender)) {\n return;\n }\n var origGetParameters = window.RTCRtpSender.prototype.getParameters;\n if (origGetParameters) {\n window.RTCRtpSender.prototype.getParameters = function getParameters() {\n var params = origGetParameters.apply(this, arguments);\n if (!('encodings' in params)) {\n params.encodings = [].concat(this.sendEncodings || [{}]);\n }\n return params;\n };\n }\n}\nfunction shimCreateOffer(window) {\n // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647\n // Firefox ignores the init sendEncodings options passed to addTransceiver\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918\n if (!(_typeof(window) === 'object' && window.RTCPeerConnection)) {\n return;\n }\n var origCreateOffer = window.RTCPeerConnection.prototype.createOffer;\n window.RTCPeerConnection.prototype.createOffer = function createOffer() {\n var _arguments2 = arguments,\n _this4 = this;\n if (this.setParametersPromises && this.setParametersPromises.length) {\n return Promise.all(this.setParametersPromises).then(function () {\n return origCreateOffer.apply(_this4, _arguments2);\n })[\"finally\"](function () {\n _this4.setParametersPromises = [];\n });\n }\n return origCreateOffer.apply(this, arguments);\n };\n}\nfunction shimCreateAnswer(window) {\n // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647\n // Firefox ignores the init sendEncodings options passed to addTransceiver\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918\n if (!(_typeof(window) === 'object' && window.RTCPeerConnection)) {\n return;\n }\n var origCreateAnswer = window.RTCPeerConnection.prototype.createAnswer;\n window.RTCPeerConnection.prototype.createAnswer = function createAnswer() {\n var _arguments3 = arguments,\n _this5 = this;\n if (this.setParametersPromises && this.setParametersPromises.length) {\n return Promise.all(this.setParametersPromises).then(function () {\n return origCreateAnswer.apply(_this5, _arguments3);\n })[\"finally\"](function () {\n _this5.setParametersPromises = [];\n });\n }\n return origCreateAnswer.apply(this, arguments);\n };\n}\n", "/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.shimAudioContext = shimAudioContext;\nexports.shimCallbacksAPI = shimCallbacksAPI;\nexports.shimConstraints = shimConstraints;\nexports.shimCreateOfferLegacy = shimCreateOfferLegacy;\nexports.shimGetUserMedia = shimGetUserMedia;\nexports.shimLocalStreamsAPI = shimLocalStreamsAPI;\nexports.shimRTCIceServerUrls = shimRTCIceServerUrls;\nexports.shimRemoteStreamsAPI = shimRemoteStreamsAPI;\nexports.shimTrackEventTransceiver = shimTrackEventTransceiver;\nvar utils = _interopRequireWildcard(require(\"../utils\"));\nfunction _interopRequireWildcard(e, t) { if (\"function\" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, \"default\": e }; if (null === e || \"object\" != _typeof(e) && \"function\" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) \"default\" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction shimLocalStreamsAPI(window) {\n if (_typeof(window) !== 'object' || !window.RTCPeerConnection) {\n return;\n }\n if (!('getLocalStreams' in window.RTCPeerConnection.prototype)) {\n window.RTCPeerConnection.prototype.getLocalStreams = function getLocalStreams() {\n if (!this._localStreams) {\n this._localStreams = [];\n }\n return this._localStreams;\n };\n }\n if (!('addStream' in window.RTCPeerConnection.prototype)) {\n var _addTrack = window.RTCPeerConnection.prototype.addTrack;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n var _this = this;\n if (!this._localStreams) {\n this._localStreams = [];\n }\n if (!this._localStreams.includes(stream)) {\n this._localStreams.push(stream);\n }\n // Try to emulate Chrome's behaviour of adding in audio-video order.\n // Safari orders by track id.\n stream.getAudioTracks().forEach(function (track) {\n return _addTrack.call(_this, track, stream);\n });\n stream.getVideoTracks().forEach(function (track) {\n return _addTrack.call(_this, track, stream);\n });\n };\n window.RTCPeerConnection.prototype.addTrack = function addTrack(track) {\n var _this2 = this;\n for (var _len = arguments.length, streams = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n streams[_key - 1] = arguments[_key];\n }\n if (streams) {\n streams.forEach(function (stream) {\n if (!_this2._localStreams) {\n _this2._localStreams = [stream];\n } else if (!_this2._localStreams.includes(stream)) {\n _this2._localStreams.push(stream);\n }\n });\n }\n return _addTrack.apply(this, arguments);\n };\n }\n if (!('removeStream' in window.RTCPeerConnection.prototype)) {\n window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) {\n var _this3 = this;\n if (!this._localStreams) {\n this._localStreams = [];\n }\n var index = this._localStreams.indexOf(stream);\n if (index === -1) {\n return;\n }\n this._localStreams.splice(index, 1);\n var tracks = stream.getTracks();\n this.getSenders().forEach(function (sender) {\n if (tracks.includes(sender.track)) {\n _this3.removeTrack(sender);\n }\n });\n };\n }\n}\nfunction shimRemoteStreamsAPI(window) {\n if (_typeof(window) !== 'object' || !window.RTCPeerConnection) {\n return;\n }\n if (!('getRemoteStreams' in window.RTCPeerConnection.prototype)) {\n window.RTCPeerConnection.prototype.getRemoteStreams = function getRemoteStreams() {\n return this._remoteStreams ? this._remoteStreams : [];\n };\n }\n if (!('onaddstream' in window.RTCPeerConnection.prototype)) {\n Object.defineProperty(window.RTCPeerConnection.prototype, 'onaddstream', {\n get: function get() {\n return this._onaddstream;\n },\n set: function set(f) {\n var _this4 = this;\n if (this._onaddstream) {\n this.removeEventListener('addstream', this._onaddstream);\n this.removeEventListener('track', this._onaddstreampoly);\n }\n this.addEventListener('addstream', this._onaddstream = f);\n this.addEventListener('track', this._onaddstreampoly = function (e) {\n e.streams.forEach(function (stream) {\n if (!_this4._remoteStreams) {\n _this4._remoteStreams = [];\n }\n if (_this4._remoteStreams.includes(stream)) {\n return;\n }\n _this4._remoteStreams.push(stream);\n var event = new Event('addstream');\n event.stream = stream;\n _this4.dispatchEvent(event);\n });\n });\n }\n });\n var origSetRemoteDescription = window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription() {\n var pc = this;\n if (!this._onaddstreampoly) {\n this.addEventListener('track', this._onaddstreampoly = function (e) {\n e.streams.forEach(function (stream) {\n if (!pc._remoteStreams) {\n pc._remoteStreams = [];\n }\n if (pc._remoteStreams.indexOf(stream) >= 0) {\n return;\n }\n pc._remoteStreams.push(stream);\n var event = new Event('addstream');\n event.stream = stream;\n pc.dispatchEvent(event);\n });\n });\n }\n return origSetRemoteDescription.apply(pc, arguments);\n };\n }\n}\nfunction shimCallbacksAPI(window) {\n if (_typeof(window) !== 'object' || !window.RTCPeerConnection) {\n return;\n }\n var prototype = window.RTCPeerConnection.prototype;\n var origCreateOffer = prototype.createOffer;\n var origCreateAnswer = prototype.createAnswer;\n var setLocalDescription = prototype.setLocalDescription;\n var setRemoteDescription = prototype.setRemoteDescription;\n var addIceCandidate = prototype.addIceCandidate;\n prototype.createOffer = function createOffer(successCallback, failureCallback) {\n var options = arguments.length >= 2 ? arguments[2] : arguments[0];\n var promise = origCreateOffer.apply(this, [options]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n prototype.createAnswer = function createAnswer(successCallback, failureCallback) {\n var options = arguments.length >= 2 ? arguments[2] : arguments[0];\n var promise = origCreateAnswer.apply(this, [options]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n var withCallback = function withCallback(description, successCallback, failureCallback) {\n var promise = setLocalDescription.apply(this, [description]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n prototype.setLocalDescription = withCallback;\n withCallback = function withCallback(description, successCallback, failureCallback) {\n var promise = setRemoteDescription.apply(this, [description]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n prototype.setRemoteDescription = withCallback;\n withCallback = function withCallback(candidate, successCallback, failureCallback) {\n var promise = addIceCandidate.apply(this, [candidate]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n prototype.addIceCandidate = withCallback;\n}\nfunction shimGetUserMedia(window) {\n var navigator = window && window.navigator;\n if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {\n // shim not needed in Safari 12.1\n var mediaDevices = navigator.mediaDevices;\n var _getUserMedia = mediaDevices.getUserMedia.bind(mediaDevices);\n navigator.mediaDevices.getUserMedia = function (constraints) {\n return _getUserMedia(shimConstraints(constraints));\n };\n }\n if (!navigator.getUserMedia && navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {\n navigator.getUserMedia = function getUserMedia(constraints, cb, errcb) {\n navigator.mediaDevices.getUserMedia(constraints).then(cb, errcb);\n }.bind(navigator);\n }\n}\nfunction shimConstraints(constraints) {\n if (constraints && constraints.video !== undefined) {\n return Object.assign({}, constraints, {\n video: utils.compactObject(constraints.video)\n });\n }\n return constraints;\n}\nfunction shimRTCIceServerUrls(window) {\n if (!window.RTCPeerConnection) {\n return;\n }\n // migrate from non-spec RTCIceServer.url to RTCIceServer.urls\n var OrigPeerConnection = window.RTCPeerConnection;\n window.RTCPeerConnection = function RTCPeerConnection(pcConfig, pcConstraints) {\n if (pcConfig && pcConfig.iceServers) {\n var newIceServers = [];\n for (var i = 0; i < pcConfig.iceServers.length; i++) {\n var server = pcConfig.iceServers[i];\n if (server.urls === undefined && server.url) {\n utils.deprecated('RTCIceServer.url', 'RTCIceServer.urls');\n server = JSON.parse(JSON.stringify(server));\n server.urls = server.url;\n delete server.url;\n newIceServers.push(server);\n } else {\n newIceServers.push(pcConfig.iceServers[i]);\n }\n }\n pcConfig.iceServers = newIceServers;\n }\n return new OrigPeerConnection(pcConfig, pcConstraints);\n };\n window.RTCPeerConnection.prototype = OrigPeerConnection.prototype;\n // wrap static methods. Currently just generateCertificate.\n if ('generateCertificate' in OrigPeerConnection) {\n Object.defineProperty(window.RTCPeerConnection, 'generateCertificate', {\n get: function get() {\n return OrigPeerConnection.generateCertificate;\n }\n });\n }\n}\nfunction shimTrackEventTransceiver(window) {\n // Add event.transceiver member over deprecated event.receiver\n if (_typeof(window) === 'object' && window.RTCTrackEvent && 'receiver' in window.RTCTrackEvent.prototype && !('transceiver' in window.RTCTrackEvent.prototype)) {\n Object.defineProperty(window.RTCTrackEvent.prototype, 'transceiver', {\n get: function get() {\n return {\n receiver: this.receiver\n };\n }\n });\n }\n}\nfunction shimCreateOfferLegacy(window) {\n var origCreateOffer = window.RTCPeerConnection.prototype.createOffer;\n window.RTCPeerConnection.prototype.createOffer = function createOffer(offerOptions) {\n if (offerOptions) {\n if (typeof offerOptions.offerToReceiveAudio !== 'undefined') {\n // support bit values\n offerOptions.offerToReceiveAudio = !!offerOptions.offerToReceiveAudio;\n }\n var audioTransceiver = this.getTransceivers().find(function (transceiver) {\n return transceiver.receiver.track.kind === 'audio';\n });\n if (offerOptions.offerToReceiveAudio === false && audioTransceiver) {\n if (audioTransceiver.direction === 'sendrecv') {\n if (audioTransceiver.setDirection) {\n audioTransceiver.setDirection('sendonly');\n } else {\n audioTransceiver.direction = 'sendonly';\n }\n } else if (audioTransceiver.direction === 'recvonly') {\n if (audioTransceiver.setDirection) {\n audioTransceiver.setDirection('inactive');\n } else {\n audioTransceiver.direction = 'inactive';\n }\n }\n } else if (offerOptions.offerToReceiveAudio === true && !audioTransceiver) {\n this.addTransceiver('audio', {\n direction: 'recvonly'\n });\n }\n if (typeof offerOptions.offerToReceiveVideo !== 'undefined') {\n // support bit values\n offerOptions.offerToReceiveVideo = !!offerOptions.offerToReceiveVideo;\n }\n var videoTransceiver = this.getTransceivers().find(function (transceiver) {\n return transceiver.receiver.track.kind === 'video';\n });\n if (offerOptions.offerToReceiveVideo === false && videoTransceiver) {\n if (videoTransceiver.direction === 'sendrecv') {\n if (videoTransceiver.setDirection) {\n videoTransceiver.setDirection('sendonly');\n } else {\n videoTransceiver.direction = 'sendonly';\n }\n } else if (videoTransceiver.direction === 'recvonly') {\n if (videoTransceiver.setDirection) {\n videoTransceiver.setDirection('inactive');\n } else {\n videoTransceiver.direction = 'inactive';\n }\n }\n } else if (offerOptions.offerToReceiveVideo === true && !videoTransceiver) {\n this.addTransceiver('video', {\n direction: 'recvonly'\n });\n }\n }\n return origCreateOffer.apply(this, arguments);\n };\n}\nfunction shimAudioContext(window) {\n if (_typeof(window) !== 'object' || window.AudioContext) {\n return;\n }\n window.AudioContext = window.webkitAudioContext;\n}\n", "/* eslint-env node */\n'use strict';\n\n// SDP helpers.\n\nconst SDPUtils = {};\n\n// Generate an alphanumeric identifier for cname or mids.\n// TODO: use UUIDs instead? https://gist.github.com/jed/982883\nSDPUtils.generateIdentifier = function () {\n return Math.random().toString(36).substring(2, 12);\n};\n\n// The RTCP CNAME used by all peerconnections from the same JS.\nSDPUtils.localCName = SDPUtils.generateIdentifier();\n\n// Splits SDP into lines, dealing with both CRLF and LF.\nSDPUtils.splitLines = function (blob) {\n return blob.trim().split('\\n').map(line => line.trim());\n};\n// Splits SDP into sessionpart and mediasections. Ensures CRLF.\nSDPUtils.splitSections = function (blob) {\n const parts = blob.split('\\nm=');\n return parts.map((part, index) => (index > 0 ? 'm=' + part : part).trim() + '\\r\\n');\n};\n\n// Returns the session description.\nSDPUtils.getDescription = function (blob) {\n const sections = SDPUtils.splitSections(blob);\n return sections && sections[0];\n};\n\n// Returns the individual media sections.\nSDPUtils.getMediaSections = function (blob) {\n const sections = SDPUtils.splitSections(blob);\n sections.shift();\n return sections;\n};\n\n// Returns lines that start with a certain prefix.\nSDPUtils.matchPrefix = function (blob, prefix) {\n return SDPUtils.splitLines(blob).filter(line => line.indexOf(prefix) === 0);\n};\n\n// Parses an ICE candidate line. Sample input:\n// candidate:702786350 2 udp 41819902 8.8.8.8 60769 typ relay raddr 8.8.8.8\n// rport 55996\"\n// Input can be prefixed with a=.\nSDPUtils.parseCandidate = function (line) {\n let parts;\n // Parse both variants.\n if (line.indexOf('a=candidate:') === 0) {\n parts = line.substring(12).split(' ');\n } else {\n parts = line.substring(10).split(' ');\n }\n\n const candidate = {\n foundation: parts[0],\n component: { 1: 'rtp', 2: 'rtcp' }[parts[1]] || parts[1],\n protocol: parts[2].toLowerCase(),\n priority: parseInt(parts[3], 10),\n ip: parts[4],\n address: parts[4], // address is an alias for ip.\n port: parseInt(parts[5], 10),\n // skip parts[6] == 'typ'\n type: parts[7]\n };\n\n for (let i = 8; i < parts.length; i += 2) {\n switch (parts[i]) {\n case 'raddr':\n candidate.relatedAddress = parts[i + 1];\n break;\n case 'rport':\n candidate.relatedPort = parseInt(parts[i + 1], 10);\n break;\n case 'tcptype':\n candidate.tcpType = parts[i + 1];\n break;\n case 'ufrag':\n candidate.ufrag = parts[i + 1]; // for backward compatibility.\n candidate.usernameFragment = parts[i + 1];\n break;\n default:\n // extension handling, in particular ufrag. Don't overwrite.\n if (candidate[parts[i]] === undefined) {\n candidate[parts[i]] = parts[i + 1];\n }\n break;\n }\n }\n return candidate;\n};\n\n// Translates a candidate object into SDP candidate attribute.\n// This does not include the a= prefix!\nSDPUtils.writeCandidate = function (candidate) {\n const sdp = [];\n sdp.push(candidate.foundation);\n\n const component = candidate.component;\n if (component === 'rtp') {\n sdp.push(1);\n } else if (component === 'rtcp') {\n sdp.push(2);\n } else {\n sdp.push(component);\n }\n sdp.push(candidate.protocol.toUpperCase());\n sdp.push(candidate.priority);\n sdp.push(candidate.address || candidate.ip);\n sdp.push(candidate.port);\n\n const type = candidate.type;\n sdp.push('typ');\n sdp.push(type);\n if (type !== 'host' && candidate.relatedAddress && candidate.relatedPort !== undefined) {\n sdp.push('raddr');\n sdp.push(candidate.relatedAddress);\n sdp.push('rport');\n sdp.push(candidate.relatedPort);\n }\n if (candidate.tcpType && candidate.protocol.toLowerCase() === 'tcp') {\n sdp.push('tcptype');\n sdp.push(candidate.tcpType);\n }\n if (candidate.usernameFragment || candidate.ufrag) {\n sdp.push('ufrag');\n sdp.push(candidate.usernameFragment || candidate.ufrag);\n }\n return 'candidate:' + sdp.join(' ');\n};\n\n// Parses an ice-options line, returns an array of option tags.\n// Sample input:\n// a=ice-options:foo bar\nSDPUtils.parseIceOptions = function (line) {\n return line.substring(14).split(' ');\n};\n\n// Parses a rtpmap line, returns RTCRtpCoddecParameters. Sample input:\n// a=rtpmap:111 opus/48000/2\nSDPUtils.parseRtpMap = function (line) {\n let parts = line.substring(9).split(' ');\n const parsed = {\n payloadType: parseInt(parts.shift(), 10) // was: id\n };\n\n parts = parts[0].split('/');\n\n parsed.name = parts[0];\n parsed.clockRate = parseInt(parts[1], 10); // was: clockrate\n parsed.channels = parts.length === 3 ? parseInt(parts[2], 10) : 1;\n // legacy alias, got renamed back to channels in ORTC.\n parsed.numChannels = parsed.channels;\n return parsed;\n};\n\n// Generates a rtpmap line from RTCRtpCodecCapability or\n// RTCRtpCodecParameters.\nSDPUtils.writeRtpMap = function (codec) {\n let pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) {\n pt = codec.preferredPayloadType;\n }\n const channels = codec.channels || codec.numChannels || 1;\n return 'a=rtpmap:' + pt + ' ' + codec.name + '/' + codec.clockRate + (channels !== 1 ? '/' + channels : '') + '\\r\\n';\n};\n\n// Parses a extmap line (headerextension from RFC 5285). Sample input:\n// a=extmap:2 urn:ietf:params:rtp-hdrext:toffset\n// a=extmap:2/sendonly urn:ietf:params:rtp-hdrext:toffset\nSDPUtils.parseExtmap = function (line) {\n const parts = line.substring(9).split(' ');\n return {\n id: parseInt(parts[0], 10),\n direction: parts[0].indexOf('/') > 0 ? parts[0].split('/')[1] : 'sendrecv',\n uri: parts[1],\n attributes: parts.slice(2).join(' ')\n };\n};\n\n// Generates an extmap line from RTCRtpHeaderExtensionParameters or\n// RTCRtpHeaderExtension.\nSDPUtils.writeExtmap = function (headerExtension) {\n return 'a=extmap:' + (headerExtension.id || headerExtension.preferredId) + (headerExtension.direction && headerExtension.direction !== 'sendrecv' ? '/' + headerExtension.direction : '') + ' ' + headerExtension.uri + (headerExtension.attributes ? ' ' + headerExtension.attributes : '') + '\\r\\n';\n};\n\n// Parses a fmtp line, returns dictionary. Sample input:\n// a=fmtp:96 vbr=on;cng=on\n// Also deals with vbr=on; cng=on\n// Non-key-value such as telephone-events `0-15` get parsed as\n// {`0-15`:undefined}\nSDPUtils.parseFmtp = function (line) {\n const parsed = {};\n let kv;\n const parts = line.substring(line.indexOf(' ') + 1).split(';');\n for (let j = 0; j < parts.length; j++) {\n kv = parts[j].trim().split('=');\n parsed[kv[0].trim()] = kv[1];\n }\n return parsed;\n};\n\n// Generates a fmtp line from RTCRtpCodecCapability or RTCRtpCodecParameters.\nSDPUtils.writeFmtp = function (codec) {\n let line = '';\n let pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) {\n pt = codec.preferredPayloadType;\n }\n if (codec.parameters && Object.keys(codec.parameters).length) {\n const params = [];\n Object.keys(codec.parameters).forEach(param => {\n if (codec.parameters[param] !== undefined) {\n params.push(param + '=' + codec.parameters[param]);\n } else {\n params.push(param);\n }\n });\n line += 'a=fmtp:' + pt + ' ' + params.join(';') + '\\r\\n';\n }\n return line;\n};\n\n// Parses a rtcp-fb line, returns RTCPRtcpFeedback object. Sample input:\n// a=rtcp-fb:98 nack rpsi\nSDPUtils.parseRtcpFb = function (line) {\n const parts = line.substring(line.indexOf(' ') + 1).split(' ');\n return {\n type: parts.shift(),\n parameter: parts.join(' ')\n };\n};\n\n// Generate a=rtcp-fb lines from RTCRtpCodecCapability or RTCRtpCodecParameters.\nSDPUtils.writeRtcpFb = function (codec) {\n let lines = '';\n let pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) {\n pt = codec.preferredPayloadType;\n }\n if (codec.rtcpFeedback && codec.rtcpFeedback.length) {\n // FIXME: special handling for trr-int?\n codec.rtcpFeedback.forEach(fb => {\n lines += 'a=rtcp-fb:' + pt + ' ' + fb.type + (fb.parameter && fb.parameter.length ? ' ' + fb.parameter : '') + '\\r\\n';\n });\n }\n return lines;\n};\n\n// Parses a RFC 5576 ssrc media attribute. Sample input:\n// a=ssrc:3735928559 cname:something\nSDPUtils.parseSsrcMedia = function (line) {\n const sp = line.indexOf(' ');\n const parts = {\n ssrc: parseInt(line.substring(7, sp), 10)\n };\n const colon = line.indexOf(':', sp);\n if (colon > -1) {\n parts.attribute = line.substring(sp + 1, colon);\n parts.value = line.substring(colon + 1);\n } else {\n parts.attribute = line.substring(sp + 1);\n }\n return parts;\n};\n\n// Parse a ssrc-group line (see RFC 5576). Sample input:\n// a=ssrc-group:semantics 12 34\nSDPUtils.parseSsrcGroup = function (line) {\n const parts = line.substring(13).split(' ');\n return {\n semantics: parts.shift(),\n ssrcs: parts.map(ssrc => parseInt(ssrc, 10))\n };\n};\n\n// Extracts the MID (RFC 5888) from a media section.\n// Returns the MID or undefined if no mid line was found.\nSDPUtils.getMid = function (mediaSection) {\n const mid = SDPUtils.matchPrefix(mediaSection, 'a=mid:')[0];\n if (mid) {\n return mid.substring(6);\n }\n};\n\n// Parses a fingerprint line for DTLS-SRTP.\nSDPUtils.parseFingerprint = function (line) {\n const parts = line.substring(14).split(' ');\n return {\n algorithm: parts[0].toLowerCase(), // algorithm is case-sensitive in Edge.\n value: parts[1].toUpperCase() // the definition is upper-case in RFC 4572.\n };\n};\n\n// Extracts DTLS parameters from SDP media section or sessionpart.\n// FIXME: for consistency with other functions this should only\n// get the fingerprint line as input. See also getIceParameters.\nSDPUtils.getDtlsParameters = function (mediaSection, sessionpart) {\n const lines = SDPUtils.matchPrefix(mediaSection + sessionpart, 'a=fingerprint:');\n // Note: a=setup line is ignored since we use the 'auto' role in Edge.\n return {\n role: 'auto',\n fingerprints: lines.map(SDPUtils.parseFingerprint)\n };\n};\n\n// Serializes DTLS parameters to SDP.\nSDPUtils.writeDtlsParameters = function (params, setupType) {\n let sdp = 'a=setup:' + setupType + '\\r\\n';\n params.fingerprints.forEach(fp => {\n sdp += 'a=fingerprint:' + fp.algorithm + ' ' + fp.value + '\\r\\n';\n });\n return sdp;\n};\n\n// Parses a=crypto lines into\n// https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#dictionary-rtcsrtpsdesparameters-members\nSDPUtils.parseCryptoLine = function (line) {\n const parts = line.substring(9).split(' ');\n return {\n tag: parseInt(parts[0], 10),\n cryptoSuite: parts[1],\n keyParams: parts[2],\n sessionParams: parts.slice(3)\n };\n};\n\nSDPUtils.writeCryptoLine = function (parameters) {\n return 'a=crypto:' + parameters.tag + ' ' + parameters.cryptoSuite + ' ' + (typeof parameters.keyParams === 'object' ? SDPUtils.writeCryptoKeyParams(parameters.keyParams) : parameters.keyParams) + (parameters.sessionParams ? ' ' + parameters.sessionParams.join(' ') : '') + '\\r\\n';\n};\n\n// Parses the crypto key parameters into\n// https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#rtcsrtpkeyparam*\nSDPUtils.parseCryptoKeyParams = function (keyParams) {\n if (keyParams.indexOf('inline:') !== 0) {\n return null;\n }\n const parts = keyParams.substring(7).split('|');\n return {\n keyMethod: 'inline',\n keySalt: parts[0],\n lifeTime: parts[1],\n mkiValue: parts[2] ? parts[2].split(':')[0] : undefined,\n mkiLength: parts[2] ? parts[2].split(':')[1] : undefined\n };\n};\n\nSDPUtils.writeCryptoKeyParams = function (keyParams) {\n return keyParams.keyMethod + ':' + keyParams.keySalt + (keyParams.lifeTime ? '|' + keyParams.lifeTime : '') + (keyParams.mkiValue && keyParams.mkiLength ? '|' + keyParams.mkiValue + ':' + keyParams.mkiLength : '');\n};\n\n// Extracts all SDES parameters.\nSDPUtils.getCryptoParameters = function (mediaSection, sessionpart) {\n const lines = SDPUtils.matchPrefix(mediaSection + sessionpart, 'a=crypto:');\n return lines.map(SDPUtils.parseCryptoLine);\n};\n\n// Parses ICE information from SDP media section or sessionpart.\n// FIXME: for consistency with other functions this should only\n// get the ice-ufrag and ice-pwd lines as input.\nSDPUtils.getIceParameters = function (mediaSection, sessionpart) {\n const ufrag = SDPUtils.matchPrefix(mediaSection + sessionpart, 'a=ice-ufrag:')[0];\n const pwd = SDPUtils.matchPrefix(mediaSection + sessionpart, 'a=ice-pwd:')[0];\n if (!(ufrag && pwd)) {\n return null;\n }\n return {\n usernameFragment: ufrag.substring(12),\n password: pwd.substring(10)\n };\n};\n\n// Serializes ICE parameters to SDP.\nSDPUtils.writeIceParameters = function (params) {\n let sdp = 'a=ice-ufrag:' + params.usernameFragment + '\\r\\n' + 'a=ice-pwd:' + params.password + '\\r\\n';\n if (params.iceLite) {\n sdp += 'a=ice-lite\\r\\n';\n }\n return sdp;\n};\n\n// Parses the SDP media section and returns RTCRtpParameters.\nSDPUtils.parseRtpParameters = function (mediaSection) {\n const description = {\n codecs: [],\n headerExtensions: [],\n fecMechanisms: [],\n rtcp: []\n };\n const lines = SDPUtils.splitLines(mediaSection);\n const mline = lines[0].split(' ');\n description.profile = mline[2];\n for (let i = 3; i < mline.length; i++) {\n // find all codecs from mline[3..]\n const pt = mline[i];\n const rtpmapline = SDPUtils.matchPrefix(mediaSection, 'a=rtpmap:' + pt + ' ')[0];\n if (rtpmapline) {\n const codec = SDPUtils.parseRtpMap(rtpmapline);\n const fmtps = SDPUtils.matchPrefix(mediaSection, 'a=fmtp:' + pt + ' ');\n // Only the first a=fmtp:<pt> is considered.\n codec.parameters = fmtps.length ? SDPUtils.parseFmtp(fmtps[0]) : {};\n codec.rtcpFeedback = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-fb:' + pt + ' ').map(SDPUtils.parseRtcpFb);\n description.codecs.push(codec);\n // parse FEC mechanisms from rtpmap lines.\n switch (codec.name.toUpperCase()) {\n case 'RED':\n case 'ULPFEC':\n description.fecMechanisms.push(codec.name.toUpperCase());\n break;\n default:\n // only RED and ULPFEC are recognized as FEC mechanisms.\n break;\n }\n }\n }\n SDPUtils.matchPrefix(mediaSection, 'a=extmap:').forEach(line => {\n description.headerExtensions.push(SDPUtils.parseExtmap(line));\n });\n const wildcardRtcpFb = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-fb:* ').map(SDPUtils.parseRtcpFb);\n description.codecs.forEach(codec => {\n wildcardRtcpFb.forEach(fb => {\n const duplicate = codec.rtcpFeedback.find(existingFeedback => {\n return existingFeedback.type === fb.type && existingFeedback.parameter === fb.parameter;\n });\n if (!duplicate) {\n codec.rtcpFeedback.push(fb);\n }\n });\n });\n // FIXME: parse rtcp.\n return description;\n};\n\n// Generates parts of the SDP media section describing the capabilities /\n// parameters.\nSDPUtils.writeRtpDescription = function (kind, caps) {\n let sdp = '';\n\n // Build the mline.\n sdp += 'm=' + kind + ' ';\n sdp += caps.codecs.length > 0 ? '9' : '0'; // reject if no codecs.\n sdp += ' ' + (caps.profile || 'UDP/TLS/RTP/SAVPF') + ' ';\n sdp += caps.codecs.map(codec => {\n if (codec.preferredPayloadType !== undefined) {\n return codec.preferredPayloadType;\n }\n return codec.payloadType;\n }).join(' ') + '\\r\\n';\n\n sdp += 'c=IN IP4 0.0.0.0\\r\\n';\n sdp += 'a=rtcp:9 IN IP4 0.0.0.0\\r\\n';\n\n // Add a=rtpmap lines for each codec. Also fmtp and rtcp-fb.\n caps.codecs.forEach(codec => {\n sdp += SDPUtils.writeRtpMap(codec);\n sdp += SDPUtils.writeFmtp(codec);\n sdp += SDPUtils.writeRtcpFb(codec);\n });\n let maxptime = 0;\n caps.codecs.forEach(codec => {\n if (codec.maxptime > maxptime) {\n maxptime = codec.maxptime;\n }\n });\n if (maxptime > 0) {\n sdp += 'a=maxptime:' + maxptime + '\\r\\n';\n }\n\n if (caps.headerExtensions) {\n caps.headerExtensions.forEach(extension => {\n sdp += SDPUtils.writeExtmap(extension);\n });\n }\n // FIXME: write fecMechanisms.\n return sdp;\n};\n\n// Parses the SDP media section and returns an array of\n// RTCRtpEncodingParameters.\nSDPUtils.parseRtpEncodingParameters = function (mediaSection) {\n const encodingParameters = [];\n const description = SDPUtils.parseRtpParameters(mediaSection);\n const hasRed = description.fecMechanisms.indexOf('RED') !== -1;\n const hasUlpfec = description.fecMechanisms.indexOf('ULPFEC') !== -1;\n\n // filter a=ssrc:... cname:, ignore PlanB-msid\n const ssrcs = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:').map(line => SDPUtils.parseSsrcMedia(line)).filter(parts => parts.attribute === 'cname');\n const primarySsrc = ssrcs.length > 0 && ssrcs[0].ssrc;\n let secondarySsrc;\n\n const flows = SDPUtils.matchPrefix(mediaSection, 'a=ssrc-group:FID').map(line => {\n const parts = line.substring(17).split(' ');\n return parts.map(part => parseInt(part, 10));\n });\n if (flows.length > 0 && flows[0].length > 1 && flows[0][0] === primarySsrc) {\n secondarySsrc = flows[0][1];\n }\n\n description.codecs.forEach(codec => {\n if (codec.name.toUpperCase() === 'RTX' && codec.parameters.apt) {\n let encParam = {\n ssrc: primarySsrc,\n codecPayloadType: parseInt(codec.parameters.apt, 10)\n };\n if (primarySsrc && secondarySsrc) {\n encParam.rtx = { ssrc: secondarySsrc };\n }\n encodingParameters.push(encParam);\n if (hasRed) {\n encParam = JSON.parse(JSON.stringify(encParam));\n encParam.fec = {\n ssrc: primarySsrc,\n mechanism: hasUlpfec ? 'red+ulpfec' : 'red'\n };\n encodingParameters.push(encParam);\n }\n }\n });\n if (encodingParameters.length === 0 && primarySsrc) {\n encodingParameters.push({\n ssrc: primarySsrc\n });\n }\n\n // we support both b=AS and b=TIAS but interpret AS as TIAS.\n let bandwidth = SDPUtils.matchPrefix(mediaSection, 'b=');\n if (bandwidth.length) {\n if (bandwidth[0].indexOf('b=TIAS:') === 0) {\n bandwidth = parseInt(bandwidth[0].substring(7), 10);\n } else if (bandwidth[0].indexOf('b=AS:') === 0) {\n // use formula from JSEP to convert b=AS to TIAS value.\n bandwidth = parseInt(bandwidth[0].substring(5), 10) * 1000 * 0.95 - 50 * 40 * 8;\n } else {\n bandwidth = undefined;\n }\n encodingParameters.forEach(params => {\n params.maxBitrate = bandwidth;\n });\n }\n return encodingParameters;\n};\n\n// parses http://draft.ortc.org/#rtcrtcpparameters*\nSDPUtils.parseRtcpParameters = function (mediaSection) {\n const rtcpParameters = {};\n\n // Gets the first SSRC. Note that with RTX there might be multiple\n // SSRCs.\n const remoteSsrc = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:').map(line => SDPUtils.parseSsrcMedia(line)).filter(obj => obj.attribute === 'cname')[0];\n if (remoteSsrc) {\n rtcpParameters.cname = remoteSsrc.value;\n rtcpParameters.ssrc = remoteSsrc.ssrc;\n }\n\n // Edge uses the compound attribute instead of reducedSize\n // compound is !reducedSize\n const rsize = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-rsize');\n rtcpParameters.reducedSize = rsize.length > 0;\n rtcpParameters.compound = rsize.length === 0;\n\n // parses the rtcp-mux attr\u0456bute.\n // Note that Edge does not support unmuxed RTCP.\n const mux = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-mux');\n rtcpParameters.mux = mux.length > 0;\n\n return rtcpParameters;\n};\n\nSDPUtils.writeRtcpParameters = function (rtcpParameters) {\n let sdp = '';\n if (rtcpParameters.reducedSize) {\n sdp += 'a=rtcp-rsize\\r\\n';\n }\n if (rtcpParameters.mux) {\n sdp += 'a=rtcp-mux\\r\\n';\n }\n if (rtcpParameters.ssrc !== undefined && rtcpParameters.cname) {\n sdp += 'a=ssrc:' + rtcpParameters.ssrc + ' cname:' + rtcpParameters.cname + '\\r\\n';\n }\n return sdp;\n};\n\n// parses either a=msid: or a=ssrc:... msid lines and returns\n// the id of the MediaStream and MediaStreamTrack.\nSDPUtils.parseMsid = function (mediaSection) {\n let parts;\n const spec = SDPUtils.matchPrefix(mediaSection, 'a=msid:');\n if (spec.length === 1) {\n parts = spec[0].substring(7).split(' ');\n return { stream: parts[0], track: parts[1] };\n }\n const planB = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:').map(line => SDPUtils.parseSsrcMedia(line)).filter(msidParts => msidParts.attribute === 'msid');\n if (planB.length > 0) {\n parts = planB[0].value.split(' ');\n return { stream: parts[0], track: parts[1] };\n }\n};\n\n// SCTP\n// parses draft-ietf-mmusic-sctp-sdp-26 first and falls back\n// to draft-ietf-mmusic-sctp-sdp-05\nSDPUtils.parseSctpDescription = function (mediaSection) {\n const mline = SDPUtils.parseMLine(mediaSection);\n const maxSizeLine = SDPUtils.matchPrefix(mediaSection, 'a=max-message-size:');\n let maxMessageSize;\n if (maxSizeLine.length > 0) {\n maxMessageSize = parseInt(maxSizeLine[0].substring(19), 10);\n }\n if (isNaN(maxMessageSize)) {\n maxMessageSize = 65536;\n }\n const sctpPort = SDPUtils.matchPrefix(mediaSection, 'a=sctp-port:');\n if (sctpPort.length > 0) {\n return {\n port: parseInt(sctpPort[0].substring(12), 10),\n protocol: mline.fmt,\n maxMessageSize\n };\n }\n const sctpMapLines = SDPUtils.matchPrefix(mediaSection, 'a=sctpmap:');\n if (sctpMapLines.length > 0) {\n const parts = sctpMapLines[0].substring(10).split(' ');\n return {\n port: parseInt(parts[0], 10),\n protocol: parts[1],\n maxMessageSize\n };\n }\n};\n\n// SCTP\n// outputs the draft-ietf-mmusic-sctp-sdp-26 version that all browsers\n// support by now receiving in this format, unless we originally parsed\n// as the draft-ietf-mmusic-sctp-sdp-05 format (indicated by the m-line\n// protocol of DTLS/SCTP -- without UDP/ or TCP/)\nSDPUtils.writeSctpDescription = function (media, sctp) {\n let output = [];\n if (media.protocol !== 'DTLS/SCTP') {\n output = ['m=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.protocol + '\\r\\n', 'c=IN IP4 0.0.0.0\\r\\n', 'a=sctp-port:' + sctp.port + '\\r\\n'];\n } else {\n output = ['m=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.port + '\\r\\n', 'c=IN IP4 0.0.0.0\\r\\n', 'a=sctpmap:' + sctp.port + ' ' + sctp.protocol + ' 65535\\r\\n'];\n }\n if (sctp.maxMessageSize !== undefined) {\n output.push('a=max-message-size:' + sctp.maxMessageSize + '\\r\\n');\n }\n return output.join('');\n};\n\n// Generate a session ID for SDP.\n// https://tools.ietf.org/html/draft-ietf-rtcweb-jsep-20#section-5.2.1\n// recommends using a cryptographically random +ve 64-bit value\n// but right now this should be acceptable and within the right range\nSDPUtils.generateSessionId = function () {\n return Math.random().toString().substr(2, 22);\n};\n\n// Write boiler plate for start of SDP\n// sessId argument is optional - if not supplied it will\n// be generated randomly\n// sessVersion is optional and defaults to 2\n// sessUser is optional and defaults to 'thisisadapterortc'\nSDPUtils.writeSessionBoilerplate = function (sessId, sessVer, sessUser) {\n let sessionId;\n const version = sessVer !== undefined ? sessVer : 2;\n if (sessId) {\n sessionId = sessId;\n } else {\n sessionId = SDPUtils.generateSessionId();\n }\n const user = sessUser || 'thisisadapterortc';\n // FIXME: sess-id should be an NTP timestamp.\n return 'v=0\\r\\n' + 'o=' + user + ' ' + sessionId + ' ' + version + ' IN IP4 127.0.0.1\\r\\n' + 's=-\\r\\n' + 't=0 0\\r\\n';\n};\n\n// Gets the direction from the mediaSection or the sessionpart.\nSDPUtils.getDirection = function (mediaSection, sessionpart) {\n // Look for sendrecv, sendonly, recvonly, inactive, default to sendrecv.\n const lines = SDPUtils.splitLines(mediaSection);\n for (let i = 0; i < lines.length; i++) {\n switch (lines[i]) {\n case 'a=sendrecv':\n case 'a=sendonly':\n case 'a=recvonly':\n case 'a=inactive':\n return lines[i].substring(2);\n default:\n // FIXME: What should happen here?\n }\n }\n if (sessionpart) {\n return SDPUtils.getDirection(sessionpart);\n }\n return 'sendrecv';\n};\n\nSDPUtils.getKind = function (mediaSection) {\n const lines = SDPUtils.splitLines(mediaSection);\n const mline = lines[0].split(' ');\n return mline[0].substring(2);\n};\n\nSDPUtils.isRejected = function (mediaSection) {\n return mediaSection.split(' ', 2)[1] === '0';\n};\n\nSDPUtils.parseMLine = function (mediaSection) {\n const lines = SDPUtils.splitLines(mediaSection);\n const parts = lines[0].substring(2).split(' ');\n return {\n kind: parts[0],\n port: parseInt(parts[1], 10),\n protocol: parts[2],\n fmt: parts.slice(3).join(' ')\n };\n};\n\nSDPUtils.parseOLine = function (mediaSection) {\n const line = SDPUtils.matchPrefix(mediaSection, 'o=')[0];\n const parts = line.substring(2).split(' ');\n return {\n username: parts[0],\n sessionId: parts[1],\n sessionVersion: parseInt(parts[2], 10),\n netType: parts[3],\n addressType: parts[4],\n address: parts[5]\n };\n};\n\n// a very naive interpretation of a valid SDP.\nSDPUtils.isValidSDP = function (blob) {\n if (typeof blob !== 'string' || blob.length === 0) {\n return false;\n }\n const lines = SDPUtils.splitLines(blob);\n for (let i = 0; i < lines.length; i++) {\n if (lines[i].length < 2 || lines[i].charAt(1) !== '=') {\n return false;\n }\n // TODO: check the modifier a bit more.\n }\n return true;\n};\n\n// Expose public methods.\nif (typeof module === 'object') {\n module.exports = SDPUtils;\n}", "/*\n * Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.removeExtmapAllowMixed = removeExtmapAllowMixed;\nexports.shimAddIceCandidateNullOrEmpty = shimAddIceCandidateNullOrEmpty;\nexports.shimConnectionState = shimConnectionState;\nexports.shimMaxMessageSize = shimMaxMessageSize;\nexports.shimParameterlessSetLocalDescription = shimParameterlessSetLocalDescription;\nexports.shimRTCIceCandidate = shimRTCIceCandidate;\nexports.shimRTCIceCandidateRelayProtocol = shimRTCIceCandidateRelayProtocol;\nexports.shimSendThrowTypeError = shimSendThrowTypeError;\nvar _sdp = _interopRequireDefault(require(\"sdp\"));\nvar utils = _interopRequireWildcard(require(\"./utils\"));\nfunction _interopRequireWildcard(e, t) { if (\"function\" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, \"default\": e }; if (null === e || \"object\" != _typeof(e) && \"function\" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) \"default\" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { \"default\": e }; }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction shimRTCIceCandidate(window) {\n // foundation is arbitrarily chosen as an indicator for full support for\n // https://w3c.github.io/webrtc-pc/#rtcicecandidate-interface\n if (!window.RTCIceCandidate || window.RTCIceCandidate && 'foundation' in window.RTCIceCandidate.prototype) {\n return;\n }\n var NativeRTCIceCandidate = window.RTCIceCandidate;\n window.RTCIceCandidate = function RTCIceCandidate(args) {\n // Remove the a= which shouldn't be part of the candidate string.\n if (_typeof(args) === 'object' && args.candidate && args.candidate.indexOf('a=') === 0) {\n args = JSON.parse(JSON.stringify(args));\n args.candidate = args.candidate.substring(2);\n }\n if (args.candidate && args.candidate.length) {\n // Augment the native candidate with the parsed fields.\n var nativeCandidate = new NativeRTCIceCandidate(args);\n var parsedCandidate = _sdp[\"default\"].parseCandidate(args.candidate);\n for (var key in parsedCandidate) {\n if (!(key in nativeCandidate)) {\n Object.defineProperty(nativeCandidate, key, {\n value: parsedCandidate[key]\n });\n }\n }\n\n // Override serializer to not serialize the extra attributes.\n nativeCandidate.toJSON = function toJSON() {\n return {\n candidate: nativeCandidate.candidate,\n sdpMid: nativeCandidate.sdpMid,\n sdpMLineIndex: nativeCandidate.sdpMLineIndex,\n usernameFragment: nativeCandidate.usernameFragment\n };\n };\n return nativeCandidate;\n }\n return new NativeRTCIceCandidate(args);\n };\n window.RTCIceCandidate.prototype = NativeRTCIceCandidate.prototype;\n\n // Hook up the augmented candidate in onicecandidate and\n // addEventListener('icecandidate', ...)\n utils.wrapPeerConnectionEvent(window, 'icecandidate', function (e) {\n if (e.candidate) {\n Object.defineProperty(e, 'candidate', {\n value: new window.RTCIceCandidate(e.candidate),\n writable: 'false'\n });\n }\n return e;\n });\n}\nfunction shimRTCIceCandidateRelayProtocol(window) {\n if (!window.RTCIceCandidate || window.RTCIceCandidate && 'relayProtocol' in window.RTCIceCandidate.prototype) {\n return;\n }\n\n // Hook up the augmented candidate in onicecandidate and\n // addEventListener('icecandidate', ...)\n utils.wrapPeerConnectionEvent(window, 'icecandidate', function (e) {\n if (e.candidate) {\n var parsedCandidate = _sdp[\"default\"].parseCandidate(e.candidate.candidate);\n if (parsedCandidate.type === 'relay') {\n // This is a libwebrtc-specific mapping of local type preference\n // to relayProtocol.\n e.candidate.relayProtocol = {\n 0: 'tls',\n 1: 'tcp',\n 2: 'udp'\n }[parsedCandidate.priority >> 24];\n }\n }\n return e;\n });\n}\nfunction shimMaxMessageSize(window, browserDetails) {\n if (!window.RTCPeerConnection) {\n return;\n }\n if (!('sctp' in window.RTCPeerConnection.prototype)) {\n Object.defineProperty(window.RTCPeerConnection.prototype, 'sctp', {\n get: function get() {\n return typeof this._sctp === 'undefined' ? null : this._sctp;\n }\n });\n }\n var sctpInDescription = function sctpInDescription(description) {\n if (!description || !description.sdp) {\n return false;\n }\n var sections = _sdp[\"default\"].splitSections(description.sdp);\n sections.shift();\n return sections.some(function (mediaSection) {\n var mLine = _sdp[\"default\"].parseMLine(mediaSection);\n return mLine && mLine.kind === 'application' && mLine.protocol.indexOf('SCTP') !== -1;\n });\n };\n var getRemoteFirefoxVersion = function getRemoteFirefoxVersion(description) {\n // TODO: Is there a better solution for detecting Firefox?\n var match = description.sdp.match(/mozilla...THIS_IS_SDPARTA-(\\d+)/);\n if (match === null || match.length < 2) {\n return -1;\n }\n var version = parseInt(match[1], 10);\n // Test for NaN (yes, this is ugly)\n return version !== version ? -1 : version;\n };\n var getCanSendMaxMessageSize = function getCanSendMaxMessageSize(remoteIsFirefox) {\n // Every implementation we know can send at least 64 KiB.\n // Note: Although Chrome is technically able to send up to 256 KiB, the\n // data does not reach the other peer reliably.\n // See: https://bugs.chromium.org/p/webrtc/issues/detail?id=8419\n var canSendMaxMessageSize = 65536;\n if (browserDetails.browser === 'firefox') {\n if (browserDetails.version < 57) {\n if (remoteIsFirefox === -1) {\n // FF < 57 will send in 16 KiB chunks using the deprecated PPID\n // fragmentation.\n canSendMaxMessageSize = 16384;\n } else {\n // However, other FF (and RAWRTC) can reassemble PPID-fragmented\n // messages. Thus, supporting ~2 GiB when sending.\n canSendMaxMessageSize = 2147483637;\n }\n } else if (browserDetails.version < 60) {\n // Currently, all FF >= 57 will reset the remote maximum message size\n // to the default value when a data channel is created at a later\n // stage. :(\n // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1426831\n canSendMaxMessageSize = browserDetails.version === 57 ? 65535 : 65536;\n } else {\n // FF >= 60 supports sending ~2 GiB\n canSendMaxMessageSize = 2147483637;\n }\n }\n return canSendMaxMessageSize;\n };\n var getMaxMessageSize = function getMaxMessageSize(description, remoteIsFirefox) {\n // Note: 65536 bytes is the default value from the SDP spec. Also,\n // every implementation we know supports receiving 65536 bytes.\n var maxMessageSize = 65536;\n\n // FF 57 has a slightly incorrect default remote max message size, so\n // we need to adjust it here to avoid a failure when sending.\n // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1425697\n if (browserDetails.browser === 'firefox' && browserDetails.version === 57) {\n maxMessageSize = 65535;\n }\n var match = _sdp[\"default\"].matchPrefix(description.sdp, 'a=max-message-size:');\n if (match.length > 0) {\n maxMessageSize = parseInt(match[0].substring(19), 10);\n } else if (browserDetails.browser === 'firefox' && remoteIsFirefox !== -1) {\n // If the maximum message size is not present in the remote SDP and\n // both local and remote are Firefox, the remote peer can receive\n // ~2 GiB.\n maxMessageSize = 2147483637;\n }\n return maxMessageSize;\n };\n var origSetRemoteDescription = window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription() {\n this._sctp = null;\n // Chrome decided to not expose .sctp in plan-b mode.\n // As usual, adapter.js has to do an 'ugly worakaround'\n // to cover up the mess.\n if (browserDetails.browser === 'chrome' && browserDetails.version >= 76) {\n var _this$getConfiguratio = this.getConfiguration(),\n sdpSemantics = _this$getConfiguratio.sdpSemantics;\n if (sdpSemantics === 'plan-b') {\n Object.defineProperty(this, 'sctp', {\n get: function get() {\n return typeof this._sctp === 'undefined' ? null : this._sctp;\n },\n enumerable: true,\n configurable: true\n });\n }\n }\n if (sctpInDescription(arguments[0])) {\n // Check if the remote is FF.\n var isFirefox = getRemoteFirefoxVersion(arguments[0]);\n\n // Get the maximum message size the local peer is capable of sending\n var canSendMMS = getCanSendMaxMessageSize(isFirefox);\n\n // Get the maximum message size of the remote peer.\n var remoteMMS = getMaxMessageSize(arguments[0], isFirefox);\n\n // Determine final maximum message size\n var maxMessageSize;\n if (canSendMMS === 0 && remoteMMS === 0) {\n maxMessageSize = Number.POSITIVE_INFINITY;\n } else if (canSendMMS === 0 || remoteMMS === 0) {\n maxMessageSize = Math.max(canSendMMS, remoteMMS);\n } else {\n maxMessageSize = Math.min(canSendMMS, remoteMMS);\n }\n\n // Create a dummy RTCSctpTransport object and the 'maxMessageSize'\n // attribute.\n var sctp = {};\n Object.defineProperty(sctp, 'maxMessageSize', {\n get: function get() {\n return maxMessageSize;\n }\n });\n this._sctp = sctp;\n }\n return origSetRemoteDescription.apply(this, arguments);\n };\n}\nfunction shimSendThrowTypeError(window) {\n if (!(window.RTCPeerConnection && 'createDataChannel' in window.RTCPeerConnection.prototype)) {\n return;\n }\n\n // Note: Although Firefox >= 57 has a native implementation, the maximum\n // message size can be reset for all data channels at a later stage.\n // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1426831\n\n function wrapDcSend(dc, pc) {\n var origDataChannelSend = dc.send;\n dc.send = function send() {\n var data = arguments[0];\n var length = data.length || data.size || data.byteLength;\n if (dc.readyState === 'open' && pc.sctp && length > pc.sctp.maxMessageSize) {\n throw new TypeError('Message too large (can send a maximum of ' + pc.sctp.maxMessageSize + ' bytes)');\n }\n return origDataChannelSend.apply(dc, arguments);\n };\n }\n var origCreateDataChannel = window.RTCPeerConnection.prototype.createDataChannel;\n window.RTCPeerConnection.prototype.createDataChannel = function createDataChannel() {\n var dataChannel = origCreateDataChannel.apply(this, arguments);\n wrapDcSend(dataChannel, this);\n return dataChannel;\n };\n utils.wrapPeerConnectionEvent(window, 'datachannel', function (e) {\n wrapDcSend(e.channel, e.target);\n return e;\n });\n}\n\n/* shims RTCConnectionState by pretending it is the same as iceConnectionState.\n * See https://bugs.chromium.org/p/webrtc/issues/detail?id=6145#c12\n * for why this is a valid hack in Chrome. In Firefox it is slightly incorrect\n * since DTLS failures would be hidden. See\n * https://bugzilla.mozilla.org/show_bug.cgi?id=1265827\n * for the Firefox tracking bug.\n */\nfunction shimConnectionState(window) {\n if (!window.RTCPeerConnection || 'connectionState' in window.RTCPeerConnection.prototype) {\n return;\n }\n var proto = window.RTCPeerConnection.prototype;\n Object.defineProperty(proto, 'connectionState', {\n get: function get() {\n return {\n completed: 'connected',\n checking: 'connecting'\n }[this.iceConnectionState] || this.iceConnectionState;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(proto, 'onconnectionstatechange', {\n get: function get() {\n return this._onconnectionstatechange || null;\n },\n set: function set(cb) {\n if (this._onconnectionstatechange) {\n this.removeEventListener('connectionstatechange', this._onconnectionstatechange);\n delete this._onconnectionstatechange;\n }\n if (cb) {\n this.addEventListener('connectionstatechange', this._onconnectionstatechange = cb);\n }\n },\n enumerable: true,\n configurable: true\n });\n ['setLocalDescription', 'setRemoteDescription'].forEach(function (method) {\n var origMethod = proto[method];\n proto[method] = function () {\n if (!this._connectionstatechangepoly) {\n this._connectionstatechangepoly = function (e) {\n var pc = e.target;\n if (pc._lastConnectionState !== pc.connectionState) {\n pc._lastConnectionState = pc.connectionState;\n var newEvent = new Event('connectionstatechange', e);\n pc.dispatchEvent(newEvent);\n }\n return e;\n };\n this.addEventListener('iceconnectionstatechange', this._connectionstatechangepoly);\n }\n return origMethod.apply(this, arguments);\n };\n });\n}\nfunction removeExtmapAllowMixed(window, browserDetails) {\n /* remove a=extmap-allow-mixed for webrtc.org < M71 */\n if (!window.RTCPeerConnection) {\n return;\n }\n if (browserDetails.browser === 'chrome' && browserDetails.version >= 71) {\n return;\n }\n if (browserDetails.browser === 'safari' && browserDetails._safariVersion >= 13.1) {\n return;\n }\n var nativeSRD = window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription(desc) {\n if (desc && desc.sdp && desc.sdp.indexOf('\\na=extmap-allow-mixed') !== -1) {\n var sdp = desc.sdp.split('\\n').filter(function (line) {\n return line.trim() !== 'a=extmap-allow-mixed';\n }).join('\\n');\n // Safari enforces read-only-ness of RTCSessionDescription fields.\n if (window.RTCSessionDescription && desc instanceof window.RTCSessionDescription) {\n arguments[0] = new window.RTCSessionDescription({\n type: desc.type,\n sdp: sdp\n });\n } else {\n desc.sdp = sdp;\n }\n }\n return nativeSRD.apply(this, arguments);\n };\n}\nfunction shimAddIceCandidateNullOrEmpty(window, browserDetails) {\n // Support for addIceCandidate(null or undefined)\n // as well as addIceCandidate({candidate: \"\", ...})\n // https://bugs.chromium.org/p/chromium/issues/detail?id=978582\n // Note: must be called before other polyfills which change the signature.\n if (!(window.RTCPeerConnection && window.RTCPeerConnection.prototype)) {\n return;\n }\n var nativeAddIceCandidate = window.RTCPeerConnection.prototype.addIceCandidate;\n if (!nativeAddIceCandidate || nativeAddIceCandidate.length === 0) {\n return;\n }\n window.RTCPeerConnection.prototype.addIceCandidate = function addIceCandidate() {\n if (!arguments[0]) {\n if (arguments[1]) {\n arguments[1].apply(null);\n }\n return Promise.resolve();\n }\n // Firefox 68+ emits and processes {candidate: \"\", ...}, ignore\n // in older versions.\n // Native support for ignoring exists for Chrome M77+.\n // Safari ignores as well, exact version unknown but works in the same\n // version that also ignores addIceCandidate(null).\n if ((browserDetails.browser === 'chrome' && browserDetails.version < 78 || browserDetails.browser === 'firefox' && browserDetails.version < 68 || browserDetails.browser === 'safari') && arguments[0] && arguments[0].candidate === '') {\n return Promise.resolve();\n }\n return nativeAddIceCandidate.apply(this, arguments);\n };\n}\n\n// Note: Make sure to call this ahead of APIs that modify\n// setLocalDescription.length\nfunction shimParameterlessSetLocalDescription(window, browserDetails) {\n if (!(window.RTCPeerConnection && window.RTCPeerConnection.prototype)) {\n return;\n }\n var nativeSetLocalDescription = window.RTCPeerConnection.prototype.setLocalDescription;\n if (!nativeSetLocalDescription || nativeSetLocalDescription.length === 0) {\n return;\n }\n window.RTCPeerConnection.prototype.setLocalDescription = function setLocalDescription() {\n var _this = this;\n var desc = arguments[0] || {};\n if (_typeof(desc) !== 'object' || desc.type && desc.sdp) {\n return nativeSetLocalDescription.apply(this, arguments);\n }\n // The remaining steps should technically happen when SLD comes off the\n // RTCPeerConnection's operations chain (not ahead of going on it), but\n // this is too difficult to shim. Instead, this shim only covers the\n // common case where the operations chain is empty. This is imperfect, but\n // should cover many cases. Rationale: Even if we can't reduce the glare\n // window to zero on imperfect implementations, there's value in tapping\n // into the perfect negotiation pattern that several browsers support.\n desc = {\n type: desc.type,\n sdp: desc.sdp\n };\n if (!desc.type) {\n switch (this.signalingState) {\n case 'stable':\n case 'have-local-offer':\n case 'have-remote-pranswer':\n desc.type = 'offer';\n break;\n default:\n desc.type = 'answer';\n break;\n }\n }\n if (desc.sdp || desc.type !== 'offer' && desc.type !== 'answer') {\n return nativeSetLocalDescription.apply(this, [desc]);\n }\n var func = desc.type === 'offer' ? this.createOffer : this.createAnswer;\n return func.apply(this).then(function (d) {\n return nativeSetLocalDescription.apply(_this, [d]);\n });\n };\n}\n", "\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.adapterFactory = adapterFactory;\nvar utils = _interopRequireWildcard(require(\"./utils\"));\nvar chromeShim = _interopRequireWildcard(require(\"./chrome/chrome_shim\"));\nvar firefoxShim = _interopRequireWildcard(require(\"./firefox/firefox_shim\"));\nvar safariShim = _interopRequireWildcard(require(\"./safari/safari_shim\"));\nvar commonShim = _interopRequireWildcard(require(\"./common_shim\"));\nvar sdp = _interopRequireWildcard(require(\"sdp\"));\nfunction _interopRequireWildcard(e, t) { if (\"function\" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, \"default\": e }; if (null === e || \"object\" != _typeof(e) && \"function\" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) \"default\" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }\n/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n\n// Browser shims.\n\n// Shimming starts here.\nfunction adapterFactory() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n window = _ref.window;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n shimChrome: true,\n shimFirefox: true,\n shimSafari: true\n };\n // Utils.\n var logging = utils.log;\n var browserDetails = utils.detectBrowser(window);\n var adapter = {\n browserDetails: browserDetails,\n commonShim: commonShim,\n extractVersion: utils.extractVersion,\n disableLog: utils.disableLog,\n disableWarnings: utils.disableWarnings,\n // Expose sdp as a convenience. For production apps include directly.\n sdp: sdp\n };\n\n // Shim browser if found.\n switch (browserDetails.browser) {\n case 'chrome':\n if (!chromeShim || !chromeShim.shimPeerConnection || !options.shimChrome) {\n logging('Chrome shim is not included in this adapter release.');\n return adapter;\n }\n if (browserDetails.version === null) {\n logging('Chrome shim can not determine version, not shimming.');\n return adapter;\n }\n logging('adapter.js shimming chrome.');\n // Export to the adapter global object visible in the browser.\n adapter.browserShim = chromeShim;\n\n // Must be called before shimPeerConnection.\n commonShim.shimAddIceCandidateNullOrEmpty(window, browserDetails);\n commonShim.shimParameterlessSetLocalDescription(window, browserDetails);\n chromeShim.shimGetUserMedia(window, browserDetails);\n chromeShim.shimMediaStream(window, browserDetails);\n chromeShim.shimPeerConnection(window, browserDetails);\n chromeShim.shimOnTrack(window, browserDetails);\n chromeShim.shimAddTrackRemoveTrack(window, browserDetails);\n chromeShim.shimGetSendersWithDtmf(window, browserDetails);\n chromeShim.shimSenderReceiverGetStats(window, browserDetails);\n chromeShim.fixNegotiationNeeded(window, browserDetails);\n commonShim.shimRTCIceCandidate(window, browserDetails);\n commonShim.shimRTCIceCandidateRelayProtocol(window, browserDetails);\n commonShim.shimConnectionState(window, browserDetails);\n commonShim.shimMaxMessageSize(window, browserDetails);\n commonShim.shimSendThrowTypeError(window, browserDetails);\n commonShim.removeExtmapAllowMixed(window, browserDetails);\n break;\n case 'firefox':\n if (!firefoxShim || !firefoxShim.shimPeerConnection || !options.shimFirefox) {\n logging('Firefox shim is not included in this adapter release.');\n return adapter;\n }\n logging('adapter.js shimming firefox.');\n // Export to the adapter global object visible in the browser.\n adapter.browserShim = firefoxShim;\n\n // Must be called before shimPeerConnection.\n commonShim.shimAddIceCandidateNullOrEmpty(window, browserDetails);\n commonShim.shimParameterlessSetLocalDescription(window, browserDetails);\n firefoxShim.shimGetUserMedia(window, browserDetails);\n firefoxShim.shimPeerConnection(window, browserDetails);\n firefoxShim.shimOnTrack(window, browserDetails);\n firefoxShim.shimRemoveStream(window, browserDetails);\n firefoxShim.shimSenderGetStats(window, browserDetails);\n firefoxShim.shimReceiverGetStats(window, browserDetails);\n firefoxShim.shimRTCDataChannel(window, browserDetails);\n firefoxShim.shimAddTransceiver(window, browserDetails);\n firefoxShim.shimGetParameters(window, browserDetails);\n firefoxShim.shimCreateOffer(window, browserDetails);\n firefoxShim.shimCreateAnswer(window, browserDetails);\n commonShim.shimRTCIceCandidate(window, browserDetails);\n commonShim.shimConnectionState(window, browserDetails);\n commonShim.shimMaxMessageSize(window, browserDetails);\n commonShim.shimSendThrowTypeError(window, browserDetails);\n break;\n case 'safari':\n if (!safariShim || !options.shimSafari) {\n logging('Safari shim is not included in this adapter release.');\n return adapter;\n }\n logging('adapter.js shimming safari.');\n // Export to the adapter global object visible in the browser.\n adapter.browserShim = safariShim;\n\n // Must be called before shimCallbackAPI.\n commonShim.shimAddIceCandidateNullOrEmpty(window, browserDetails);\n commonShim.shimParameterlessSetLocalDescription(window, browserDetails);\n safariShim.shimRTCIceServerUrls(window, browserDetails);\n safariShim.shimCreateOfferLegacy(window, browserDetails);\n safariShim.shimCallbacksAPI(window, browserDetails);\n safariShim.shimLocalStreamsAPI(window, browserDetails);\n safariShim.shimRemoteStreamsAPI(window, browserDetails);\n safariShim.shimTrackEventTransceiver(window, browserDetails);\n safariShim.shimGetUserMedia(window, browserDetails);\n safariShim.shimAudioContext(window, browserDetails);\n commonShim.shimRTCIceCandidate(window, browserDetails);\n commonShim.shimRTCIceCandidateRelayProtocol(window, browserDetails);\n commonShim.shimMaxMessageSize(window, browserDetails);\n commonShim.shimSendThrowTypeError(window, browserDetails);\n commonShim.removeExtmapAllowMixed(window, browserDetails);\n break;\n default:\n logging('Unsupported browser!');\n break;\n }\n return adapter;\n}\n", "/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\nvar _adapter_factory = require(\"./adapter_factory.js\");\nvar adapter = (0, _adapter_factory.adapterFactory)({\n window: typeof window === 'undefined' ? undefined : window\n});\nvar _default = exports[\"default\"] = adapter;\n", "'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n", "// Integer Utility\n\nexport const UINT32_MAX = 0xffff_ffff;\n\n// DataView extension to handle int64 / uint64,\n// where the actual range is 53-bits integer (a.k.a. safe integer)\n\nexport function setUint64(view: DataView, offset: number, value: number): void {\n const high = value / 0x1_0000_0000;\n const low = value; // high bits are truncated by DataView\n view.setUint32(offset, high);\n view.setUint32(offset + 4, low);\n}\n\nexport function setInt64(view: DataView, offset: number, value: number): void {\n const high = Math.floor(value / 0x1_0000_0000);\n const low = value; // high bits are truncated by DataView\n view.setUint32(offset, high);\n view.setUint32(offset + 4, low);\n}\n\nexport function getInt64(view: DataView, offset: number): number {\n const high = view.getInt32(offset);\n const low = view.getUint32(offset + 4);\n return high * 0x1_0000_0000 + low;\n}\n\nexport function getUint64(view: DataView, offset: number): number {\n const high = view.getUint32(offset);\n const low = view.getUint32(offset + 4);\n return high * 0x1_0000_0000 + low;\n}\n", "/* eslint-disable @typescript-eslint/no-unnecessary-condition */\nimport { UINT32_MAX } from \"./int\";\n\nconst TEXT_ENCODING_AVAILABLE =\n (typeof process === \"undefined\" || process?.env?.[\"TEXT_ENCODING\"] !== \"never\") &&\n typeof TextEncoder !== \"undefined\" &&\n typeof TextDecoder !== \"undefined\";\n\nexport function utf8Count(str: string): number {\n const strLength = str.length;\n\n let byteLength = 0;\n let pos = 0;\n while (pos < strLength) {\n let value = str.charCodeAt(pos++);\n\n if ((value & 0xffffff80) === 0) {\n // 1-byte\n byteLength++;\n continue;\n } else if ((value & 0xfffff800) === 0) {\n // 2-bytes\n byteLength += 2;\n } else {\n // handle surrogate pair\n if (value >= 0xd800 && value <= 0xdbff) {\n // high surrogate\n if (pos < strLength) {\n const extra = str.charCodeAt(pos);\n if ((extra & 0xfc00) === 0xdc00) {\n ++pos;\n value = ((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000;\n }\n }\n }\n\n if ((value & 0xffff0000) === 0) {\n // 3-byte\n byteLength += 3;\n } else {\n // 4-byte\n byteLength += 4;\n }\n }\n }\n return byteLength;\n}\n\nexport function utf8EncodeJs(str: string, output: Uint8Array, outputOffset: number): void {\n const strLength = str.length;\n let offset = outputOffset;\n let pos = 0;\n while (pos < strLength) {\n let value = str.charCodeAt(pos++);\n\n if ((value & 0xffffff80) === 0) {\n // 1-byte\n output[offset++] = value;\n continue;\n } else if ((value & 0xfffff800) === 0) {\n // 2-bytes\n output[offset++] = ((value >> 6) & 0x1f) | 0xc0;\n } else {\n // handle surrogate pair\n if (value >= 0xd800 && value <= 0xdbff) {\n // high surrogate\n if (pos < strLength) {\n const extra = str.charCodeAt(pos);\n if ((extra & 0xfc00) === 0xdc00) {\n ++pos;\n value = ((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000;\n }\n }\n }\n\n if ((value & 0xffff0000) === 0) {\n // 3-byte\n output[offset++] = ((value >> 12) & 0x0f) | 0xe0;\n output[offset++] = ((value >> 6) & 0x3f) | 0x80;\n } else {\n // 4-byte\n output[offset++] = ((value >> 18) & 0x07) | 0xf0;\n output[offset++] = ((value >> 12) & 0x3f) | 0x80;\n output[offset++] = ((value >> 6) & 0x3f) | 0x80;\n }\n }\n\n output[offset++] = (value & 0x3f) | 0x80;\n }\n}\n\nconst sharedTextEncoder = TEXT_ENCODING_AVAILABLE ? new TextEncoder() : undefined;\nexport const TEXT_ENCODER_THRESHOLD = !TEXT_ENCODING_AVAILABLE\n ? UINT32_MAX\n : typeof process !== \"undefined\" && process?.env?.[\"TEXT_ENCODING\"] !== \"force\"\n ? 200\n : 0;\n\nfunction utf8EncodeTEencode(str: string, output: Uint8Array, outputOffset: number): void {\n output.set(sharedTextEncoder!.encode(str), outputOffset);\n}\n\nfunction utf8EncodeTEencodeInto(str: string, output: Uint8Array, outputOffset: number): void {\n sharedTextEncoder!.encodeInto(str, output.subarray(outputOffset));\n}\n\nexport const utf8EncodeTE = sharedTextEncoder?.encodeInto ? utf8EncodeTEencodeInto : utf8EncodeTEencode;\n\nconst CHUNK_SIZE = 0x1_000;\n\nexport function utf8DecodeJs(bytes: Uint8Array, inputOffset: number, byteLength: number): string {\n let offset = inputOffset;\n const end = offset + byteLength;\n\n const units: Array<number> = [];\n let result = \"\";\n while (offset < end) {\n const byte1 = bytes[offset++]!;\n if ((byte1 & 0x80) === 0) {\n // 1 byte\n units.push(byte1);\n } else if ((byte1 & 0xe0) === 0xc0) {\n // 2 bytes\n const byte2 = bytes[offset++]! & 0x3f;\n units.push(((byte1 & 0x1f) << 6) | byte2);\n } else if ((byte1 & 0xf0) === 0xe0) {\n // 3 bytes\n const byte2 = bytes[offset++]! & 0x3f;\n const byte3 = bytes[offset++]! & 0x3f;\n units.push(((byte1 & 0x1f) << 12) | (byte2 << 6) | byte3);\n } else if ((byte1 & 0xf8) === 0xf0) {\n // 4 bytes\n const byte2 = bytes[offset++]! & 0x3f;\n const byte3 = bytes[offset++]! & 0x3f;\n const byte4 = bytes[offset++]! & 0x3f;\n let unit = ((byte1 & 0x07) << 0x12) | (byte2 << 0x0c) | (byte3 << 0x06) | byte4;\n if (unit > 0xffff) {\n unit -= 0x10000;\n units.push(((unit >>> 10) & 0x3ff) | 0xd800);\n unit = 0xdc00 | (unit & 0x3ff);\n }\n units.push(unit);\n } else {\n units.push(byte1);\n }\n\n if (units.length >= CHUNK_SIZE) {\n result += String.fromCharCode(...units);\n units.length = 0;\n }\n }\n\n if (units.length > 0) {\n result += String.fromCharCode(...units);\n }\n\n return result;\n}\n\nconst sharedTextDecoder = TEXT_ENCODING_AVAILABLE ? new TextDecoder() : null;\nexport const TEXT_DECODER_THRESHOLD = !TEXT_ENCODING_AVAILABLE\n ? UINT32_MAX\n : typeof process !== \"undefined\" && process?.env?.[\"TEXT_DECODER\"] !== \"force\"\n ? 200\n : 0;\n\nexport function utf8DecodeTD(bytes: Uint8Array, inputOffset: number, byteLength: number): string {\n const stringBytes = bytes.subarray(inputOffset, inputOffset + byteLength);\n return sharedTextDecoder!.decode(stringBytes);\n}\n", "/**\n * ExtData is used to handle Extension Types that are not registered to ExtensionCodec.\n */\nexport class ExtData {\n constructor(readonly type: number, readonly data: Uint8Array) {}\n}\n", "export class DecodeError extends Error {\n constructor(message: string) {\n super(message);\n\n // fix the prototype chain in a cross-platform way\n const proto: typeof DecodeError.prototype = Object.create(DecodeError.prototype);\n Object.setPrototypeOf(this, proto);\n\n Object.defineProperty(this, \"name\", {\n configurable: true,\n enumerable: false,\n value: DecodeError.name,\n });\n }\n}\n", "// https://github.com/msgpack/msgpack/blob/master/spec.md#timestamp-extension-type\nimport { DecodeError } from \"./DecodeError\";\nimport { getInt64, setInt64 } from \"./utils/int\";\n\nexport const EXT_TIMESTAMP = -1;\n\nexport type TimeSpec = {\n sec: number;\n nsec: number;\n};\n\nconst TIMESTAMP32_MAX_SEC = 0x100000000 - 1; // 32-bit unsigned int\nconst TIMESTAMP64_MAX_SEC = 0x400000000 - 1; // 34-bit unsigned int\n\nexport function encodeTimeSpecToTimestamp({ sec, nsec }: TimeSpec): Uint8Array {\n if (sec >= 0 && nsec >= 0 && sec <= TIMESTAMP64_MAX_SEC) {\n // Here sec >= 0 && nsec >= 0\n if (nsec === 0 && sec <= TIMESTAMP32_MAX_SEC) {\n // timestamp 32 = { sec32 (unsigned) }\n const rv = new Uint8Array(4);\n const view = new DataView(rv.buffer);\n view.setUint32(0, sec);\n return rv;\n } else {\n // timestamp 64 = { nsec30 (unsigned), sec34 (unsigned) }\n const secHigh = sec / 0x100000000;\n const secLow = sec & 0xffffffff;\n const rv = new Uint8Array(8);\n const view = new DataView(rv.buffer);\n // nsec30 | secHigh2\n view.setUint32(0, (nsec << 2) | (secHigh & 0x3));\n // secLow32\n view.setUint32(4, secLow);\n return rv;\n }\n } else {\n // timestamp 96 = { nsec32 (unsigned), sec64 (signed) }\n const rv = new Uint8Array(12);\n const view = new DataView(rv.buffer);\n view.setUint32(0, nsec);\n setInt64(view, 4, sec);\n return rv;\n }\n}\n\nexport function encodeDateToTimeSpec(date: Date): TimeSpec {\n const msec = date.getTime();\n const sec = Math.floor(msec / 1e3);\n const nsec = (msec - sec * 1e3) * 1e6;\n\n // Normalizes { sec, nsec } to ensure nsec is unsigned.\n const nsecInSec = Math.floor(nsec / 1e9);\n return {\n sec: sec + nsecInSec,\n nsec: nsec - nsecInSec * 1e9,\n };\n}\n\nexport function encodeTimestampExtension(object: unknown): Uint8Array | null {\n if (object instanceof Date) {\n const timeSpec = encodeDateToTimeSpec(object);\n return encodeTimeSpecToTimestamp(timeSpec);\n } else {\n return null;\n }\n}\n\nexport function decodeTimestampToTimeSpec(data: Uint8Array): TimeSpec {\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n // data may be 32, 64, or 96 bits\n switch (data.byteLength) {\n case 4: {\n // timestamp 32 = { sec32 }\n const sec = view.getUint32(0);\n const nsec = 0;\n return { sec, nsec };\n }\n case 8: {\n // timestamp 64 = { nsec30, sec34 }\n const nsec30AndSecHigh2 = view.getUint32(0);\n const secLow32 = view.getUint32(4);\n const sec = (nsec30AndSecHigh2 & 0x3) * 0x100000000 + secLow32;\n const nsec = nsec30AndSecHigh2 >>> 2;\n return { sec, nsec };\n }\n case 12: {\n // timestamp 96 = { nsec32 (unsigned), sec64 (signed) }\n\n const sec = getInt64(view, 4);\n const nsec = view.getUint32(0);\n return { sec, nsec };\n }\n default:\n throw new DecodeError(`Unrecognized data size for timestamp (expected 4, 8, or 12): ${data.length}`);\n }\n}\n\nexport function decodeTimestampExtension(data: Uint8Array): Date {\n const timeSpec = decodeTimestampToTimeSpec(data);\n return new Date(timeSpec.sec * 1e3 + timeSpec.nsec / 1e6);\n}\n\nexport const timestampExtension = {\n type: EXT_TIMESTAMP,\n encode: encodeTimestampExtension,\n decode: decodeTimestampExtension,\n};\n", "// ExtensionCodec to handle MessagePack extensions\n\nimport { ExtData } from \"./ExtData\";\nimport { timestampExtension } from \"./timestamp\";\n\nexport type ExtensionDecoderType<ContextType> = (\n data: Uint8Array,\n extensionType: number,\n context: ContextType,\n) => unknown;\n\nexport type ExtensionEncoderType<ContextType> = (input: unknown, context: ContextType) => Uint8Array | null;\n\n// immutable interface to ExtensionCodec\nexport type ExtensionCodecType<ContextType> = {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n __brand?: ContextType;\n tryToEncode(object: unknown, context: ContextType): ExtData | null;\n decode(data: Uint8Array, extType: number, context: ContextType): unknown;\n};\n\nexport class ExtensionCodec<ContextType = undefined> implements ExtensionCodecType<ContextType> {\n public static readonly defaultCodec: ExtensionCodecType<undefined> = new ExtensionCodec();\n\n // ensures ExtensionCodecType<X> matches ExtensionCodec<X>\n // this will make type errors a lot more clear\n // eslint-disable-next-line @typescript-eslint/naming-convention\n __brand?: ContextType;\n\n // built-in extensions\n private readonly builtInEncoders: Array<ExtensionEncoderType<ContextType> | undefined | null> = [];\n private readonly builtInDecoders: Array<ExtensionDecoderType<ContextType> | undefined | null> = [];\n\n // custom extensions\n private readonly encoders: Array<ExtensionEncoderType<ContextType> | undefined | null> = [];\n private readonly decoders: Array<ExtensionDecoderType<ContextType> | undefined | null> = [];\n\n public constructor() {\n this.register(timestampExtension);\n }\n\n public register({\n type,\n encode,\n decode,\n }: {\n type: number;\n encode: ExtensionEncoderType<ContextType>;\n decode: ExtensionDecoderType<ContextType>;\n }): void {\n if (type >= 0) {\n // custom extensions\n this.encoders[type] = encode;\n this.decoders[type] = decode;\n } else {\n // built-in extensions\n const index = 1 + type;\n this.builtInEncoders[index] = encode;\n this.builtInDecoders[index] = decode;\n }\n }\n\n public tryToEncode(object: unknown, context: ContextType): ExtData | null {\n // built-in extensions\n for (let i = 0; i < this.builtInEncoders.length; i++) {\n const encodeExt = this.builtInEncoders[i];\n if (encodeExt != null) {\n const data = encodeExt(object, context);\n if (data != null) {\n const type = -1 - i;\n return new ExtData(type, data);\n }\n }\n }\n\n // custom extensions\n for (let i = 0; i < this.encoders.length; i++) {\n const encodeExt = this.encoders[i];\n if (encodeExt != null) {\n const data = encodeExt(object, context);\n if (data != null) {\n const type = i;\n return new ExtData(type, data);\n }\n }\n }\n\n if (object instanceof ExtData) {\n // to keep ExtData as is\n return object;\n }\n return null;\n }\n\n public decode(data: Uint8Array, type: number, context: ContextType): unknown {\n const decodeExt = type < 0 ? this.builtInDecoders[-1 - type] : this.decoders[type];\n if (decodeExt) {\n return decodeExt(data, type, context);\n } else {\n // decode() does not fail, returns ExtData instead.\n return new ExtData(type, data);\n }\n }\n}\n", "export function ensureUint8Array(buffer: ArrayLike<number> | Uint8Array | ArrayBufferView | ArrayBuffer): Uint8Array {\n if (buffer instanceof Uint8Array) {\n return buffer;\n } else if (ArrayBuffer.isView(buffer)) {\n return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n } else if (buffer instanceof ArrayBuffer) {\n return new Uint8Array(buffer);\n } else {\n // ArrayLike<number>\n return Uint8Array.from(buffer);\n }\n}\n\nexport function createDataView(buffer: ArrayLike<number> | ArrayBufferView | ArrayBuffer): DataView {\n if (buffer instanceof ArrayBuffer) {\n return new DataView(buffer);\n }\n\n const bufferView = ensureUint8Array(buffer);\n return new DataView(bufferView.buffer, bufferView.byteOffset, bufferView.byteLength);\n}\n", "import { utf8EncodeJs, utf8Count, TEXT_ENCODER_THRESHOLD, utf8EncodeTE } from \"./utils/utf8\";\nimport { ExtensionCodec, ExtensionCodecType } from \"./ExtensionCodec\";\nimport { setInt64, setUint64 } from \"./utils/int\";\nimport { ensureUint8Array } from \"./utils/typedArrays\";\nimport type { ExtData } from \"./ExtData\";\n\nexport const DEFAULT_MAX_DEPTH = 100;\nexport const DEFAULT_INITIAL_BUFFER_SIZE = 2048;\n\nexport class Encoder<ContextType = undefined> {\n private pos = 0;\n private view = new DataView(new ArrayBuffer(this.initialBufferSize));\n private bytes = new Uint8Array(this.view.buffer);\n\n public constructor(\n private readonly extensionCodec: ExtensionCodecType<ContextType> = ExtensionCodec.defaultCodec as any,\n private readonly context: ContextType = undefined as any,\n private readonly maxDepth = DEFAULT_MAX_DEPTH,\n private readonly initialBufferSize = DEFAULT_INITIAL_BUFFER_SIZE,\n private readonly sortKeys = false,\n private readonly forceFloat32 = false,\n private readonly ignoreUndefined = false,\n private readonly forceIntegerToFloat = false,\n ) {}\n\n private reinitializeState() {\n this.pos = 0;\n }\n\n /**\n * This is almost equivalent to {@link Encoder#encode}, but it returns an reference of the encoder's internal buffer and thus much faster than {@link Encoder#encode}.\n *\n * @returns Encodes the object and returns a shared reference the encoder's internal buffer.\n */\n public encodeSharedRef(object: unknown): Uint8Array {\n this.reinitializeState();\n this.doEncode(object, 1);\n return this.bytes.subarray(0, this.pos);\n }\n\n /**\n * @returns Encodes the object and returns a copy of the encoder's internal buffer.\n */\n public encode(object: unknown): Uint8Array {\n this.reinitializeState();\n this.doEncode(object, 1);\n return this.bytes.slice(0, this.pos);\n }\n\n private doEncode(object: unknown, depth: number): void {\n if (depth > this.maxDepth) {\n throw new Error(`Too deep objects in depth ${depth}`);\n }\n\n if (object == null) {\n this.encodeNil();\n } else if (typeof object === \"boolean\") {\n this.encodeBoolean(object);\n } else if (typeof object === \"number\") {\n this.encodeNumber(object);\n } else if (typeof object === \"string\") {\n this.encodeString(object);\n } else {\n this.encodeObject(object, depth);\n }\n }\n\n private ensureBufferSizeToWrite(sizeToWrite: number) {\n const requiredSize = this.pos + sizeToWrite;\n\n if (this.view.byteLength < requiredSize) {\n this.resizeBuffer(requiredSize * 2);\n }\n }\n\n private resizeBuffer(newSize: number) {\n const newBuffer = new ArrayBuffer(newSize);\n const newBytes = new Uint8Array(newBuffer);\n const newView = new DataView(newBuffer);\n\n newBytes.set(this.bytes);\n\n this.view = newView;\n this.bytes = newBytes;\n }\n\n private encodeNil() {\n this.writeU8(0xc0);\n }\n\n private encodeBoolean(object: boolean) {\n if (object === false) {\n this.writeU8(0xc2);\n } else {\n this.writeU8(0xc3);\n }\n }\n private encodeNumber(object: number) {\n if (Number.isSafeInteger(object) && !this.forceIntegerToFloat) {\n if (object >= 0) {\n if (object < 0x80) {\n // positive fixint\n this.writeU8(object);\n } else if (object < 0x100) {\n // uint 8\n this.writeU8(0xcc);\n this.writeU8(object);\n } else if (object < 0x10000) {\n // uint 16\n this.writeU8(0xcd);\n this.writeU16(object);\n } else if (object < 0x100000000) {\n // uint 32\n this.writeU8(0xce);\n this.writeU32(object);\n } else {\n // uint 64\n this.writeU8(0xcf);\n this.writeU64(object);\n }\n } else {\n if (object >= -0x20) {\n // negative fixint\n this.writeU8(0xe0 | (object + 0x20));\n } else if (object >= -0x80) {\n // int 8\n this.writeU8(0xd0);\n this.writeI8(object);\n } else if (object >= -0x8000) {\n // int 16\n this.writeU8(0xd1);\n this.writeI16(object);\n } else if (object >= -0x80000000) {\n // int 32\n this.writeU8(0xd2);\n this.writeI32(object);\n } else {\n // int 64\n this.writeU8(0xd3);\n this.writeI64(object);\n }\n }\n } else {\n // non-integer numbers\n if (this.forceFloat32) {\n // float 32\n this.writeU8(0xca);\n this.writeF32(object);\n } else {\n // float 64\n this.writeU8(0xcb);\n this.writeF64(object);\n }\n }\n }\n\n private writeStringHeader(byteLength: number) {\n if (byteLength < 32) {\n // fixstr\n this.writeU8(0xa0 + byteLength);\n } else if (byteLength < 0x100) {\n // str 8\n this.writeU8(0xd9);\n this.writeU8(byteLength);\n } else if (byteLength < 0x10000) {\n // str 16\n this.writeU8(0xda);\n this.writeU16(byteLength);\n } else if (byteLength < 0x100000000) {\n // str 32\n this.writeU8(0xdb);\n this.writeU32(byteLength);\n } else {\n throw new Error(`Too long string: ${byteLength} bytes in UTF-8`);\n }\n }\n\n private encodeString(object: string) {\n const maxHeaderSize = 1 + 4;\n const strLength = object.length;\n\n if (strLength > TEXT_ENCODER_THRESHOLD) {\n const byteLength = utf8Count(object);\n this.ensureBufferSizeToWrite(maxHeaderSize + byteLength);\n this.writeStringHeader(byteLength);\n utf8EncodeTE(object, this.bytes, this.pos);\n this.pos += byteLength;\n } else {\n const byteLength = utf8Count(object);\n this.ensureBufferSizeToWrite(maxHeaderSize + byteLength);\n this.writeStringHeader(byteLength);\n utf8EncodeJs(object, this.bytes, this.pos);\n this.pos += byteLength;\n }\n }\n\n private encodeObject(object: unknown, depth: number) {\n // try to encode objects with custom codec first of non-primitives\n const ext = this.extensionCodec.tryToEncode(object, this.context);\n if (ext != null) {\n this.encodeExtension(ext);\n } else if (Array.isArray(object)) {\n this.encodeArray(object, depth);\n } else if (ArrayBuffer.isView(object)) {\n this.encodeBinary(object);\n } else if (typeof object === \"object\") {\n this.encodeMap(object as Record<string, unknown>, depth);\n } else {\n // symbol, function and other special object come here unless extensionCodec handles them.\n throw new Error(`Unrecognized object: ${Object.prototype.toString.apply(object)}`);\n }\n }\n\n private encodeBinary(object: ArrayBufferView) {\n const size = object.byteLength;\n if (size < 0x100) {\n // bin 8\n this.writeU8(0xc4);\n this.writeU8(size);\n } else if (size < 0x10000) {\n // bin 16\n this.writeU8(0xc5);\n this.writeU16(size);\n } else if (size < 0x100000000) {\n // bin 32\n this.writeU8(0xc6);\n this.writeU32(size);\n } else {\n throw new Error(`Too large binary: ${size}`);\n }\n const bytes = ensureUint8Array(object);\n this.writeU8a(bytes);\n }\n\n private encodeArray(object: Array<unknown>, depth: number) {\n const size = object.length;\n if (size < 16) {\n // fixarray\n this.writeU8(0x90 + size);\n } else if (size < 0x10000) {\n // array 16\n this.writeU8(0xdc);\n this.writeU16(size);\n } else if (size < 0x100000000) {\n // array 32\n this.writeU8(0xdd);\n this.writeU32(size);\n } else {\n throw new Error(`Too large array: ${size}`);\n }\n for (const item of object) {\n this.doEncode(item, depth + 1);\n }\n }\n\n private countWithoutUndefined(object: Record<string, unknown>, keys: ReadonlyArray<string>): number {\n let count = 0;\n\n for (const key of keys) {\n if (object[key] !== undefined) {\n count++;\n }\n }\n\n return count;\n }\n\n private encodeMap(object: Record<string, unknown>, depth: number) {\n const keys = Object.keys(object);\n if (this.sortKeys) {\n keys.sort();\n }\n\n const size = this.ignoreUndefined ? this.countWithoutUndefined(object, keys) : keys.length;\n\n if (size < 16) {\n // fixmap\n this.writeU8(0x80 + size);\n } else if (size < 0x10000) {\n // map 16\n this.writeU8(0xde);\n this.writeU16(size);\n } else if (size < 0x100000000) {\n // map 32\n this.writeU8(0xdf);\n this.writeU32(size);\n } else {\n throw new Error(`Too large map object: ${size}`);\n }\n\n for (const key of keys) {\n const value = object[key];\n\n if (!(this.ignoreUndefined && value === undefined)) {\n this.encodeString(key);\n this.doEncode(value, depth + 1);\n }\n }\n }\n\n private encodeExtension(ext: ExtData) {\n const size = ext.data.length;\n if (size === 1) {\n // fixext 1\n this.writeU8(0xd4);\n } else if (size === 2) {\n // fixext 2\n this.writeU8(0xd5);\n } else if (size === 4) {\n // fixext 4\n this.writeU8(0xd6);\n } else if (size === 8) {\n // fixext 8\n this.writeU8(0xd7);\n } else if (size === 16) {\n // fixext 16\n this.writeU8(0xd8);\n } else if (size < 0x100) {\n // ext 8\n this.writeU8(0xc7);\n this.writeU8(size);\n } else if (size < 0x10000) {\n // ext 16\n this.writeU8(0xc8);\n this.writeU16(size);\n } else if (size < 0x100000000) {\n // ext 32\n this.writeU8(0xc9);\n this.writeU32(size);\n } else {\n throw new Error(`Too large extension object: ${size}`);\n }\n this.writeI8(ext.type);\n this.writeU8a(ext.data);\n }\n\n private writeU8(value: number) {\n this.ensureBufferSizeToWrite(1);\n\n this.view.setUint8(this.pos, value);\n this.pos++;\n }\n\n private writeU8a(values: ArrayLike<number>) {\n const size = values.length;\n this.ensureBufferSizeToWrite(size);\n\n this.bytes.set(values, this.pos);\n this.pos += size;\n }\n\n private writeI8(value: number) {\n this.ensureBufferSizeToWrite(1);\n\n this.view.setInt8(this.pos, value);\n this.pos++;\n }\n\n private writeU16(value: number) {\n this.ensureBufferSizeToWrite(2);\n\n this.view.setUint16(this.pos, value);\n this.pos += 2;\n }\n\n private writeI16(value: number) {\n this.ensureBufferSizeToWrite(2);\n\n this.view.setInt16(this.pos, value);\n this.pos += 2;\n }\n\n private writeU32(value: number) {\n this.ensureBufferSizeToWrite(4);\n\n this.view.setUint32(this.pos, value);\n this.pos += 4;\n }\n\n private writeI32(value: number) {\n this.ensureBufferSizeToWrite(4);\n\n this.view.setInt32(this.pos, value);\n this.pos += 4;\n }\n\n private writeF32(value: number) {\n this.ensureBufferSizeToWrite(4);\n this.view.setFloat32(this.pos, value);\n this.pos += 4;\n }\n\n private writeF64(value: number) {\n this.ensureBufferSizeToWrite(8);\n this.view.setFloat64(this.pos, value);\n this.pos += 8;\n }\n\n private writeU64(value: number) {\n this.ensureBufferSizeToWrite(8);\n\n setUint64(this.view, this.pos, value);\n this.pos += 8;\n }\n\n private writeI64(value: number) {\n this.ensureBufferSizeToWrite(8);\n\n setInt64(this.view, this.pos, value);\n this.pos += 8;\n }\n}\n", "import { Encoder } from \"./Encoder\";\nimport type { ExtensionCodecType } from \"./ExtensionCodec\";\nimport type { ContextOf, SplitUndefined } from \"./context\";\n\nexport type EncodeOptions<ContextType = undefined> = Partial<\n Readonly<{\n extensionCodec: ExtensionCodecType<ContextType>;\n\n /**\n * The maximum depth in nested objects and arrays.\n *\n * Defaults to 100.\n */\n maxDepth: number;\n\n /**\n * The initial size of the internal buffer.\n *\n * Defaults to 2048.\n */\n initialBufferSize: number;\n\n /**\n * If `true`, the keys of an object is sorted. In other words, the encoded\n * binary is canonical and thus comparable to another encoded binary.\n *\n * Defaults to `false`. If enabled, it spends more time in encoding objects.\n */\n sortKeys: boolean;\n /**\n * If `true`, non-integer numbers are encoded in float32, not in float64 (the default).\n *\n * Only use it if precisions don't matter.\n *\n * Defaults to `false`.\n */\n forceFloat32: boolean;\n\n /**\n * If `true`, an object property with `undefined` value are ignored.\n * e.g. `{ foo: undefined }` will be encoded as `{}`, as `JSON.stringify()` does.\n *\n * Defaults to `false`. If enabled, it spends more time in encoding objects.\n */\n ignoreUndefined: boolean;\n\n /**\n * If `true`, integer numbers are encoded as floating point numbers,\n * with the `forceFloat32` option taken into account.\n *\n * Defaults to `false`.\n */\n forceIntegerToFloat: boolean;\n }>\n> &\n ContextOf<ContextType>;\n\nconst defaultEncodeOptions: EncodeOptions = {};\n\n/**\n * It encodes `value` in the MessagePack format and\n * returns a byte buffer.\n *\n * The returned buffer is a slice of a larger `ArrayBuffer`, so you have to use its `#byteOffset` and `#byteLength` in order to convert it to another typed arrays including NodeJS `Buffer`.\n */\nexport function encode<ContextType = undefined>(\n value: unknown,\n options: EncodeOptions<SplitUndefined<ContextType>> = defaultEncodeOptions as any,\n): Uint8Array {\n const encoder = new Encoder(\n options.extensionCodec,\n (options as typeof options & { context: any }).context,\n options.maxDepth,\n options.initialBufferSize,\n options.sortKeys,\n options.forceFloat32,\n options.ignoreUndefined,\n options.forceIntegerToFloat,\n );\n return encoder.encodeSharedRef(value);\n}\n", "export function prettyByte(byte: number): string {\n return `${byte < 0 ? \"-\" : \"\"}0x${Math.abs(byte).toString(16).padStart(2, \"0\")}`;\n}\n", "import { utf8DecodeJs } from \"./utils/utf8\";\n\nconst DEFAULT_MAX_KEY_LENGTH = 16;\nconst DEFAULT_MAX_LENGTH_PER_KEY = 16;\n\nexport interface KeyDecoder {\n canBeCached(byteLength: number): boolean;\n decode(bytes: Uint8Array, inputOffset: number, byteLength: number): string;\n}\ninterface KeyCacheRecord {\n readonly bytes: Uint8Array;\n readonly str: string;\n}\n\nexport class CachedKeyDecoder implements KeyDecoder {\n hit = 0;\n miss = 0;\n private readonly caches: Array<Array<KeyCacheRecord>>;\n\n constructor(readonly maxKeyLength = DEFAULT_MAX_KEY_LENGTH, readonly maxLengthPerKey = DEFAULT_MAX_LENGTH_PER_KEY) {\n // avoid `new Array(N)`, which makes a sparse array,\n // because a sparse array is typically slower than a non-sparse array.\n this.caches = [];\n for (let i = 0; i < this.maxKeyLength; i++) {\n this.caches.push([]);\n }\n }\n\n public canBeCached(byteLength: number): boolean {\n return byteLength > 0 && byteLength <= this.maxKeyLength;\n }\n\n private find(bytes: Uint8Array, inputOffset: number, byteLength: number): string | null {\n const records = this.caches[byteLength - 1]!;\n\n FIND_CHUNK: for (const record of records) {\n const recordBytes = record.bytes;\n\n for (let j = 0; j < byteLength; j++) {\n if (recordBytes[j] !== bytes[inputOffset + j]) {\n continue FIND_CHUNK;\n }\n }\n return record.str;\n }\n return null;\n }\n\n private store(bytes: Uint8Array, value: string) {\n const records = this.caches[bytes.length - 1]!;\n const record: KeyCacheRecord = { bytes, str: value };\n\n if (records.length >= this.maxLengthPerKey) {\n // `records` are full!\n // Set `record` to an arbitrary position.\n records[(Math.random() * records.length) | 0] = record;\n } else {\n records.push(record);\n }\n }\n\n public decode(bytes: Uint8Array, inputOffset: number, byteLength: number): string {\n const cachedValue = this.find(bytes, inputOffset, byteLength);\n if (cachedValue != null) {\n this.hit++;\n return cachedValue;\n }\n this.miss++;\n\n const str = utf8DecodeJs(bytes, inputOffset, byteLength);\n // Ensure to copy a slice of bytes because the byte may be NodeJS Buffer and Buffer#slice() returns a reference to its internal ArrayBuffer.\n const slicedCopyOfBytes = Uint8Array.prototype.slice.call(bytes, inputOffset, inputOffset + byteLength);\n this.store(slicedCopyOfBytes, str);\n return str;\n }\n}\n", "import { prettyByte } from \"./utils/prettyByte\";\nimport { ExtensionCodec, ExtensionCodecType } from \"./ExtensionCodec\";\nimport { getInt64, getUint64, UINT32_MAX } from \"./utils/int\";\nimport { utf8DecodeJs, TEXT_DECODER_THRESHOLD, utf8DecodeTD } from \"./utils/utf8\";\nimport { createDataView, ensureUint8Array } from \"./utils/typedArrays\";\nimport { CachedKeyDecoder, KeyDecoder } from \"./CachedKeyDecoder\";\nimport { DecodeError } from \"./DecodeError\";\n\nconst enum State {\n ARRAY,\n MAP_KEY,\n MAP_VALUE,\n}\n\ntype MapKeyType = string | number;\n\nconst isValidMapKeyType = (key: unknown): key is MapKeyType => {\n const keyType = typeof key;\n\n return keyType === \"string\" || keyType === \"number\";\n};\n\ntype StackMapState = {\n type: State.MAP_KEY | State.MAP_VALUE;\n size: number;\n key: MapKeyType | null;\n readCount: number;\n map: Record<string, unknown>;\n};\n\ntype StackArrayState = {\n type: State.ARRAY;\n size: number;\n array: Array<unknown>;\n position: number;\n};\n\ntype StackState = StackArrayState | StackMapState;\n\nconst HEAD_BYTE_REQUIRED = -1;\n\nconst EMPTY_VIEW = new DataView(new ArrayBuffer(0));\nconst EMPTY_BYTES = new Uint8Array(EMPTY_VIEW.buffer);\n\n// IE11: Hack to support IE11.\n// IE11: Drop this hack and just use RangeError when IE11 is obsolete.\nexport const DataViewIndexOutOfBoundsError: typeof Error = (() => {\n try {\n // IE11: The spec says it should throw RangeError,\n // IE11: but in IE11 it throws TypeError.\n EMPTY_VIEW.getInt8(0);\n } catch (e: any) {\n return e.constructor;\n }\n throw new Error(\"never reached\");\n})();\n\nconst MORE_DATA = new DataViewIndexOutOfBoundsError(\"Insufficient data\");\n\nconst sharedCachedKeyDecoder = new CachedKeyDecoder();\n\nexport class Decoder<ContextType = undefined> {\n private totalPos = 0;\n private pos = 0;\n\n private view = EMPTY_VIEW;\n private bytes = EMPTY_BYTES;\n private headByte = HEAD_BYTE_REQUIRED;\n private readonly stack: Array<StackState> = [];\n\n public constructor(\n private readonly extensionCodec: ExtensionCodecType<ContextType> = ExtensionCodec.defaultCodec as any,\n private readonly context: ContextType = undefined as any,\n private readonly maxStrLength = UINT32_MAX,\n private readonly maxBinLength = UINT32_MAX,\n private readonly maxArrayLength = UINT32_MAX,\n private readonly maxMapLength = UINT32_MAX,\n private readonly maxExtLength = UINT32_MAX,\n private readonly keyDecoder: KeyDecoder | null = sharedCachedKeyDecoder,\n ) {}\n\n private reinitializeState() {\n this.totalPos = 0;\n this.headByte = HEAD_BYTE_REQUIRED;\n this.stack.length = 0;\n\n // view, bytes, and pos will be re-initialized in setBuffer()\n }\n\n private setBuffer(buffer: ArrayLike<number> | BufferSource): void {\n this.bytes = ensureUint8Array(buffer);\n this.view = createDataView(this.bytes);\n this.pos = 0;\n }\n\n private appendBuffer(buffer: ArrayLike<number> | BufferSource) {\n if (this.headByte === HEAD_BYTE_REQUIRED && !this.hasRemaining(1)) {\n this.setBuffer(buffer);\n } else {\n const remainingData = this.bytes.subarray(this.pos);\n const newData = ensureUint8Array(buffer);\n\n // concat remainingData + newData\n const newBuffer = new Uint8Array(remainingData.length + newData.length);\n newBuffer.set(remainingData);\n newBuffer.set(newData, remainingData.length);\n this.setBuffer(newBuffer);\n }\n }\n\n private hasRemaining(size: number) {\n return this.view.byteLength - this.pos >= size;\n }\n\n private createExtraByteError(posToShow: number): Error {\n const { view, pos } = this;\n return new RangeError(`Extra ${view.byteLength - pos} of ${view.byteLength} byte(s) found at buffer[${posToShow}]`);\n }\n\n /**\n * @throws {@link DecodeError}\n * @throws {@link RangeError}\n */\n public decode(buffer: ArrayLike<number> | BufferSource): unknown {\n this.reinitializeState();\n this.setBuffer(buffer);\n\n const object = this.doDecodeSync();\n if (this.hasRemaining(1)) {\n throw this.createExtraByteError(this.pos);\n }\n return object;\n }\n\n public *decodeMulti(buffer: ArrayLike<number> | BufferSource): Generator<unknown, void, unknown> {\n this.reinitializeState();\n this.setBuffer(buffer);\n\n while (this.hasRemaining(1)) {\n yield this.doDecodeSync();\n }\n }\n\n public async decodeAsync(stream: AsyncIterable<ArrayLike<number> | BufferSource>): Promise<unknown> {\n let decoded = false;\n let object: unknown;\n for await (const buffer of stream) {\n if (decoded) {\n throw this.createExtraByteError(this.totalPos);\n }\n\n this.appendBuffer(buffer);\n\n try {\n object = this.doDecodeSync();\n decoded = true;\n } catch (e) {\n if (!(e instanceof DataViewIndexOutOfBoundsError)) {\n throw e; // rethrow\n }\n // fallthrough\n }\n this.totalPos += this.pos;\n }\n\n if (decoded) {\n if (this.hasRemaining(1)) {\n throw this.createExtraByteError(this.totalPos);\n }\n return object;\n }\n\n const { headByte, pos, totalPos } = this;\n throw new RangeError(\n `Insufficient data in parsing ${prettyByte(headByte)} at ${totalPos} (${pos} in the current buffer)`,\n );\n }\n\n public decodeArrayStream(\n stream: AsyncIterable<ArrayLike<number> | BufferSource>,\n ): AsyncGenerator<unknown, void, unknown> {\n return this.decodeMultiAsync(stream, true);\n }\n\n public decodeStream(stream: AsyncIterable<ArrayLike<number> | BufferSource>): AsyncGenerator<unknown, void, unknown> {\n return this.decodeMultiAsync(stream, false);\n }\n\n private async *decodeMultiAsync(stream: AsyncIterable<ArrayLike<number> | BufferSource>, isArray: boolean) {\n let isArrayHeaderRequired = isArray;\n let arrayItemsLeft = -1;\n\n for await (const buffer of stream) {\n if (isArray && arrayItemsLeft === 0) {\n throw this.createExtraByteError(this.totalPos);\n }\n\n this.appendBuffer(buffer);\n\n if (isArrayHeaderRequired) {\n arrayItemsLeft = this.readArraySize();\n isArrayHeaderRequired = false;\n this.complete();\n }\n\n try {\n while (true) {\n yield this.doDecodeSync();\n if (--arrayItemsLeft === 0) {\n break;\n }\n }\n } catch (e) {\n if (!(e instanceof DataViewIndexOutOfBoundsError)) {\n throw e; // rethrow\n }\n // fallthrough\n }\n this.totalPos += this.pos;\n }\n }\n\n private doDecodeSync(): unknown {\n DECODE: while (true) {\n const headByte = this.readHeadByte();\n let object: unknown;\n\n if (headByte >= 0xe0) {\n // negative fixint (111x xxxx) 0xe0 - 0xff\n object = headByte - 0x100;\n } else if (headByte < 0xc0) {\n if (headByte < 0x80) {\n // positive fixint (0xxx xxxx) 0x00 - 0x7f\n object = headByte;\n } else if (headByte < 0x90) {\n // fixmap (1000 xxxx) 0x80 - 0x8f\n const size = headByte - 0x80;\n if (size !== 0) {\n this.pushMapState(size);\n this.complete();\n continue DECODE;\n } else {\n object = {};\n }\n } else if (headByte < 0xa0) {\n // fixarray (1001 xxxx) 0x90 - 0x9f\n const size = headByte - 0x90;\n if (size !== 0) {\n this.pushArrayState(size);\n this.complete();\n continue DECODE;\n } else {\n object = [];\n }\n } else {\n // fixstr (101x xxxx) 0xa0 - 0xbf\n const byteLength = headByte - 0xa0;\n object = this.decodeUtf8String(byteLength, 0);\n }\n } else if (headByte === 0xc0) {\n // nil\n object = null;\n } else if (headByte === 0xc2) {\n // false\n object = false;\n } else if (headByte === 0xc3) {\n // true\n object = true;\n } else if (headByte === 0xca) {\n // float 32\n object = this.readF32();\n } else if (headByte === 0xcb) {\n // float 64\n object = this.readF64();\n } else if (headByte === 0xcc) {\n // uint 8\n object = this.readU8();\n } else if (headByte === 0xcd) {\n // uint 16\n object = this.readU16();\n } else if (headByte === 0xce) {\n // uint 32\n object = this.readU32();\n } else if (headByte === 0xcf) {\n // uint 64\n object = this.readU64();\n } else if (headByte === 0xd0) {\n // int 8\n object = this.readI8();\n } else if (headByte === 0xd1) {\n // int 16\n object = this.readI16();\n } else if (headByte === 0xd2) {\n // int 32\n object = this.readI32();\n } else if (headByte === 0xd3) {\n // int 64\n object = this.readI64();\n } else if (headByte === 0xd9) {\n // str 8\n const byteLength = this.lookU8();\n object = this.decodeUtf8String(byteLength, 1);\n } else if (headByte === 0xda) {\n // str 16\n const byteLength = this.lookU16();\n object = this.decodeUtf8String(byteLength, 2);\n } else if (headByte === 0xdb) {\n // str 32\n const byteLength = this.lookU32();\n object = this.decodeUtf8String(byteLength, 4);\n } else if (headByte === 0xdc) {\n // array 16\n const size = this.readU16();\n if (size !== 0) {\n this.pushArrayState(size);\n this.complete();\n continue DECODE;\n } else {\n object = [];\n }\n } else if (headByte === 0xdd) {\n // array 32\n const size = this.readU32();\n if (size !== 0) {\n this.pushArrayState(size);\n this.complete();\n continue DECODE;\n } else {\n object = [];\n }\n } else if (headByte === 0xde) {\n // map 16\n const size = this.readU16();\n if (size !== 0) {\n this.pushMapState(size);\n this.complete();\n continue DECODE;\n } else {\n object = {};\n }\n } else if (headByte === 0xdf) {\n // map 32\n const size = this.readU32();\n if (size !== 0) {\n this.pushMapState(size);\n this.complete();\n continue DECODE;\n } else {\n object = {};\n }\n } else if (headByte === 0xc4) {\n // bin 8\n const size = this.lookU8();\n object = this.decodeBinary(size, 1);\n } else if (headByte === 0xc5) {\n // bin 16\n const size = this.lookU16();\n object = this.decodeBinary(size, 2);\n } else if (headByte === 0xc6) {\n // bin 32\n const size = this.lookU32();\n object = this.decodeBinary(size, 4);\n } else if (headByte === 0xd4) {\n // fixext 1\n object = this.decodeExtension(1, 0);\n } else if (headByte === 0xd5) {\n // fixext 2\n object = this.decodeExtension(2, 0);\n } else if (headByte === 0xd6) {\n // fixext 4\n object = this.decodeExtension(4, 0);\n } else if (headByte === 0xd7) {\n // fixext 8\n object = this.decodeExtension(8, 0);\n } else if (headByte === 0xd8) {\n // fixext 16\n object = this.decodeExtension(16, 0);\n } else if (headByte === 0xc7) {\n // ext 8\n const size = this.lookU8();\n object = this.decodeExtension(size, 1);\n } else if (headByte === 0xc8) {\n // ext 16\n const size = this.lookU16();\n object = this.decodeExtension(size, 2);\n } else if (headByte === 0xc9) {\n // ext 32\n const size = this.lookU32();\n object = this.decodeExtension(size, 4);\n } else {\n throw new DecodeError(`Unrecognized type byte: ${prettyByte(headByte)}`);\n }\n\n this.complete();\n\n const stack = this.stack;\n while (stack.length > 0) {\n // arrays and maps\n const state = stack[stack.length - 1]!;\n if (state.type === State.ARRAY) {\n state.array[state.position] = object;\n state.position++;\n if (state.position === state.size) {\n stack.pop();\n object = state.array;\n } else {\n continue DECODE;\n }\n } else if (state.type === State.MAP_KEY) {\n if (!isValidMapKeyType(object)) {\n throw new DecodeError(\"The type of key must be string or number but \" + typeof object);\n }\n if (object === \"__proto__\") {\n throw new DecodeError(\"The key __proto__ is not allowed\");\n }\n\n state.key = object;\n state.type = State.MAP_VALUE;\n continue DECODE;\n } else {\n // it must be `state.type === State.MAP_VALUE` here\n\n state.map[state.key!] = object;\n state.readCount++;\n\n if (state.readCount === state.size) {\n stack.pop();\n object = state.map;\n } else {\n state.key = null;\n state.type = State.MAP_KEY;\n continue DECODE;\n }\n }\n }\n\n return object;\n }\n }\n\n private readHeadByte(): number {\n if (this.headByte === HEAD_BYTE_REQUIRED) {\n this.headByte = this.readU8();\n // console.log(\"headByte\", prettyByte(this.headByte));\n }\n\n return this.headByte;\n }\n\n private complete(): void {\n this.headByte = HEAD_BYTE_REQUIRED;\n }\n\n private readArraySize(): number {\n const headByte = this.readHeadByte();\n\n switch (headByte) {\n case 0xdc:\n return this.readU16();\n case 0xdd:\n return this.readU32();\n default: {\n if (headByte < 0xa0) {\n return headByte - 0x90;\n } else {\n throw new DecodeError(`Unrecognized array type byte: ${prettyByte(headByte)}`);\n }\n }\n }\n }\n\n private pushMapState(size: number) {\n if (size > this.maxMapLength) {\n throw new DecodeError(`Max length exceeded: map length (${size}) > maxMapLengthLength (${this.maxMapLength})`);\n }\n\n this.stack.push({\n type: State.MAP_KEY,\n size,\n key: null,\n readCount: 0,\n map: {},\n });\n }\n\n private pushArrayState(size: number) {\n if (size > this.maxArrayLength) {\n throw new DecodeError(`Max length exceeded: array length (${size}) > maxArrayLength (${this.maxArrayLength})`);\n }\n\n this.stack.push({\n type: State.ARRAY,\n size,\n array: new Array<unknown>(size),\n position: 0,\n });\n }\n\n private decodeUtf8String(byteLength: number, headerOffset: number): string {\n if (byteLength > this.maxStrLength) {\n throw new DecodeError(\n `Max length exceeded: UTF-8 byte length (${byteLength}) > maxStrLength (${this.maxStrLength})`,\n );\n }\n\n if (this.bytes.byteLength < this.pos + headerOffset + byteLength) {\n throw MORE_DATA;\n }\n\n const offset = this.pos + headerOffset;\n let object: string;\n if (this.stateIsMapKey() && this.keyDecoder?.canBeCached(byteLength)) {\n object = this.keyDecoder.decode(this.bytes, offset, byteLength);\n } else if (byteLength > TEXT_DECODER_THRESHOLD) {\n object = utf8DecodeTD(this.bytes, offset, byteLength);\n } else {\n object = utf8DecodeJs(this.bytes, offset, byteLength);\n }\n this.pos += headerOffset + byteLength;\n return object;\n }\n\n private stateIsMapKey(): boolean {\n if (this.stack.length > 0) {\n const state = this.stack[this.stack.length - 1]!;\n return state.type === State.MAP_KEY;\n }\n return false;\n }\n\n private decodeBinary(byteLength: number, headOffset: number): Uint8Array {\n if (byteLength > this.maxBinLength) {\n throw new DecodeError(`Max length exceeded: bin length (${byteLength}) > maxBinLength (${this.maxBinLength})`);\n }\n\n if (!this.hasRemaining(byteLength + headOffset)) {\n throw MORE_DATA;\n }\n\n const offset = this.pos + headOffset;\n const object = this.bytes.subarray(offset, offset + byteLength);\n this.pos += headOffset + byteLength;\n return object;\n }\n\n private decodeExtension(size: number, headOffset: number): unknown {\n if (size > this.maxExtLength) {\n throw new DecodeError(`Max length exceeded: ext length (${size}) > maxExtLength (${this.maxExtLength})`);\n }\n\n const extType = this.view.getInt8(this.pos + headOffset);\n const data = this.decodeBinary(size, headOffset + 1 /* extType */);\n return this.extensionCodec.decode(data, extType, this.context);\n }\n\n private lookU8() {\n return this.view.getUint8(this.pos);\n }\n\n private lookU16() {\n return this.view.getUint16(this.pos);\n }\n\n private lookU32() {\n return this.view.getUint32(this.pos);\n }\n\n private readU8(): number {\n const value = this.view.getUint8(this.pos);\n this.pos++;\n return value;\n }\n\n private readI8(): number {\n const value = this.view.getInt8(this.pos);\n this.pos++;\n return value;\n }\n\n private readU16(): number {\n const value = this.view.getUint16(this.pos);\n this.pos += 2;\n return value;\n }\n\n private readI16(): number {\n const value = this.view.getInt16(this.pos);\n this.pos += 2;\n return value;\n }\n\n private readU32(): number {\n const value = this.view.getUint32(this.pos);\n this.pos += 4;\n return value;\n }\n\n private readI32(): number {\n const value = this.view.getInt32(this.pos);\n this.pos += 4;\n return value;\n }\n\n private readU64(): number {\n const value = getUint64(this.view, this.pos);\n this.pos += 8;\n return value;\n }\n\n private readI64(): number {\n const value = getInt64(this.view, this.pos);\n this.pos += 8;\n return value;\n }\n\n private readF32() {\n const value = this.view.getFloat32(this.pos);\n this.pos += 4;\n return value;\n }\n\n private readF64() {\n const value = this.view.getFloat64(this.pos);\n this.pos += 8;\n return value;\n }\n}\n", "import { Decoder } from \"./Decoder\";\nimport type { ExtensionCodecType } from \"./ExtensionCodec\";\nimport type { ContextOf, SplitUndefined } from \"./context\";\n\nexport type DecodeOptions<ContextType = undefined> = Readonly<\n Partial<{\n extensionCodec: ExtensionCodecType<ContextType>;\n\n /**\n * Maximum string length.\n *\n * Defaults to 4_294_967_295 (UINT32_MAX).\n */\n maxStrLength: number;\n /**\n * Maximum binary length.\n *\n * Defaults to 4_294_967_295 (UINT32_MAX).\n */\n maxBinLength: number;\n /**\n * Maximum array length.\n *\n * Defaults to 4_294_967_295 (UINT32_MAX).\n */\n maxArrayLength: number;\n /**\n * Maximum map length.\n *\n * Defaults to 4_294_967_295 (UINT32_MAX).\n */\n maxMapLength: number;\n /**\n * Maximum extension length.\n *\n * Defaults to 4_294_967_295 (UINT32_MAX).\n */\n maxExtLength: number;\n }>\n> &\n ContextOf<ContextType>;\n\nexport const defaultDecodeOptions: DecodeOptions = {};\n\n/**\n * It decodes a single MessagePack object in a buffer.\n *\n * This is a synchronous decoding function.\n * See other variants for asynchronous decoding: {@link decodeAsync()}, {@link decodeStream()}, or {@link decodeArrayStream()}.\n *\n * @throws {@link RangeError} if the buffer is incomplete, including the case where the buffer is empty.\n * @throws {@link DecodeError} if the buffer contains invalid data.\n */\nexport function decode<ContextType = undefined>(\n buffer: ArrayLike<number> | BufferSource,\n options: DecodeOptions<SplitUndefined<ContextType>> = defaultDecodeOptions as any,\n): unknown {\n const decoder = new Decoder(\n options.extensionCodec,\n (options as typeof options & { context: any }).context,\n options.maxStrLength,\n options.maxBinLength,\n options.maxArrayLength,\n options.maxMapLength,\n options.maxExtLength,\n );\n return decoder.decode(buffer);\n}\n\n/**\n * It decodes multiple MessagePack objects in a buffer.\n * This is corresponding to {@link decodeMultiStream()}.\n *\n * @throws {@link RangeError} if the buffer is incomplete, including the case where the buffer is empty.\n * @throws {@link DecodeError} if the buffer contains invalid data.\n */\nexport function decodeMulti<ContextType = undefined>(\n buffer: ArrayLike<number> | BufferSource,\n options: DecodeOptions<SplitUndefined<ContextType>> = defaultDecodeOptions as any,\n): Generator<unknown, void, unknown> {\n const decoder = new Decoder(\n options.extensionCodec,\n (options as typeof options & { context: any }).context,\n options.maxStrLength,\n options.maxBinLength,\n options.maxArrayLength,\n options.maxMapLength,\n options.maxExtLength,\n );\n return decoder.decodeMulti(buffer);\n}\n", "// utility for whatwg streams\n\n// The living standard of whatwg streams says\n// ReadableStream is also AsyncIterable, but\n// as of June 2019, no browser implements it.\n// See https://streams.spec.whatwg.org/ for details\nexport type ReadableStreamLike<T> = AsyncIterable<T> | ReadableStream<T>;\n\nexport function isAsyncIterable<T>(object: ReadableStreamLike<T>): object is AsyncIterable<T> {\n return (object as any)[Symbol.asyncIterator] != null;\n}\n\nfunction assertNonNull<T>(value: T | null | undefined): asserts value is T {\n if (value == null) {\n throw new Error(\"Assertion Failure: value must not be null nor undefined\");\n }\n}\n\nexport async function* asyncIterableFromStream<T>(stream: ReadableStream<T>): AsyncIterable<T> {\n const reader = stream.getReader();\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n return;\n }\n assertNonNull(value);\n yield value;\n }\n } finally {\n reader.releaseLock();\n }\n}\n\nexport function ensureAsyncIterable<T>(streamLike: ReadableStreamLike<T>): AsyncIterable<T> {\n if (isAsyncIterable(streamLike)) {\n return streamLike;\n } else {\n return asyncIterableFromStream(streamLike);\n }\n}\n", "import { Decoder } from \"./Decoder\";\nimport { ensureAsyncIterable } from \"./utils/stream\";\nimport { defaultDecodeOptions } from \"./decode\";\nimport type { ReadableStreamLike } from \"./utils/stream\";\nimport type { DecodeOptions } from \"./decode\";\nimport type { SplitUndefined } from \"./context\";\n\n/**\n * @throws {@link RangeError} if the buffer is incomplete, including the case where the buffer is empty.\n * @throws {@link DecodeError} if the buffer contains invalid data.\n */\n export async function decodeAsync<ContextType>(\n streamLike: ReadableStreamLike<ArrayLike<number> | BufferSource>,\n options: DecodeOptions<SplitUndefined<ContextType>> = defaultDecodeOptions as any,\n): Promise<unknown> {\n const stream = ensureAsyncIterable(streamLike);\n\n const decoder = new Decoder(\n options.extensionCodec,\n (options as typeof options & { context: any }).context,\n options.maxStrLength,\n options.maxBinLength,\n options.maxArrayLength,\n options.maxMapLength,\n options.maxExtLength,\n );\n return decoder.decodeAsync(stream);\n}\n\n/**\n * @throws {@link RangeError} if the buffer is incomplete, including the case where the buffer is empty.\n * @throws {@link DecodeError} if the buffer contains invalid data.\n */\n export function decodeArrayStream<ContextType>(\n streamLike: ReadableStreamLike<ArrayLike<number> | BufferSource>,\n options: DecodeOptions<SplitUndefined<ContextType>> = defaultDecodeOptions as any,\n): AsyncGenerator<unknown, void, unknown> {\n const stream = ensureAsyncIterable(streamLike);\n\n const decoder = new Decoder(\n options.extensionCodec,\n (options as typeof options & { context: any }).context,\n options.maxStrLength,\n options.maxBinLength,\n options.maxArrayLength,\n options.maxMapLength,\n options.maxExtLength,\n );\n\n return decoder.decodeArrayStream(stream);\n}\n\n/**\n * @throws {@link RangeError} if the buffer is incomplete, including the case where the buffer is empty.\n * @throws {@link DecodeError} if the buffer contains invalid data.\n */\nexport function decodeMultiStream<ContextType>(\n streamLike: ReadableStreamLike<ArrayLike<number> | BufferSource>,\n options: DecodeOptions<SplitUndefined<ContextType>> = defaultDecodeOptions as any,\n): AsyncGenerator<unknown, void, unknown> {\n const stream = ensureAsyncIterable(streamLike);\n\n const decoder = new Decoder(\n options.extensionCodec,\n (options as typeof options & { context: any }).context,\n options.maxStrLength,\n options.maxBinLength,\n options.maxArrayLength,\n options.maxMapLength,\n options.maxExtLength,\n );\n\n return decoder.decodeStream(stream);\n}\n\n/**\n * @deprecated Use {@link decodeMultiStream()} instead.\n */\nexport function decodeStream<ContextType>(\n streamLike: ReadableStreamLike<ArrayLike<number> | BufferSource>,\n options: DecodeOptions<SplitUndefined<ContextType>> = defaultDecodeOptions as any,\n): AsyncGenerator<unknown, void, unknown> {\n return decodeMultiStream(streamLike, options);\n}\n", "// Main Functions:\n\nimport { encode } from \"./encode\";\nexport { encode };\nimport type { EncodeOptions } from \"./encode\";\nexport type { EncodeOptions };\n\nimport { decode, decodeMulti } from \"./decode\";\nexport { decode, decodeMulti };\nimport type { DecodeOptions } from \"./decode\";\nexport { DecodeOptions };\n\nimport { decodeAsync, decodeArrayStream, decodeMultiStream, decodeStream } from \"./decodeAsync\";\nexport { decodeAsync, decodeArrayStream, decodeMultiStream, decodeStream };\n\nimport { Decoder, DataViewIndexOutOfBoundsError } from \"./Decoder\";\nimport { DecodeError } from \"./DecodeError\";\nexport { Decoder, DecodeError, DataViewIndexOutOfBoundsError };\n\nimport { Encoder } from \"./Encoder\";\nexport { Encoder };\n\n// Utilitiies for Extension Types:\n\nimport { ExtensionCodec } from \"./ExtensionCodec\";\nexport { ExtensionCodec };\nimport type { ExtensionCodecType, ExtensionDecoderType, ExtensionEncoderType } from \"./ExtensionCodec\";\nexport type { ExtensionCodecType, ExtensionDecoderType, ExtensionEncoderType };\nimport { ExtData } from \"./ExtData\";\nexport { ExtData };\n\nimport {\n EXT_TIMESTAMP,\n encodeDateToTimeSpec,\n encodeTimeSpecToTimestamp,\n decodeTimestampToTimeSpec,\n encodeTimestampExtension,\n decodeTimestampExtension,\n} from \"./timestamp\";\nexport {\n EXT_TIMESTAMP,\n encodeDateToTimeSpec,\n encodeTimeSpecToTimestamp,\n decodeTimestampToTimeSpec,\n encodeTimestampExtension,\n decodeTimestampExtension,\n};\n", "export { util, type Util } from \"./util\";\nimport { Peer } from \"./peer\";\nimport { MsgPackPeer } from \"./msgPackPeer\";\n\nexport type { PeerEvents, PeerOptions } from \"./peer\";\n\nexport type {\n\tPeerJSOption,\n\tPeerConnectOption,\n\tAnswerOption,\n\tCallOption,\n} from \"./optionInterfaces\";\nexport type { UtilSupportsObj } from \"./util\";\nexport type { DataConnection } from \"./dataconnection/DataConnection\";\nexport type { MediaConnection } from \"./mediaconnection\";\nexport type { LogLevel } from \"./logger\";\nexport * from \"./enums\";\n\nexport { BufferedConnection } from \"./dataconnection/BufferedConnection/BufferedConnection\";\nexport { StreamConnection } from \"./dataconnection/StreamConnection/StreamConnection\";\nexport { MsgPack } from \"./dataconnection/StreamConnection/MsgPack\";\nexport type { SerializerMapping } from \"./peer\";\n\nexport { Peer, MsgPackPeer };\n\nexport { PeerError } from \"./peerError\";\nexport default Peer;\n", "import { BinaryPackChunker } from \"./dataconnection/BufferedConnection/binaryPackChunker\";\nimport * as BinaryPack from \"peerjs-js-binarypack\";\nimport { Supports } from \"./supports\";\nimport { validateId } from \"./utils/validateId\";\nimport { randomToken } from \"./utils/randomToken\";\n\nexport interface UtilSupportsObj {\n\t/**\n\t * The current browser.\n\t * This property can be useful in determining whether two peers can connect.\n\t *\n\t * ```ts\n\t * if (util.browser === 'firefox') {\n\t * // OK to peer with Firefox peers.\n\t * }\n\t * ```\n\t *\n\t * `util.browser` can currently have the values\n\t * `'firefox', 'chrome', 'safari', 'edge', 'Not a supported browser.', 'Not a browser.' (unknown WebRTC-compatible agent).\n\t */\n\tbrowser: boolean;\n\twebRTC: boolean;\n\t/**\n\t * True if the current browser supports media streams and PeerConnection.\n\t */\n\taudioVideo: boolean;\n\t/**\n\t * True if the current browser supports DataChannel and PeerConnection.\n\t */\n\tdata: boolean;\n\tbinaryBlob: boolean;\n\t/**\n\t * True if the current browser supports reliable DataChannels.\n\t */\n\treliable: boolean;\n}\n\nconst DEFAULT_CONFIG = {\n\ticeServers: [\n\t\t{ urls: \"stun:stun.l.google.com:19302\" },\n\t\t{\n\t\t\turls: [\n\t\t\t\t\"turn:eu-0.turn.peerjs.com:3478\",\n\t\t\t\t\"turn:us-0.turn.peerjs.com:3478\",\n\t\t\t],\n\t\t\tusername: \"peerjs\",\n\t\t\tcredential: \"peerjsp\",\n\t\t},\n\t],\n\tsdpSemantics: \"unified-plan\",\n};\n\nexport class Util extends BinaryPackChunker {\n\tnoop(): void {}\n\n\treadonly CLOUD_HOST = \"0.peerjs.com\";\n\treadonly CLOUD_PORT = 443;\n\n\t// Browsers that need chunking:\n\treadonly chunkedBrowsers = { Chrome: 1, chrome: 1 };\n\n\t// Returns browser-agnostic default config\n\treadonly defaultConfig = DEFAULT_CONFIG;\n\n\treadonly browser = Supports.getBrowser();\n\treadonly browserVersion = Supports.getVersion();\n\n\tpack = BinaryPack.pack;\n\tunpack = BinaryPack.unpack;\n\n\t/**\n\t * A hash of WebRTC features mapped to booleans that correspond to whether the feature is supported by the current browser.\n\t *\n\t * :::caution\n\t * Only the properties documented here are guaranteed to be present on `util.supports`\n\t * :::\n\t */\n\treadonly supports = (function () {\n\t\tconst supported: UtilSupportsObj = {\n\t\t\tbrowser: Supports.isBrowserSupported(),\n\t\t\twebRTC: Supports.isWebRTCSupported(),\n\t\t\taudioVideo: false,\n\t\t\tdata: false,\n\t\t\tbinaryBlob: false,\n\t\t\treliable: false,\n\t\t};\n\n\t\tif (!supported.webRTC) return supported;\n\n\t\tlet pc: RTCPeerConnection;\n\n\t\ttry {\n\t\t\tpc = new RTCPeerConnection(DEFAULT_CONFIG);\n\n\t\t\tsupported.audioVideo = true;\n\n\t\t\tlet dc: RTCDataChannel;\n\n\t\t\ttry {\n\t\t\t\tdc = pc.createDataChannel(\"_PEERJSTEST\", { ordered: true });\n\t\t\t\tsupported.data = true;\n\t\t\t\tsupported.reliable = !!dc.ordered;\n\n\t\t\t\t// Binary test\n\t\t\t\ttry {\n\t\t\t\t\tdc.binaryType = \"blob\";\n\t\t\t\t\tsupported.binaryBlob = !Supports.isIOS;\n\t\t\t\t} catch (e) {}\n\t\t\t} catch (e) {\n\t\t\t} finally {\n\t\t\t\tif (dc) {\n\t\t\t\t\tdc.close();\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (e) {\n\t\t} finally {\n\t\t\tif (pc) {\n\t\t\t\tpc.close();\n\t\t\t}\n\t\t}\n\n\t\treturn supported;\n\t})();\n\n\t// Ensure alphanumeric ids\n\tvalidateId = validateId;\n\trandomToken = randomToken;\n\n\tblobToArrayBuffer(\n\t\tblob: Blob,\n\t\tcb: (arg: ArrayBuffer | null) => void,\n\t): FileReader {\n\t\tconst fr = new FileReader();\n\n\t\tfr.onload = function (evt) {\n\t\t\tif (evt.target) {\n\t\t\t\tcb(evt.target.result as ArrayBuffer);\n\t\t\t}\n\t\t};\n\n\t\tfr.readAsArrayBuffer(blob);\n\n\t\treturn fr;\n\t}\n\n\tbinaryStringToArrayBuffer(binary: string): ArrayBuffer | SharedArrayBuffer {\n\t\tconst byteArray = new Uint8Array(binary.length);\n\n\t\tfor (let i = 0; i < binary.length; i++) {\n\t\t\tbyteArray[i] = binary.charCodeAt(i) & 0xff;\n\t\t}\n\n\t\treturn byteArray.buffer;\n\t}\n\tisSecure(): boolean {\n\t\treturn location.protocol === \"https:\";\n\t}\n}\n\n/**\n * Provides a variety of helpful utilities.\n *\n * :::caution\n * Only the utilities documented here are guaranteed to be present on `util`.\n * Undocumented utilities can be removed without warning.\n * We don't consider these to be breaking changes.\n * :::\n */\nexport const util = new Util();\n", "export class BinaryPackChunker {\n\treadonly chunkedMTU = 16300; // The original 60000 bytes setting does not work when sending data from Firefox to Chrome, which is \"cut off\" after 16384 bytes and delivered individually.\n\n\t// Binary stuff\n\n\tprivate _dataCount: number = 1;\n\n\tchunk = (\n\t\tblob: ArrayBuffer,\n\t): { __peerData: number; n: number; total: number; data: Uint8Array }[] => {\n\t\tconst chunks = [];\n\t\tconst size = blob.byteLength;\n\t\tconst total = Math.ceil(size / this.chunkedMTU);\n\n\t\tlet index = 0;\n\t\tlet start = 0;\n\n\t\twhile (start < size) {\n\t\t\tconst end = Math.min(size, start + this.chunkedMTU);\n\t\t\tconst b = blob.slice(start, end);\n\n\t\t\tconst chunk = {\n\t\t\t\t__peerData: this._dataCount,\n\t\t\t\tn: index,\n\t\t\t\tdata: b,\n\t\t\t\ttotal,\n\t\t\t};\n\n\t\t\tchunks.push(chunk);\n\n\t\t\tstart = end;\n\t\t\tindex++;\n\t\t}\n\n\t\tthis._dataCount++;\n\n\t\treturn chunks;\n\t};\n}\n\nexport function concatArrayBuffers(bufs: Uint8Array[]) {\n\tlet size = 0;\n\tfor (const buf of bufs) {\n\t\tsize += buf.byteLength;\n\t}\n\tconst result = new Uint8Array(size);\n\tlet offset = 0;\n\tfor (const buf of bufs) {\n\t\tresult.set(buf, offset);\n\t\toffset += buf.byteLength;\n\t}\n\treturn result;\n}\n", "import webRTCAdapter_import from \"webrtc-adapter\";\n\nconst webRTCAdapter: typeof webRTCAdapter_import =\n\t//@ts-ignore\n\twebRTCAdapter_import.default || webRTCAdapter_import;\n\nexport const Supports = new (class {\n\treadonly isIOS =\n\t\ttypeof navigator !== \"undefined\"\n\t\t\t? [\"iPad\", \"iPhone\", \"iPod\"].includes(navigator.platform)\n\t\t\t: false;\n\treadonly supportedBrowsers = [\"firefox\", \"chrome\", \"safari\"];\n\n\treadonly minFirefoxVersion = 59;\n\treadonly minChromeVersion = 72;\n\treadonly minSafariVersion = 605;\n\n\tisWebRTCSupported(): boolean {\n\t\treturn typeof RTCPeerConnection !== \"undefined\";\n\t}\n\n\tisBrowserSupported(): boolean {\n\t\tconst browser = this.getBrowser();\n\t\tconst version = this.getVersion();\n\n\t\tconst validBrowser = this.supportedBrowsers.includes(browser);\n\n\t\tif (!validBrowser) return false;\n\n\t\tif (browser === \"chrome\") return version >= this.minChromeVersion;\n\t\tif (browser === \"firefox\") return version >= this.minFirefoxVersion;\n\t\tif (browser === \"safari\")\n\t\t\treturn !this.isIOS && version >= this.minSafariVersion;\n\n\t\treturn false;\n\t}\n\n\tgetBrowser(): string {\n\t\treturn webRTCAdapter.browserDetails.browser;\n\t}\n\n\tgetVersion(): number {\n\t\treturn webRTCAdapter.browserDetails.version || 0;\n\t}\n\n\tisUnifiedPlanSupported(): boolean {\n\t\tconst browser = this.getBrowser();\n\t\tconst version = webRTCAdapter.browserDetails.version || 0;\n\n\t\tif (browser === \"chrome\" && version < this.minChromeVersion) return false;\n\t\tif (browser === \"firefox\" && version >= this.minFirefoxVersion) return true;\n\t\tif (\n\t\t\t!window.RTCRtpTransceiver ||\n\t\t\t!(\"currentDirection\" in RTCRtpTransceiver.prototype)\n\t\t)\n\t\t\treturn false;\n\n\t\tlet tempPc: RTCPeerConnection;\n\t\tlet supported = false;\n\n\t\ttry {\n\t\t\ttempPc = new RTCPeerConnection();\n\t\t\ttempPc.addTransceiver(\"audio\");\n\t\t\tsupported = true;\n\t\t} catch (e) {\n\t\t} finally {\n\t\t\tif (tempPc) {\n\t\t\t\ttempPc.close();\n\t\t\t}\n\t\t}\n\n\t\treturn supported;\n\t}\n\n\ttoString(): string {\n\t\treturn `Supports:\n browser:${this.getBrowser()}\n version:${this.getVersion()}\n isIOS:${this.isIOS}\n isWebRTCSupported:${this.isWebRTCSupported()}\n isBrowserSupported:${this.isBrowserSupported()}\n isUnifiedPlanSupported:${this.isUnifiedPlanSupported()}`;\n\t}\n})();\n", "export const validateId = (id: string): boolean => {\n\t// Allow empty ids\n\treturn !id || /^[A-Za-z0-9]+(?:[ _-][A-Za-z0-9]+)*$/.test(id);\n};\n", "export const randomToken = () => Math.random().toString(36).slice(2);\n", "import { util } from \"./util\";\nimport logger, { LogLevel } from \"./logger\";\nimport { Socket } from \"./socket\";\nimport { MediaConnection } from \"./mediaconnection\";\nimport type { DataConnection } from \"./dataconnection/DataConnection\";\nimport {\n\tConnectionType,\n\tPeerErrorType,\n\tServerMessageType,\n\tSocketEventType,\n} from \"./enums\";\nimport type { ServerMessage } from \"./servermessage\";\nimport { API } from \"./api\";\nimport type {\n\tCallOption,\n\tPeerConnectOption,\n\tPeerJSOption,\n} from \"./optionInterfaces\";\nimport { BinaryPack } from \"./dataconnection/BufferedConnection/BinaryPack\";\nimport { Raw } from \"./dataconnection/BufferedConnection/Raw\";\nimport { Json } from \"./dataconnection/BufferedConnection/Json\";\n\nimport { EventEmitterWithError, PeerError } from \"./peerError\";\n\nclass PeerOptions implements PeerJSOption {\n\t/**\n\t * Prints log messages depending on the debug level passed in.\n\t */\n\tdebug?: LogLevel;\n\t/**\n\t * Server host. Defaults to `0.peerjs.com`.\n\t * Also accepts `'/'` to signify relative hostname.\n\t */\n\thost?: string;\n\t/**\n\t * Server port. Defaults to `443`.\n\t */\n\tport?: number;\n\t/**\n\t * The path where your self-hosted PeerServer is running. Defaults to `'/'`\n\t */\n\tpath?: string;\n\t/**\n\t * API key for the PeerServer.\n\t * This is not used anymore.\n\t * @deprecated\n\t */\n\tkey?: string;\n\ttoken?: string;\n\t/**\n\t * Configuration hash passed to RTCPeerConnection.\n\t * This hash contains any custom ICE/TURN server configuration.\n\t *\n\t * Defaults to {@apilink util.defaultConfig}\n\t */\n\tconfig?: any;\n\t/**\n\t * Set to true `true` if you're using TLS.\n\t * :::danger\n\t * If possible *always use TLS*\n\t * :::\n\t */\n\tsecure?: boolean;\n\tpingInterval?: number;\n\treferrerPolicy?: ReferrerPolicy;\n\tlogFunction?: (logLevel: LogLevel, ...rest: any[]) => void;\n\tserializers?: SerializerMapping;\n}\n\nexport { type PeerOptions };\n\nexport interface SerializerMapping {\n\t[key: string]: new (\n\t\tpeerId: string,\n\t\tprovider: Peer,\n\t\toptions: any,\n\t) => DataConnection;\n}\n\nexport interface PeerEvents {\n\t/**\n\t * Emitted when a connection to the PeerServer is established.\n\t *\n\t * You may use the peer before this is emitted, but messages to the server will be queued. <code>id</code> is the brokering ID of the peer (which was either provided in the constructor or assigned by the server).<span class='tip'>You should not wait for this event before connecting to other peers if connection speed is important.</span>\n\t */\n\topen: (id: string) => void;\n\t/**\n\t * Emitted when a new data connection is established from a remote peer.\n\t */\n\tconnection: (dataConnection: DataConnection) => void;\n\t/**\n\t * Emitted when a remote peer attempts to call you.\n\t */\n\tcall: (mediaConnection: MediaConnection) => void;\n\t/**\n\t * Emitted when the peer is destroyed and can no longer accept or create any new connections.\n\t */\n\tclose: () => void;\n\t/**\n\t * Emitted when the peer is disconnected from the signalling server\n\t */\n\tdisconnected: (currentId: string) => void;\n\t/**\n\t * Errors on the peer are almost always fatal and will destroy the peer.\n\t *\n\t * Errors from the underlying socket and PeerConnections are forwarded here.\n\t */\n\terror: (error: PeerError<`${PeerErrorType}`>) => void;\n}\n/**\n * A peer who can initiate connections with other peers.\n */\nexport class Peer extends EventEmitterWithError<PeerErrorType, PeerEvents> {\n\tprivate static readonly DEFAULT_KEY = \"peerjs\";\n\n\tprotected readonly _serializers: SerializerMapping = {\n\t\traw: Raw,\n\t\tjson: Json,\n\t\tbinary: BinaryPack,\n\t\t\"binary-utf8\": BinaryPack,\n\n\t\tdefault: BinaryPack,\n\t};\n\tprivate readonly _options: PeerOptions;\n\tprivate readonly _api: API;\n\tprivate readonly _socket: Socket;\n\n\tprivate _id: string | null = null;\n\tprivate _lastServerId: string | null = null;\n\n\t// States.\n\tprivate _destroyed = false; // Connections have been killed\n\tprivate _disconnected = false; // Connection to PeerServer killed but P2P connections still active\n\tprivate _open = false; // Sockets and such are not yet open.\n\tprivate readonly _connections: Map<\n\t\tstring,\n\t\t(DataConnection | MediaConnection)[]\n\t> = new Map(); // All connections for this peer.\n\tprivate readonly _lostMessages: Map<string, ServerMessage[]> = new Map(); // src => [list of messages]\n\t/**\n\t * The brokering ID of this peer\n\t *\n\t * If no ID was specified in {@apilink Peer | the constructor},\n\t * this will be `undefined` until the {@apilink PeerEvents | `open`} event is emitted.\n\t */\n\tget id() {\n\t\treturn this._id;\n\t}\n\n\tget options() {\n\t\treturn this._options;\n\t}\n\n\tget open() {\n\t\treturn this._open;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tget socket() {\n\t\treturn this._socket;\n\t}\n\n\t/**\n\t * A hash of all connections associated with this peer, keyed by the remote peer's ID.\n\t * @deprecated\n\t * Return type will change from Object to Map<string,[]>\n\t */\n\tget connections(): Object {\n\t\tconst plainConnections = Object.create(null);\n\n\t\tfor (const [k, v] of this._connections) {\n\t\t\tplainConnections[k] = v;\n\t\t}\n\n\t\treturn plainConnections;\n\t}\n\n\t/**\n\t * true if this peer and all of its connections can no longer be used.\n\t */\n\tget destroyed() {\n\t\treturn this._destroyed;\n\t}\n\t/**\n\t * false if there is an active connection to the PeerServer.\n\t */\n\tget disconnected() {\n\t\treturn this._disconnected;\n\t}\n\n\t/**\n\t * A peer can connect to other peers and listen for connections.\n\t */\n\tconstructor();\n\n\t/**\n\t * A peer can connect to other peers and listen for connections.\n\t * @param options for specifying details about PeerServer\n\t */\n\tconstructor(options: PeerOptions);\n\n\t/**\n\t * A peer can connect to other peers and listen for connections.\n\t * @param id Other peers can connect to this peer using the provided ID.\n\t * If no ID is given, one will be generated by the brokering server.\n\t * The ID must start and end with an alphanumeric character (lower or upper case character or a digit). In the middle of the ID spaces, dashes (-) and underscores (_) are allowed. Use {@apilink PeerOptions.metadata } to send identifying information.\n\t * @param options for specifying details about PeerServer\n\t */\n\tconstructor(id: string, options?: PeerOptions);\n\n\tconstructor(id?: string | PeerOptions, options?: PeerOptions) {\n\t\tsuper();\n\n\t\tlet userId: string | undefined;\n\n\t\t// Deal with overloading\n\t\tif (id && id.constructor == Object) {\n\t\t\toptions = id as PeerOptions;\n\t\t} else if (id) {\n\t\t\tuserId = id.toString();\n\t\t}\n\n\t\t// Configurize options\n\t\toptions = {\n\t\t\tdebug: 0, // 1: Errors, 2: Warnings, 3: All logs\n\t\t\thost: util.CLOUD_HOST,\n\t\t\tport: util.CLOUD_PORT,\n\t\t\tpath: \"/\",\n\t\t\tkey: Peer.DEFAULT_KEY,\n\t\t\ttoken: util.randomToken(),\n\t\t\tconfig: util.defaultConfig,\n\t\t\treferrerPolicy: \"strict-origin-when-cross-origin\",\n\t\t\tserializers: {},\n\t\t\t...options,\n\t\t};\n\t\tthis._options = options;\n\t\tthis._serializers = { ...this._serializers, ...this.options.serializers };\n\n\t\t// Detect relative URL host.\n\t\tif (this._options.host === \"/\") {\n\t\t\tthis._options.host = window.location.hostname;\n\t\t}\n\n\t\t// Set path correctly.\n\t\tif (this._options.path) {\n\t\t\tif (this._options.path[0] !== \"/\") {\n\t\t\t\tthis._options.path = \"/\" + this._options.path;\n\t\t\t}\n\t\t\tif (this._options.path[this._options.path.length - 1] !== \"/\") {\n\t\t\t\tthis._options.path += \"/\";\n\t\t\t}\n\t\t}\n\n\t\t// Set whether we use SSL to same as current host\n\t\tif (\n\t\t\tthis._options.secure === undefined &&\n\t\t\tthis._options.host !== util.CLOUD_HOST\n\t\t) {\n\t\t\tthis._options.secure = util.isSecure();\n\t\t} else if (this._options.host == util.CLOUD_HOST) {\n\t\t\tthis._options.secure = true;\n\t\t}\n\t\t// Set a custom log function if present\n\t\tif (this._options.logFunction) {\n\t\t\tlogger.setLogFunction(this._options.logFunction);\n\t\t}\n\n\t\tlogger.logLevel = this._options.debug || 0;\n\n\t\tthis._api = new API(options);\n\t\tthis._socket = this._createServerConnection();\n\n\t\t// Sanity checks\n\t\t// Ensure WebRTC supported\n\t\tif (!util.supports.audioVideo && !util.supports.data) {\n\t\t\tthis._delayedAbort(\n\t\t\t\tPeerErrorType.BrowserIncompatible,\n\t\t\t\t\"The current browser does not support WebRTC\",\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\t// Ensure alphanumeric id\n\t\tif (!!userId && !util.validateId(userId)) {\n\t\t\tthis._delayedAbort(PeerErrorType.InvalidID, `ID \"${userId}\" is invalid`);\n\t\t\treturn;\n\t\t}\n\n\t\tif (userId) {\n\t\t\tthis._initialize(userId);\n\t\t} else {\n\t\t\tthis._api\n\t\t\t\t.retrieveId()\n\t\t\t\t.then((id) => this._initialize(id))\n\t\t\t\t.catch((error) => this._abort(PeerErrorType.ServerError, error));\n\t\t}\n\t}\n\n\tprivate _createServerConnection(): Socket {\n\t\tconst socket = new Socket(\n\t\t\tthis._options.secure,\n\t\t\tthis._options.host!,\n\t\t\tthis._options.port!,\n\t\t\tthis._options.path!,\n\t\t\tthis._options.key!,\n\t\t\tthis._options.pingInterval,\n\t\t);\n\n\t\tsocket.on(SocketEventType.Message, (data: ServerMessage) => {\n\t\t\tthis._handleMessage(data);\n\t\t});\n\n\t\tsocket.on(SocketEventType.Error, (error: string) => {\n\t\t\tthis._abort(PeerErrorType.SocketError, error);\n\t\t});\n\n\t\tsocket.on(SocketEventType.Disconnected, () => {\n\t\t\tif (this.disconnected) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.emitError(PeerErrorType.Network, \"Lost connection to server.\");\n\t\t\tthis.disconnect();\n\t\t});\n\n\t\tsocket.on(SocketEventType.Close, () => {\n\t\t\tif (this.disconnected) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._abort(\n\t\t\t\tPeerErrorType.SocketClosed,\n\t\t\t\t\"Underlying socket is already closed.\",\n\t\t\t);\n\t\t});\n\n\t\treturn socket;\n\t}\n\n\t/** Initialize a connection with the server. */\n\tprivate _initialize(id: string): void {\n\t\tthis._id = id;\n\t\tthis.socket.start(id, this._options.token!);\n\t}\n\n\t/** Handles messages from the server. */\n\tprivate _handleMessage(message: ServerMessage): void {\n\t\tconst type = message.type;\n\t\tconst payload = message.payload;\n\t\tconst peerId = message.src;\n\n\t\tswitch (type) {\n\t\t\tcase ServerMessageType.Open: // The connection to the server is open.\n\t\t\t\tthis._lastServerId = this.id;\n\t\t\t\tthis._open = true;\n\t\t\t\tthis.emit(\"open\", this.id);\n\t\t\t\tbreak;\n\t\t\tcase ServerMessageType.Error: // Server error.\n\t\t\t\tthis._abort(PeerErrorType.ServerError, payload.msg);\n\t\t\t\tbreak;\n\t\t\tcase ServerMessageType.IdTaken: // The selected ID is taken.\n\t\t\t\tthis._abort(PeerErrorType.UnavailableID, `ID \"${this.id}\" is taken`);\n\t\t\t\tbreak;\n\t\t\tcase ServerMessageType.InvalidKey: // The given API key cannot be found.\n\t\t\t\tthis._abort(\n\t\t\t\t\tPeerErrorType.InvalidKey,\n\t\t\t\t\t`API KEY \"${this._options.key}\" is invalid`,\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase ServerMessageType.Leave: // Another peer has closed its connection to this peer.\n\t\t\t\tlogger.log(`Received leave message from ${peerId}`);\n\t\t\t\tthis._cleanupPeer(peerId);\n\t\t\t\tthis._connections.delete(peerId);\n\t\t\t\tbreak;\n\t\t\tcase ServerMessageType.Expire: // The offer sent to a peer has expired without response.\n\t\t\t\tthis.emitError(\n\t\t\t\t\tPeerErrorType.PeerUnavailable,\n\t\t\t\t\t`Could not connect to peer ${peerId}`,\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase ServerMessageType.Offer: {\n\t\t\t\t// we should consider switching this to CALL/CONNECT, but this is the least breaking option.\n\t\t\t\tconst connectionId = payload.connectionId;\n\t\t\t\tlet connection = this.getConnection(peerId, connectionId);\n\n\t\t\t\tif (connection) {\n\t\t\t\t\tconnection.close();\n\t\t\t\t\tlogger.warn(\n\t\t\t\t\t\t`Offer received for existing Connection ID:${connectionId}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Create a new connection.\n\t\t\t\tif (payload.type === ConnectionType.Media) {\n\t\t\t\t\tconst mediaConnection = new MediaConnection(peerId, this, {\n\t\t\t\t\t\tconnectionId: connectionId,\n\t\t\t\t\t\t_payload: payload,\n\t\t\t\t\t\tmetadata: payload.metadata,\n\t\t\t\t\t});\n\t\t\t\t\tconnection = mediaConnection;\n\t\t\t\t\tthis._addConnection(peerId, connection);\n\t\t\t\t\tthis.emit(\"call\", mediaConnection);\n\t\t\t\t} else if (payload.type === ConnectionType.Data) {\n\t\t\t\t\tconst dataConnection = new this._serializers[payload.serialization](\n\t\t\t\t\t\tpeerId,\n\t\t\t\t\t\tthis,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tconnectionId: connectionId,\n\t\t\t\t\t\t\t_payload: payload,\n\t\t\t\t\t\t\tmetadata: payload.metadata,\n\t\t\t\t\t\t\tlabel: payload.label,\n\t\t\t\t\t\t\tserialization: payload.serialization,\n\t\t\t\t\t\t\treliable: payload.reliable,\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t\tconnection = dataConnection;\n\n\t\t\t\t\tthis._addConnection(peerId, connection);\n\t\t\t\t\tthis.emit(\"connection\", dataConnection);\n\t\t\t\t} else {\n\t\t\t\t\tlogger.warn(`Received malformed connection type:${payload.type}`);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Find messages.\n\t\t\t\tconst messages = this._getMessages(connectionId);\n\t\t\t\tfor (const message of messages) {\n\t\t\t\t\tconnection.handleMessage(message);\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tif (!payload) {\n\t\t\t\t\tlogger.warn(\n\t\t\t\t\t\t`You received a malformed message from ${peerId} of type ${type}`,\n\t\t\t\t\t);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst connectionId = payload.connectionId;\n\t\t\t\tconst connection = this.getConnection(peerId, connectionId);\n\n\t\t\t\tif (connection && connection.peerConnection) {\n\t\t\t\t\t// Pass it on.\n\t\t\t\t\tconnection.handleMessage(message);\n\t\t\t\t} else if (connectionId) {\n\t\t\t\t\t// Store for possible later use\n\t\t\t\t\tthis._storeMessage(connectionId, message);\n\t\t\t\t} else {\n\t\t\t\t\tlogger.warn(\"You received an unrecognized message:\", message);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Stores messages without a set up connection, to be claimed later. */\n\tprivate _storeMessage(connectionId: string, message: ServerMessage): void {\n\t\tif (!this._lostMessages.has(connectionId)) {\n\t\t\tthis._lostMessages.set(connectionId, []);\n\t\t}\n\n\t\tthis._lostMessages.get(connectionId).push(message);\n\t}\n\n\t/**\n\t * Retrieve messages from lost message store\n\t * @internal\n\t */\n\t//TODO Change it to private\n\tpublic _getMessages(connectionId: string): ServerMessage[] {\n\t\tconst messages = this._lostMessages.get(connectionId);\n\n\t\tif (messages) {\n\t\t\tthis._lostMessages.delete(connectionId);\n\t\t\treturn messages;\n\t\t}\n\n\t\treturn [];\n\t}\n\n\t/**\n\t * Connects to the remote peer specified by id and returns a data connection.\n\t * @param peer The brokering ID of the remote peer (their {@apilink Peer.id}).\n\t * @param options for specifying details about Peer Connection\n\t */\n\tconnect(peer: string, options: PeerConnectOption = {}): DataConnection {\n\t\toptions = {\n\t\t\tserialization: \"default\",\n\t\t\t...options,\n\t\t};\n\t\tif (this.disconnected) {\n\t\t\tlogger.warn(\n\t\t\t\t\"You cannot connect to a new Peer because you called \" +\n\t\t\t\t\t\".disconnect() on this Peer and ended your connection with the \" +\n\t\t\t\t\t\"server. You can create a new Peer to reconnect, or call reconnect \" +\n\t\t\t\t\t\"on this peer if you believe its ID to still be available.\",\n\t\t\t);\n\t\t\tthis.emitError(\n\t\t\t\tPeerErrorType.Disconnected,\n\t\t\t\t\"Cannot connect to new Peer after disconnecting from server.\",\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tconst dataConnection = new this._serializers[options.serialization](\n\t\t\tpeer,\n\t\t\tthis,\n\t\t\toptions,\n\t\t);\n\t\tthis._addConnection(peer, dataConnection);\n\t\treturn dataConnection;\n\t}\n\n\t/**\n\t * Calls the remote peer specified by id and returns a media connection.\n\t * @param peer The brokering ID of the remote peer (their peer.id).\n\t * @param stream The caller's media stream\n\t * @param options Metadata associated with the connection, passed in by whoever initiated the connection.\n\t */\n\tcall(\n\t\tpeer: string,\n\t\tstream: MediaStream,\n\t\toptions: CallOption = {},\n\t): MediaConnection {\n\t\tif (this.disconnected) {\n\t\t\tlogger.warn(\n\t\t\t\t\"You cannot connect to a new Peer because you called \" +\n\t\t\t\t\t\".disconnect() on this Peer and ended your connection with the \" +\n\t\t\t\t\t\"server. You can create a new Peer to reconnect.\",\n\t\t\t);\n\t\t\tthis.emitError(\n\t\t\t\tPeerErrorType.Disconnected,\n\t\t\t\t\"Cannot connect to new Peer after disconnecting from server.\",\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tif (!stream) {\n\t\t\tlogger.error(\n\t\t\t\t\"To call a peer, you must provide a stream from your browser's `getUserMedia`.\",\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tconst mediaConnection = new MediaConnection(peer, this, {\n\t\t\t...options,\n\t\t\t_stream: stream,\n\t\t});\n\t\tthis._addConnection(peer, mediaConnection);\n\t\treturn mediaConnection;\n\t}\n\n\t/** Add a data/media connection to this peer. */\n\tprivate _addConnection(\n\t\tpeerId: string,\n\t\tconnection: MediaConnection | DataConnection,\n\t): void {\n\t\tlogger.log(\n\t\t\t`add connection ${connection.type}:${connection.connectionId} to peerId:${peerId}`,\n\t\t);\n\n\t\tif (!this._connections.has(peerId)) {\n\t\t\tthis._connections.set(peerId, []);\n\t\t}\n\t\tthis._connections.get(peerId).push(connection);\n\t}\n\n\t//TODO should be private\n\t_removeConnection(connection: DataConnection | MediaConnection): void {\n\t\tconst connections = this._connections.get(connection.peer);\n\n\t\tif (connections) {\n\t\t\tconst index = connections.indexOf(connection);\n\n\t\t\tif (index !== -1) {\n\t\t\t\tconnections.splice(index, 1);\n\t\t\t}\n\t\t}\n\n\t\t//remove from lost messages\n\t\tthis._lostMessages.delete(connection.connectionId);\n\t}\n\n\t/** Retrieve a data/media connection for this peer. */\n\tgetConnection(\n\t\tpeerId: string,\n\t\tconnectionId: string,\n\t): null | DataConnection | MediaConnection {\n\t\tconst connections = this._connections.get(peerId);\n\t\tif (!connections) {\n\t\t\treturn null;\n\t\t}\n\n\t\tfor (const connection of connections) {\n\t\t\tif (connection.connectionId === connectionId) {\n\t\t\t\treturn connection;\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate _delayedAbort(type: PeerErrorType, message: string | Error): void {\n\t\tsetTimeout(() => {\n\t\t\tthis._abort(type, message);\n\t\t}, 0);\n\t}\n\n\t/**\n\t * Emits an error message and destroys the Peer.\n\t * The Peer is not destroyed if it's in a disconnected state, in which case\n\t * it retains its disconnected state and its existing connections.\n\t */\n\tprivate _abort(type: PeerErrorType, message: string | Error): void {\n\t\tlogger.error(\"Aborting!\");\n\n\t\tthis.emitError(type, message);\n\n\t\tif (!this._lastServerId) {\n\t\t\tthis.destroy();\n\t\t} else {\n\t\t\tthis.disconnect();\n\t\t}\n\t}\n\n\t/**\n\t * Destroys the Peer: closes all active connections as well as the connection\n\t * to the server.\n\t *\n\t * :::caution\n\t * This cannot be undone; the respective peer object will no longer be able\n\t * to create or receive any connections, its ID will be forfeited on the server,\n\t * and all of its data and media connections will be closed.\n\t * :::\n\t */\n\tdestroy(): void {\n\t\tif (this.destroyed) {\n\t\t\treturn;\n\t\t}\n\n\t\tlogger.log(`Destroy peer with ID:${this.id}`);\n\n\t\tthis.disconnect();\n\t\tthis._cleanup();\n\n\t\tthis._destroyed = true;\n\n\t\tthis.emit(\"close\");\n\t}\n\n\t/** Disconnects every connection on this peer. */\n\tprivate _cleanup(): void {\n\t\tfor (const peerId of this._connections.keys()) {\n\t\t\tthis._cleanupPeer(peerId);\n\t\t\tthis._connections.delete(peerId);\n\t\t}\n\n\t\tthis.socket.removeAllListeners();\n\t}\n\n\t/** Closes all connections to this peer. */\n\tprivate _cleanupPeer(peerId: string): void {\n\t\tconst connections = this._connections.get(peerId);\n\n\t\tif (!connections) return;\n\n\t\tfor (const connection of connections) {\n\t\t\tconnection.close();\n\t\t}\n\t}\n\n\t/**\n\t * Disconnects the Peer's connection to the PeerServer. Does not close any\n\t * active connections.\n\t * Warning: The peer can no longer create or accept connections after being\n\t * disconnected. It also cannot reconnect to the server.\n\t */\n\tdisconnect(): void {\n\t\tif (this.disconnected) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst currentId = this.id;\n\n\t\tlogger.log(`Disconnect peer with ID:${currentId}`);\n\n\t\tthis._disconnected = true;\n\t\tthis._open = false;\n\n\t\tthis.socket.close();\n\n\t\tthis._lastServerId = currentId;\n\t\tthis._id = null;\n\n\t\tthis.emit(\"disconnected\", currentId);\n\t}\n\n\t/** Attempts to reconnect with the same ID.\n\t *\n\t * Only {@apilink Peer.disconnect | disconnected peers} can be reconnected.\n\t * Destroyed peers cannot be reconnected.\n\t * If the connection fails (as an example, if the peer's old ID is now taken),\n\t * the peer's existing connections will not close, but any associated errors events will fire.\n\t */\n\treconnect(): void {\n\t\tif (this.disconnected && !this.destroyed) {\n\t\t\tlogger.log(\n\t\t\t\t`Attempting reconnection to server with ID ${this._lastServerId}`,\n\t\t\t);\n\t\t\tthis._disconnected = false;\n\t\t\tthis._initialize(this._lastServerId!);\n\t\t} else if (this.destroyed) {\n\t\t\tthrow new Error(\n\t\t\t\t\"This peer cannot reconnect to the server. It has already been destroyed.\",\n\t\t\t);\n\t\t} else if (!this.disconnected && !this.open) {\n\t\t\t// Do nothing. We're still connecting the first time.\n\t\t\tlogger.error(\n\t\t\t\t\"In a hurry? We're still trying to make the initial connection!\",\n\t\t\t);\n\t\t} else {\n\t\t\tthrow new Error(\n\t\t\t\t`Peer ${this.id} cannot reconnect because it is not disconnected from the server!`,\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Get a list of available peer IDs. If you're running your own server, you'll\n\t * want to set allow_discovery: true in the PeerServer options. If you're using\n\t * the cloud server, email team@peerjs.com to get the functionality enabled for\n\t * your key.\n\t */\n\tlistAllPeers(cb = (_: any[]) => {}): void {\n\t\tthis._api\n\t\t\t.listAllPeers()\n\t\t\t.then((peers) => cb(peers))\n\t\t\t.catch((error) => this._abort(PeerErrorType.ServerError, error));\n\t}\n}\n", "const LOG_PREFIX = \"PeerJS: \";\n\n/*\nPrints log messages depending on the debug level passed in. Defaults to 0.\n0 Prints no logs.\n1 Prints only errors.\n2 Prints errors and warnings.\n3 Prints all logs.\n*/\nexport enum LogLevel {\n\t/**\n\t * Prints no logs.\n\t */\n\tDisabled,\n\t/**\n\t * Prints only errors.\n\t */\n\tErrors,\n\t/**\n\t * Prints errors and warnings.\n\t */\n\tWarnings,\n\t/**\n\t * Prints all logs.\n\t */\n\tAll,\n}\n\nclass Logger {\n\tprivate _logLevel = LogLevel.Disabled;\n\n\tget logLevel(): LogLevel {\n\t\treturn this._logLevel;\n\t}\n\n\tset logLevel(logLevel: LogLevel) {\n\t\tthis._logLevel = logLevel;\n\t}\n\n\tlog(...args: any[]) {\n\t\tif (this._logLevel >= LogLevel.All) {\n\t\t\tthis._print(LogLevel.All, ...args);\n\t\t}\n\t}\n\n\twarn(...args: any[]) {\n\t\tif (this._logLevel >= LogLevel.Warnings) {\n\t\t\tthis._print(LogLevel.Warnings, ...args);\n\t\t}\n\t}\n\n\terror(...args: any[]) {\n\t\tif (this._logLevel >= LogLevel.Errors) {\n\t\t\tthis._print(LogLevel.Errors, ...args);\n\t\t}\n\t}\n\n\tsetLogFunction(fn: (logLevel: LogLevel, ..._: any[]) => void): void {\n\t\tthis._print = fn;\n\t}\n\n\tprivate _print(logLevel: LogLevel, ...rest: any[]): void {\n\t\tconst copy = [LOG_PREFIX, ...rest];\n\n\t\tfor (const i in copy) {\n\t\t\tif (copy[i] instanceof Error) {\n\t\t\t\tcopy[i] = \"(\" + copy[i].name + \") \" + copy[i].message;\n\t\t\t}\n\t\t}\n\n\t\tif (logLevel >= LogLevel.All) {\n\t\t\tconsole.log(...copy);\n\t\t} else if (logLevel >= LogLevel.Warnings) {\n\t\t\tconsole.warn(\"WARNING\", ...copy);\n\t\t} else if (logLevel >= LogLevel.Errors) {\n\t\t\tconsole.error(\"ERROR\", ...copy);\n\t\t}\n\t}\n}\n\nexport default new Logger();\n", "import { EventEmitter } from \"eventemitter3\";\nimport logger from \"./logger\";\nimport { ServerMessageType, SocketEventType } from \"./enums\";\nimport { version } from \"./version\";\n\n/**\n * An abstraction on top of WebSockets to provide fastest\n * possible connection for peers.\n */\nexport class Socket extends EventEmitter {\n\tprivate _disconnected: boolean = true;\n\tprivate _id?: string;\n\tprivate _messagesQueue: Array<object> = [];\n\tprivate _socket?: WebSocket;\n\tprivate _wsPingTimer?: any;\n\tprivate readonly _baseUrl: string;\n\n\tconstructor(\n\t\tsecure: any,\n\t\thost: string,\n\t\tport: number,\n\t\tpath: string,\n\t\tkey: string,\n\t\tprivate readonly pingInterval: number = 5000,\n\t) {\n\t\tsuper();\n\n\t\tconst wsProtocol = secure ? \"wss://\" : \"ws://\";\n\n\t\tthis._baseUrl = wsProtocol + host + \":\" + port + path + \"peerjs?key=\" + key;\n\t}\n\n\tstart(id: string, token: string): void {\n\t\tthis._id = id;\n\n\t\tconst wsUrl = `${this._baseUrl}&id=${id}&token=${token}`;\n\n\t\tif (!!this._socket || !this._disconnected) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._socket = new WebSocket(wsUrl + \"&version=\" + version);\n\t\tthis._disconnected = false;\n\n\t\tthis._socket.onmessage = (event) => {\n\t\t\tlet data;\n\n\t\t\ttry {\n\t\t\t\tdata = JSON.parse(event.data);\n\t\t\t\tlogger.log(\"Server message received:\", data);\n\t\t\t} catch (e) {\n\t\t\t\tlogger.log(\"Invalid server message\", event.data);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.emit(SocketEventType.Message, data);\n\t\t};\n\n\t\tthis._socket.onclose = (event) => {\n\t\t\tif (this._disconnected) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlogger.log(\"Socket closed.\", event);\n\n\t\t\tthis._cleanup();\n\t\t\tthis._disconnected = true;\n\n\t\t\tthis.emit(SocketEventType.Disconnected);\n\t\t};\n\n\t\t// Take care of the queue of connections if necessary and make sure Peer knows\n\t\t// socket is open.\n\t\tthis._socket.onopen = () => {\n\t\t\tif (this._disconnected) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._sendQueuedMessages();\n\n\t\t\tlogger.log(\"Socket open\");\n\n\t\t\tthis._scheduleHeartbeat();\n\t\t};\n\t}\n\n\tprivate _scheduleHeartbeat(): void {\n\t\tthis._wsPingTimer = setTimeout(() => {\n\t\t\tthis._sendHeartbeat();\n\t\t}, this.pingInterval);\n\t}\n\n\tprivate _sendHeartbeat(): void {\n\t\tif (!this._wsOpen()) {\n\t\t\tlogger.log(`Cannot send heartbeat, because socket closed`);\n\t\t\treturn;\n\t\t}\n\n\t\tconst message = JSON.stringify({ type: ServerMessageType.Heartbeat });\n\n\t\tthis._socket!.send(message);\n\n\t\tthis._scheduleHeartbeat();\n\t}\n\n\t/** Is the websocket currently open? */\n\tprivate _wsOpen(): boolean {\n\t\treturn !!this._socket && this._socket.readyState === 1;\n\t}\n\n\t/** Send queued messages. */\n\tprivate _sendQueuedMessages(): void {\n\t\t//Create copy of queue and clear it,\n\t\t//because send method push the message back to queue if smth will go wrong\n\t\tconst copiedQueue = [...this._messagesQueue];\n\t\tthis._messagesQueue = [];\n\n\t\tfor (const message of copiedQueue) {\n\t\t\tthis.send(message);\n\t\t}\n\t}\n\n\t/** Exposed send for DC & Peer. */\n\tsend(data: any): void {\n\t\tif (this._disconnected) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If we didn't get an ID yet, we can't yet send anything so we should queue\n\t\t// up these messages.\n\t\tif (!this._id) {\n\t\t\tthis._messagesQueue.push(data);\n\t\t\treturn;\n\t\t}\n\n\t\tif (!data.type) {\n\t\t\tthis.emit(SocketEventType.Error, \"Invalid message\");\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this._wsOpen()) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst message = JSON.stringify(data);\n\n\t\tthis._socket!.send(message);\n\t}\n\n\tclose(): void {\n\t\tif (this._disconnected) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._cleanup();\n\n\t\tthis._disconnected = true;\n\t}\n\n\tprivate _cleanup(): void {\n\t\tif (this._socket) {\n\t\t\tthis._socket.onopen =\n\t\t\t\tthis._socket.onmessage =\n\t\t\t\tthis._socket.onclose =\n\t\t\t\t\tnull;\n\t\t\tthis._socket.close();\n\t\t\tthis._socket = undefined;\n\t\t}\n\n\t\tclearTimeout(this._wsPingTimer!);\n\t}\n}\n", "export enum ConnectionType {\n\tData = \"data\",\n\tMedia = \"media\",\n}\n\nexport enum PeerErrorType {\n\t/**\n\t * The client's browser does not support some or all WebRTC features that you are trying to use.\n\t */\n\tBrowserIncompatible = \"browser-incompatible\",\n\t/**\n\t * You've already disconnected this peer from the server and can no longer make any new connections on it.\n\t */\n\tDisconnected = \"disconnected\",\n\t/**\n\t * The ID passed into the Peer constructor contains illegal characters.\n\t */\n\tInvalidID = \"invalid-id\",\n\t/**\n\t * The API key passed into the Peer constructor contains illegal characters or is not in the system (cloud server only).\n\t */\n\tInvalidKey = \"invalid-key\",\n\t/**\n\t * Lost or cannot establish a connection to the signalling server.\n\t */\n\tNetwork = \"network\",\n\t/**\n\t * The peer you're trying to connect to does not exist.\n\t */\n\tPeerUnavailable = \"peer-unavailable\",\n\t/**\n\t * PeerJS is being used securely, but the cloud server does not support SSL. Use a custom PeerServer.\n\t */\n\tSslUnavailable = \"ssl-unavailable\",\n\t/**\n\t * Unable to reach the server.\n\t */\n\tServerError = \"server-error\",\n\t/**\n\t * An error from the underlying socket.\n\t */\n\tSocketError = \"socket-error\",\n\t/**\n\t * The underlying socket closed unexpectedly.\n\t */\n\tSocketClosed = \"socket-closed\",\n\t/**\n\t * The ID passed into the Peer constructor is already taken.\n\t *\n\t * :::caution\n\t * This error is not fatal if your peer has open peer-to-peer connections.\n\t * This can happen if you attempt to {@apilink Peer.reconnect} a peer that has been disconnected from the server,\n\t * but its old ID has now been taken.\n\t * :::\n\t */\n\tUnavailableID = \"unavailable-id\",\n\t/**\n\t * Native WebRTC errors.\n\t */\n\tWebRTC = \"webrtc\",\n}\n\nexport enum BaseConnectionErrorType {\n\tNegotiationFailed = \"negotiation-failed\",\n\tConnectionClosed = \"connection-closed\",\n}\n\nexport enum DataConnectionErrorType {\n\tNotOpenYet = \"not-open-yet\",\n\tMessageToBig = \"message-too-big\",\n}\n\nexport enum SerializationType {\n\tBinary = \"binary\",\n\tBinaryUTF8 = \"binary-utf8\",\n\tJSON = \"json\",\n\tNone = \"raw\",\n}\n\nexport enum SocketEventType {\n\tMessage = \"message\",\n\tDisconnected = \"disconnected\",\n\tError = \"error\",\n\tClose = \"close\",\n}\n\nexport enum ServerMessageType {\n\tHeartbeat = \"HEARTBEAT\",\n\tCandidate = \"CANDIDATE\",\n\tOffer = \"OFFER\",\n\tAnswer = \"ANSWER\",\n\tOpen = \"OPEN\", // The connection to the server is open.\n\tError = \"ERROR\", // Server error.\n\tIdTaken = \"ID-TAKEN\", // The selected ID is taken.\n\tInvalidKey = \"INVALID-KEY\", // The given API key cannot be found.\n\tLeave = \"LEAVE\", // Another peer has closed its connection to this peer.\n\tExpire = \"EXPIRE\", // The offer sent to a peer has expired without response.\n}\n", "export const version = \"1.5.5\";\n", "import { util } from \"./util\";\nimport logger from \"./logger\";\nimport { Negotiator } from \"./negotiator\";\nimport { ConnectionType, ServerMessageType } from \"./enums\";\nimport type { Peer } from \"./peer\";\nimport { BaseConnection, type BaseConnectionEvents } from \"./baseconnection\";\nimport type { ServerMessage } from \"./servermessage\";\nimport type { AnswerOption } from \"./optionInterfaces\";\n\nexport interface MediaConnectionEvents extends BaseConnectionEvents<never> {\n\t/**\n\t * Emitted when a connection to the PeerServer is established.\n\t *\n\t * ```ts\n\t * mediaConnection.on('stream', (stream) => { ... });\n\t * ```\n\t */\n\tstream: (stream: MediaStream) => void;\n\t/**\n\t * Emitted when the auxiliary data channel is established.\n\t * After this event, hanging up will close the connection cleanly on the remote peer.\n\t * @beta\n\t */\n\twillCloseOnRemote: () => void;\n}\n\n/**\n * Wraps WebRTC's media streams.\n * To get one, use {@apilink Peer.call} or listen for the {@apilink PeerEvents | `call`} event.\n */\nexport class MediaConnection extends BaseConnection<MediaConnectionEvents> {\n\tprivate static readonly ID_PREFIX = \"mc_\";\n\treadonly label: string;\n\n\tprivate _negotiator: Negotiator<MediaConnectionEvents, this>;\n\tprivate _localStream: MediaStream;\n\tprivate _remoteStream: MediaStream;\n\n\t/**\n\t * For media connections, this is always 'media'.\n\t */\n\tget type() {\n\t\treturn ConnectionType.Media;\n\t}\n\n\tget localStream(): MediaStream {\n\t\treturn this._localStream;\n\t}\n\n\tget remoteStream(): MediaStream {\n\t\treturn this._remoteStream;\n\t}\n\n\tconstructor(peerId: string, provider: Peer, options: any) {\n\t\tsuper(peerId, provider, options);\n\n\t\tthis._localStream = this.options._stream;\n\t\tthis.connectionId =\n\t\t\tthis.options.connectionId ||\n\t\t\tMediaConnection.ID_PREFIX + util.randomToken();\n\n\t\tthis._negotiator = new Negotiator(this);\n\n\t\tif (this._localStream) {\n\t\t\tthis._negotiator.startConnection({\n\t\t\t\t_stream: this._localStream,\n\t\t\t\toriginator: true,\n\t\t\t});\n\t\t}\n\t}\n\n\t/** Called by the Negotiator when the DataChannel is ready. */\n\toverride _initializeDataChannel(dc: RTCDataChannel): void {\n\t\tthis.dataChannel = dc;\n\n\t\tthis.dataChannel.onopen = () => {\n\t\t\tlogger.log(`DC#${this.connectionId} dc connection success`);\n\t\t\tthis.emit(\"willCloseOnRemote\");\n\t\t};\n\n\t\tthis.dataChannel.onclose = () => {\n\t\t\tlogger.log(`DC#${this.connectionId} dc closed for:`, this.peer);\n\t\t\tthis.close();\n\t\t};\n\t}\n\taddStream(remoteStream) {\n\t\tlogger.log(\"Receiving stream\", remoteStream);\n\n\t\tthis._remoteStream = remoteStream;\n\t\tsuper.emit(\"stream\", remoteStream); // Should we call this `open`?\n\t}\n\n\t/**\n\t * @internal\n\t */\n\thandleMessage(message: ServerMessage): void {\n\t\tconst type = message.type;\n\t\tconst payload = message.payload;\n\n\t\tswitch (message.type) {\n\t\t\tcase ServerMessageType.Answer:\n\t\t\t\t// Forward to negotiator\n\t\t\t\tvoid this._negotiator.handleSDP(type, payload.sdp);\n\t\t\t\tthis._open = true;\n\t\t\t\tbreak;\n\t\t\tcase ServerMessageType.Candidate:\n\t\t\t\tvoid this._negotiator.handleCandidate(payload.candidate);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tlogger.warn(`Unrecognized message type:${type} from peer:${this.peer}`);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\t/**\n * When receiving a {@apilink PeerEvents | `call`} event on a peer, you can call\n * `answer` on the media connection provided by the callback to accept the call\n * and optionally send your own media stream.\n\n *\n * @param stream A WebRTC media stream.\n * @param options\n * @returns\n */\n\tanswer(stream?: MediaStream, options: AnswerOption = {}): void {\n\t\tif (this._localStream) {\n\t\t\tlogger.warn(\n\t\t\t\t\"Local stream already exists on this MediaConnection. Are you answering a call twice?\",\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tthis._localStream = stream;\n\n\t\tif (options && options.sdpTransform) {\n\t\t\tthis.options.sdpTransform = options.sdpTransform;\n\t\t}\n\n\t\tthis._negotiator.startConnection({\n\t\t\t...this.options._payload,\n\t\t\t_stream: stream,\n\t\t});\n\t\t// Retrieve lost messages stored because PeerConnection not set up.\n\t\tconst messages = this.provider._getMessages(this.connectionId);\n\n\t\tfor (const message of messages) {\n\t\t\tthis.handleMessage(message);\n\t\t}\n\n\t\tthis._open = true;\n\t}\n\n\t/**\n\t * Exposed functionality for users.\n\t */\n\n\t/**\n\t * Closes the media connection.\n\t */\n\tclose(): void {\n\t\tif (this._negotiator) {\n\t\t\tthis._negotiator.cleanup();\n\t\t\tthis._negotiator = null;\n\t\t}\n\n\t\tthis._localStream = null;\n\t\tthis._remoteStream = null;\n\n\t\tif (this.provider) {\n\t\t\tthis.provider._removeConnection(this);\n\n\t\t\tthis.provider = null;\n\t\t}\n\n\t\tif (this.options && this.options._stream) {\n\t\t\tthis.options._stream = null;\n\t\t}\n\n\t\tif (!this.open) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._open = false;\n\n\t\tsuper.emit(\"close\");\n\t}\n}\n", "import logger from \"./logger\";\nimport type { MediaConnection } from \"./mediaconnection\";\nimport type { DataConnection } from \"./dataconnection/DataConnection\";\nimport {\n\tBaseConnectionErrorType,\n\tConnectionType,\n\tPeerErrorType,\n\tServerMessageType,\n} from \"./enums\";\nimport type { BaseConnection, BaseConnectionEvents } from \"./baseconnection\";\nimport type { ValidEventTypes } from \"eventemitter3\";\n\n/**\n * Manages all negotiations between Peers.\n */\nexport class Negotiator<\n\tEvents extends ValidEventTypes,\n\tConnectionType extends BaseConnection<Events | BaseConnectionEvents>,\n> {\n\tconstructor(readonly connection: ConnectionType) {}\n\n\t/** Returns a PeerConnection object set up correctly (for data, media). */\n\tstartConnection(options: any) {\n\t\tconst peerConnection = this._startPeerConnection();\n\n\t\t// Set the connection's PC.\n\t\tthis.connection.peerConnection = peerConnection;\n\n\t\tif (this.connection.type === ConnectionType.Media && options._stream) {\n\t\t\tthis._addTracksToConnection(options._stream, peerConnection);\n\t\t}\n\n\t\t// What do we need to do now?\n\t\tif (options.originator) {\n\t\t\tconst dataConnection = this.connection;\n\n\t\t\tconst config: RTCDataChannelInit = { ordered: !!options.reliable };\n\n\t\t\tconst dataChannel = peerConnection.createDataChannel(\n\t\t\t\tdataConnection.label,\n\t\t\t\tconfig,\n\t\t\t);\n\t\t\tdataConnection._initializeDataChannel(dataChannel);\n\n\t\t\tvoid this._makeOffer();\n\t\t} else {\n\t\t\tvoid this.handleSDP(\"OFFER\", options.sdp);\n\t\t}\n\t}\n\n\t/** Start a PC. */\n\tprivate _startPeerConnection(): RTCPeerConnection {\n\t\tlogger.log(\"Creating RTCPeerConnection.\");\n\n\t\tconst peerConnection = new RTCPeerConnection(\n\t\t\tthis.connection.provider.options.config,\n\t\t);\n\n\t\tthis._setupListeners(peerConnection);\n\n\t\treturn peerConnection;\n\t}\n\n\t/** Set up various WebRTC listeners. */\n\tprivate _setupListeners(peerConnection: RTCPeerConnection) {\n\t\tconst peerId = this.connection.peer;\n\t\tconst connectionId = this.connection.connectionId;\n\t\tconst connectionType = this.connection.type;\n\t\tconst provider = this.connection.provider;\n\n\t\t// ICE CANDIDATES.\n\t\tlogger.log(\"Listening for ICE candidates.\");\n\n\t\tpeerConnection.onicecandidate = (evt) => {\n\t\t\tif (!evt.candidate || !evt.candidate.candidate) return;\n\n\t\t\tlogger.log(`Received ICE candidates for ${peerId}:`, evt.candidate);\n\n\t\t\tprovider.socket.send({\n\t\t\t\ttype: ServerMessageType.Candidate,\n\t\t\t\tpayload: {\n\t\t\t\t\tcandidate: evt.candidate,\n\t\t\t\t\ttype: connectionType,\n\t\t\t\t\tconnectionId: connectionId,\n\t\t\t\t},\n\t\t\t\tdst: peerId,\n\t\t\t});\n\t\t};\n\n\t\tpeerConnection.oniceconnectionstatechange = () => {\n\t\t\tswitch (peerConnection.iceConnectionState) {\n\t\t\t\tcase \"failed\":\n\t\t\t\t\tlogger.log(\n\t\t\t\t\t\t\"iceConnectionState is failed, closing connections to \" + peerId,\n\t\t\t\t\t);\n\t\t\t\t\tthis.connection.emitError(\n\t\t\t\t\t\tBaseConnectionErrorType.NegotiationFailed,\n\t\t\t\t\t\t\"Negotiation of connection to \" + peerId + \" failed.\",\n\t\t\t\t\t);\n\t\t\t\t\tthis.connection.close();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"closed\":\n\t\t\t\t\tlogger.log(\n\t\t\t\t\t\t\"iceConnectionState is closed, closing connections to \" + peerId,\n\t\t\t\t\t);\n\t\t\t\t\tthis.connection.emitError(\n\t\t\t\t\t\tBaseConnectionErrorType.ConnectionClosed,\n\t\t\t\t\t\t\"Connection to \" + peerId + \" closed.\",\n\t\t\t\t\t);\n\t\t\t\t\tthis.connection.close();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"disconnected\":\n\t\t\t\t\tlogger.log(\n\t\t\t\t\t\t\"iceConnectionState changed to disconnected on the connection with \" +\n\t\t\t\t\t\t\tpeerId,\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"completed\":\n\t\t\t\t\tpeerConnection.onicecandidate = () => {};\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tthis.connection.emit(\n\t\t\t\t\"iceStateChanged\",\n\t\t\t\tpeerConnection.iceConnectionState,\n\t\t\t);\n\t\t};\n\n\t\t// DATACONNECTION.\n\t\tlogger.log(\"Listening for data channel\");\n\t\t// Fired between offer and answer, so options should already be saved\n\t\t// in the options hash.\n\t\tpeerConnection.ondatachannel = (evt) => {\n\t\t\tlogger.log(\"Received data channel\");\n\n\t\t\tconst dataChannel = evt.channel;\n\t\t\tconst connection = <DataConnection>(\n\t\t\t\tprovider.getConnection(peerId, connectionId)\n\t\t\t);\n\n\t\t\tconnection._initializeDataChannel(dataChannel);\n\t\t};\n\n\t\t// MEDIACONNECTION.\n\t\tlogger.log(\"Listening for remote stream\");\n\n\t\tpeerConnection.ontrack = (evt) => {\n\t\t\tlogger.log(\"Received remote stream\");\n\n\t\t\tconst stream = evt.streams[0];\n\t\t\tconst connection = provider.getConnection(peerId, connectionId);\n\n\t\t\tif (connection.type === ConnectionType.Media) {\n\t\t\t\tconst mediaConnection = <MediaConnection>connection;\n\n\t\t\t\tthis._addStreamToMediaConnection(stream, mediaConnection);\n\t\t\t}\n\t\t};\n\t}\n\n\tcleanup(): void {\n\t\tlogger.log(\"Cleaning up PeerConnection to \" + this.connection.peer);\n\n\t\tconst peerConnection = this.connection.peerConnection;\n\n\t\tif (!peerConnection) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.connection.peerConnection = null;\n\n\t\t//unsubscribe from all PeerConnection's events\n\t\tpeerConnection.onicecandidate =\n\t\t\tpeerConnection.oniceconnectionstatechange =\n\t\t\tpeerConnection.ondatachannel =\n\t\t\tpeerConnection.ontrack =\n\t\t\t\t() => {};\n\n\t\tconst peerConnectionNotClosed = peerConnection.signalingState !== \"closed\";\n\t\tlet dataChannelNotClosed = false;\n\n\t\tconst dataChannel = this.connection.dataChannel;\n\n\t\tif (dataChannel) {\n\t\t\tdataChannelNotClosed =\n\t\t\t\t!!dataChannel.readyState && dataChannel.readyState !== \"closed\";\n\t\t}\n\n\t\tif (peerConnectionNotClosed || dataChannelNotClosed) {\n\t\t\tpeerConnection.close();\n\t\t}\n\t}\n\n\tprivate async _makeOffer(): Promise<void> {\n\t\tconst peerConnection = this.connection.peerConnection;\n\t\tconst provider = this.connection.provider;\n\n\t\ttry {\n\t\t\tconst offer = await peerConnection.createOffer(\n\t\t\t\tthis.connection.options.constraints,\n\t\t\t);\n\n\t\t\tlogger.log(\"Created offer.\");\n\n\t\t\tif (\n\t\t\t\tthis.connection.options.sdpTransform &&\n\t\t\t\ttypeof this.connection.options.sdpTransform === \"function\"\n\t\t\t) {\n\t\t\t\toffer.sdp =\n\t\t\t\t\tthis.connection.options.sdpTransform(offer.sdp) || offer.sdp;\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tawait peerConnection.setLocalDescription(offer);\n\n\t\t\t\tlogger.log(\n\t\t\t\t\t\"Set localDescription:\",\n\t\t\t\t\toffer,\n\t\t\t\t\t`for:${this.connection.peer}`,\n\t\t\t\t);\n\n\t\t\t\tlet payload: any = {\n\t\t\t\t\tsdp: offer,\n\t\t\t\t\ttype: this.connection.type,\n\t\t\t\t\tconnectionId: this.connection.connectionId,\n\t\t\t\t\tmetadata: this.connection.metadata,\n\t\t\t\t};\n\n\t\t\t\tif (this.connection.type === ConnectionType.Data) {\n\t\t\t\t\tconst dataConnection = <DataConnection>(<unknown>this.connection);\n\n\t\t\t\t\tpayload = {\n\t\t\t\t\t\t...payload,\n\t\t\t\t\t\tlabel: dataConnection.label,\n\t\t\t\t\t\treliable: dataConnection.reliable,\n\t\t\t\t\t\tserialization: dataConnection.serialization,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tprovider.socket.send({\n\t\t\t\t\ttype: ServerMessageType.Offer,\n\t\t\t\t\tpayload,\n\t\t\t\t\tdst: this.connection.peer,\n\t\t\t\t});\n\t\t\t} catch (err) {\n\t\t\t\t// TODO: investigate why _makeOffer is being called from the answer\n\t\t\t\tif (\n\t\t\t\t\terr !=\n\t\t\t\t\t\"OperationError: Failed to set local offer sdp: Called in wrong state: kHaveRemoteOffer\"\n\t\t\t\t) {\n\t\t\t\t\tprovider.emitError(PeerErrorType.WebRTC, err);\n\t\t\t\t\tlogger.log(\"Failed to setLocalDescription, \", err);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (err_1) {\n\t\t\tprovider.emitError(PeerErrorType.WebRTC, err_1);\n\t\t\tlogger.log(\"Failed to createOffer, \", err_1);\n\t\t}\n\t}\n\n\tprivate async _makeAnswer(): Promise<void> {\n\t\tconst peerConnection = this.connection.peerConnection;\n\t\tconst provider = this.connection.provider;\n\n\t\ttry {\n\t\t\tconst answer = await peerConnection.createAnswer();\n\t\t\tlogger.log(\"Created answer.\");\n\n\t\t\tif (\n\t\t\t\tthis.connection.options.sdpTransform &&\n\t\t\t\ttypeof this.connection.options.sdpTransform === \"function\"\n\t\t\t) {\n\t\t\t\tanswer.sdp =\n\t\t\t\t\tthis.connection.options.sdpTransform(answer.sdp) || answer.sdp;\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tawait peerConnection.setLocalDescription(answer);\n\n\t\t\t\tlogger.log(\n\t\t\t\t\t`Set localDescription:`,\n\t\t\t\t\tanswer,\n\t\t\t\t\t`for:${this.connection.peer}`,\n\t\t\t\t);\n\n\t\t\t\tprovider.socket.send({\n\t\t\t\t\ttype: ServerMessageType.Answer,\n\t\t\t\t\tpayload: {\n\t\t\t\t\t\tsdp: answer,\n\t\t\t\t\t\ttype: this.connection.type,\n\t\t\t\t\t\tconnectionId: this.connection.connectionId,\n\t\t\t\t\t},\n\t\t\t\t\tdst: this.connection.peer,\n\t\t\t\t});\n\t\t\t} catch (err) {\n\t\t\t\tprovider.emitError(PeerErrorType.WebRTC, err);\n\t\t\t\tlogger.log(\"Failed to setLocalDescription, \", err);\n\t\t\t}\n\t\t} catch (err_1) {\n\t\t\tprovider.emitError(PeerErrorType.WebRTC, err_1);\n\t\t\tlogger.log(\"Failed to create answer, \", err_1);\n\t\t}\n\t}\n\n\t/** Handle an SDP. */\n\tasync handleSDP(type: string, sdp: any): Promise<void> {\n\t\tsdp = new RTCSessionDescription(sdp);\n\t\tconst peerConnection = this.connection.peerConnection;\n\t\tconst provider = this.connection.provider;\n\n\t\tlogger.log(\"Setting remote description\", sdp);\n\n\t\tconst self = this;\n\n\t\ttry {\n\t\t\tawait peerConnection.setRemoteDescription(sdp);\n\t\t\tlogger.log(`Set remoteDescription:${type} for:${this.connection.peer}`);\n\t\t\tif (type === \"OFFER\") {\n\t\t\t\tawait self._makeAnswer();\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tprovider.emitError(PeerErrorType.WebRTC, err);\n\t\t\tlogger.log(\"Failed to setRemoteDescription, \", err);\n\t\t}\n\t}\n\n\t/** Handle a candidate. */\n\tasync handleCandidate(ice: RTCIceCandidate) {\n\t\tlogger.log(`handleCandidate:`, ice);\n\n\t\ttry {\n\t\t\tawait this.connection.peerConnection.addIceCandidate(ice);\n\t\t\tlogger.log(`Added ICE candidate for:${this.connection.peer}`);\n\t\t} catch (err) {\n\t\t\tthis.connection.provider.emitError(PeerErrorType.WebRTC, err);\n\t\t\tlogger.log(\"Failed to handleCandidate, \", err);\n\t\t}\n\t}\n\n\tprivate _addTracksToConnection(\n\t\tstream: MediaStream,\n\t\tpeerConnection: RTCPeerConnection,\n\t): void {\n\t\tlogger.log(`add tracks from stream ${stream.id} to peer connection`);\n\n\t\tif (!peerConnection.addTrack) {\n\t\t\treturn logger.error(\n\t\t\t\t`Your browser does't support RTCPeerConnection#addTrack. Ignored.`,\n\t\t\t);\n\t\t}\n\n\t\tstream.getTracks().forEach((track) => {\n\t\t\tpeerConnection.addTrack(track, stream);\n\t\t});\n\t}\n\n\tprivate _addStreamToMediaConnection(\n\t\tstream: MediaStream,\n\t\tmediaConnection: MediaConnection,\n\t): void {\n\t\tlogger.log(\n\t\t\t`add stream ${stream.id} to media connection ${mediaConnection.connectionId}`,\n\t\t);\n\n\t\tmediaConnection.addStream(stream);\n\t}\n}\n", "import type { Peer } from \"./peer\";\nimport type { ServerMessage } from \"./servermessage\";\nimport type { ConnectionType } from \"./enums\";\nimport { BaseConnectionErrorType } from \"./enums\";\nimport {\n\tEventEmitterWithError,\n\ttype EventsWithError,\n\tPeerError,\n} from \"./peerError\";\nimport type { ValidEventTypes } from \"eventemitter3\";\n\nexport interface BaseConnectionEvents<\n\tErrorType extends string = BaseConnectionErrorType,\n> extends EventsWithError<ErrorType> {\n\t/**\n\t * Emitted when either you or the remote peer closes the connection.\n\t *\n\t * ```ts\n\t * connection.on('close', () => { ... });\n\t * ```\n\t */\n\tclose: () => void;\n\t/**\n\t * ```ts\n\t * connection.on('error', (error) => { ... });\n\t * ```\n\t */\n\terror: (error: PeerError<`${ErrorType}`>) => void;\n\ticeStateChanged: (state: RTCIceConnectionState) => void;\n}\n\nexport abstract class BaseConnection<\n\tSubClassEvents extends ValidEventTypes,\n\tErrorType extends string = never,\n> extends EventEmitterWithError<\n\tErrorType | BaseConnectionErrorType,\n\tSubClassEvents & BaseConnectionEvents<BaseConnectionErrorType | ErrorType>\n> {\n\tprotected _open = false;\n\n\t/**\n\t * Any type of metadata associated with the connection,\n\t * passed in by whoever initiated the connection.\n\t */\n\treadonly metadata: any;\n\tconnectionId: string;\n\n\tpeerConnection: RTCPeerConnection;\n\tdataChannel: RTCDataChannel;\n\n\tabstract get type(): ConnectionType;\n\n\t/**\n\t * The optional label passed in or assigned by PeerJS when the connection was initiated.\n\t */\n\tlabel: string;\n\n\t/**\n\t * Whether the media connection is active (e.g. your call has been answered).\n\t * You can check this if you want to set a maximum wait time for a one-sided call.\n\t */\n\tget open() {\n\t\treturn this._open;\n\t}\n\n\tprotected constructor(\n\t\t/**\n\t\t * The ID of the peer on the other end of this connection.\n\t\t */\n\t\treadonly peer: string,\n\t\tpublic provider: Peer,\n\t\treadonly options: any,\n\t) {\n\t\tsuper();\n\n\t\tthis.metadata = options.metadata;\n\t}\n\n\tabstract close(): void;\n\n\t/**\n\t * @internal\n\t */\n\tabstract handleMessage(message: ServerMessage): void;\n\n\t/**\n\t * Called by the Negotiator when the DataChannel is ready.\n\t * @internal\n\t * */\n\tabstract _initializeDataChannel(dc: RTCDataChannel): void;\n}\n", "import { EventEmitter } from \"eventemitter3\";\nimport logger from \"./logger\";\n\nexport interface EventsWithError<ErrorType extends string> {\n\terror: (error: PeerError<`${ErrorType}`>) => void;\n}\n\nexport class EventEmitterWithError<\n\tErrorType extends string,\n\tEvents extends EventsWithError<ErrorType>,\n> extends EventEmitter<Events, never> {\n\t/**\n\t * Emits a typed error message.\n\t *\n\t * @internal\n\t */\n\temitError(type: ErrorType, err: string | Error): void {\n\t\tlogger.error(\"Error:\", err);\n\n\t\t// @ts-ignore\n\t\tthis.emit(\"error\", new PeerError<`${ErrorType}`>(`${type}`, err));\n\t}\n}\n/**\n * A PeerError is emitted whenever an error occurs.\n * It always has a `.type`, which can be used to identify the error.\n */\nexport class PeerError<T extends string> extends Error {\n\t/**\n\t * @internal\n\t */\n\tconstructor(type: T, err: Error | string) {\n\t\tif (typeof err === \"string\") {\n\t\t\tsuper(err);\n\t\t} else {\n\t\t\tsuper();\n\t\t\tObject.assign(this, err);\n\t\t}\n\n\t\tthis.type = type;\n\t}\n\n\tpublic type: T;\n}\n", "import { util } from \"./util\";\nimport logger from \"./logger\";\nimport type { PeerJSOption } from \"./optionInterfaces\";\nimport { version } from \"./version\";\n\nexport class API {\n\tconstructor(private readonly _options: PeerJSOption) {}\n\n\tprivate _buildRequest(method: string): Promise<Response> {\n\t\tconst protocol = this._options.secure ? \"https\" : \"http\";\n\t\tconst { host, port, path, key } = this._options;\n\t\tconst url = new URL(`${protocol}://${host}:${port}${path}${key}/${method}`);\n\t\t// TODO: Why timestamp, why random?\n\t\turl.searchParams.set(\"ts\", `${Date.now()}${Math.random()}`);\n\t\turl.searchParams.set(\"version\", version);\n\t\treturn fetch(url.href, {\n\t\t\treferrerPolicy: this._options.referrerPolicy,\n\t\t});\n\t}\n\n\t/** Get a unique ID from the server via XHR and initialize with it. */\n\tasync retrieveId(): Promise<string> {\n\t\ttry {\n\t\t\tconst response = await this._buildRequest(\"id\");\n\n\t\t\tif (response.status !== 200) {\n\t\t\t\tthrow new Error(`Error. Status:${response.status}`);\n\t\t\t}\n\n\t\t\treturn response.text();\n\t\t} catch (error) {\n\t\t\tlogger.error(\"Error retrieving ID\", error);\n\n\t\t\tlet pathError = \"\";\n\n\t\t\tif (\n\t\t\t\tthis._options.path === \"/\" &&\n\t\t\t\tthis._options.host !== util.CLOUD_HOST\n\t\t\t) {\n\t\t\t\tpathError =\n\t\t\t\t\t\" If you passed in a `path` to your self-hosted PeerServer, \" +\n\t\t\t\t\t\"you'll also need to pass in that same path when creating a new \" +\n\t\t\t\t\t\"Peer.\";\n\t\t\t}\n\n\t\t\tthrow new Error(\"Could not get an ID from the server.\" + pathError);\n\t\t}\n\t}\n\n\t/** @deprecated */\n\tasync listAllPeers(): Promise<any[]> {\n\t\ttry {\n\t\t\tconst response = await this._buildRequest(\"peers\");\n\n\t\t\tif (response.status !== 200) {\n\t\t\t\tif (response.status === 401) {\n\t\t\t\t\tlet helpfulError = \"\";\n\n\t\t\t\t\tif (this._options.host === util.CLOUD_HOST) {\n\t\t\t\t\t\thelpfulError =\n\t\t\t\t\t\t\t\"It looks like you're using the cloud server. You can email \" +\n\t\t\t\t\t\t\t\"team@peerjs.com to enable peer listing for your API key.\";\n\t\t\t\t\t} else {\n\t\t\t\t\t\thelpfulError =\n\t\t\t\t\t\t\t\"You need to enable `allow_discovery` on your self-hosted \" +\n\t\t\t\t\t\t\t\"PeerServer to use this feature.\";\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\"It doesn't look like you have permission to list peers IDs. \" +\n\t\t\t\t\t\t\thelpfulError,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tthrow new Error(`Error. Status:${response.status}`);\n\t\t\t}\n\n\t\t\treturn response.json();\n\t\t} catch (error) {\n\t\t\tlogger.error(\"Error retrieving list peers\", error);\n\n\t\t\tthrow new Error(\"Could not get list peers from the server.\" + error);\n\t\t}\n\t}\n}\n", "import { BinaryPackChunker, concatArrayBuffers } from \"./binaryPackChunker\";\nimport logger from \"../../logger\";\nimport type { Peer } from \"../../peer\";\nimport { BufferedConnection } from \"./BufferedConnection\";\nimport { SerializationType } from \"../../enums\";\nimport { pack, type Packable, unpack } from \"peerjs-js-binarypack\";\n\nexport class BinaryPack extends BufferedConnection {\n\tprivate readonly chunker = new BinaryPackChunker();\n\treadonly serialization = SerializationType.Binary;\n\n\tprivate _chunkedData: {\n\t\t[id: number]: {\n\t\t\tdata: Uint8Array[];\n\t\t\tcount: number;\n\t\t\ttotal: number;\n\t\t};\n\t} = {};\n\n\tpublic override close(options?: { flush?: boolean }) {\n\t\tsuper.close(options);\n\t\tthis._chunkedData = {};\n\t}\n\n\tconstructor(peerId: string, provider: Peer, options: any) {\n\t\tsuper(peerId, provider, options);\n\t}\n\n\t// Handles a DataChannel message.\n\tprotected override _handleDataMessage({ data }: { data: Uint8Array }): void {\n\t\tconst deserializedData = unpack(data);\n\n\t\t// PeerJS specific message\n\t\tconst peerData = deserializedData[\"__peerData\"];\n\t\tif (peerData) {\n\t\t\tif (peerData.type === \"close\") {\n\t\t\t\tthis.close();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Chunked data -- piece things back together.\n\t\t\t// @ts-ignore\n\t\t\tthis._handleChunk(deserializedData);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.emit(\"data\", deserializedData);\n\t}\n\n\tprivate _handleChunk(data: {\n\t\t__peerData: number;\n\t\tn: number;\n\t\ttotal: number;\n\t\tdata: ArrayBuffer;\n\t}): void {\n\t\tconst id = data.__peerData;\n\t\tconst chunkInfo = this._chunkedData[id] || {\n\t\t\tdata: [],\n\t\t\tcount: 0,\n\t\t\ttotal: data.total,\n\t\t};\n\n\t\tchunkInfo.data[data.n] = new Uint8Array(data.data);\n\t\tchunkInfo.count++;\n\t\tthis._chunkedData[id] = chunkInfo;\n\n\t\tif (chunkInfo.total === chunkInfo.count) {\n\t\t\t// Clean up before making the recursive call to `_handleDataMessage`.\n\t\t\tdelete this._chunkedData[id];\n\n\t\t\t// We've received all the chunks--time to construct the complete data.\n\t\t\t// const data = new Blob(chunkInfo.data);\n\t\t\tconst data = concatArrayBuffers(chunkInfo.data);\n\t\t\tthis._handleDataMessage({ data });\n\t\t}\n\t}\n\n\tprotected override _send(data: Packable, chunked: boolean) {\n\t\tconst blob = pack(data);\n\t\tif (blob instanceof Promise) {\n\t\t\treturn this._send_blob(blob);\n\t\t}\n\n\t\tif (!chunked && blob.byteLength > this.chunker.chunkedMTU) {\n\t\t\tthis._sendChunks(blob);\n\t\t\treturn;\n\t\t}\n\n\t\tthis._bufferedSend(blob);\n\t}\n\tprivate async _send_blob(blobPromise: Promise<ArrayBufferLike>) {\n\t\tconst blob = await blobPromise;\n\t\tif (blob.byteLength > this.chunker.chunkedMTU) {\n\t\t\tthis._sendChunks(blob);\n\t\t\treturn;\n\t\t}\n\n\t\tthis._bufferedSend(blob);\n\t}\n\n\tprivate _sendChunks(blob: ArrayBuffer) {\n\t\tconst blobs = this.chunker.chunk(blob);\n\t\tlogger.log(`DC#${this.connectionId} Try to send ${blobs.length} chunks...`);\n\n\t\tfor (const blob of blobs) {\n\t\t\tthis.send(blob, true);\n\t\t}\n\t}\n}\n", "import logger from \"../../logger\";\nimport { DataConnection } from \"../DataConnection\";\n\nexport abstract class BufferedConnection extends DataConnection {\n\tprivate _buffer: any[] = [];\n\tprivate _bufferSize = 0;\n\tprivate _buffering = false;\n\n\tpublic get bufferSize(): number {\n\t\treturn this._bufferSize;\n\t}\n\n\tpublic override _initializeDataChannel(dc: RTCDataChannel) {\n\t\tsuper._initializeDataChannel(dc);\n\t\tthis.dataChannel.binaryType = \"arraybuffer\";\n\t\tthis.dataChannel.addEventListener(\"message\", (e) =>\n\t\t\tthis._handleDataMessage(e),\n\t\t);\n\t}\n\n\tprotected abstract _handleDataMessage(e: MessageEvent): void;\n\n\tprotected _bufferedSend(msg: ArrayBuffer): void {\n\t\tif (this._buffering || !this._trySend(msg)) {\n\t\t\tthis._buffer.push(msg);\n\t\t\tthis._bufferSize = this._buffer.length;\n\t\t}\n\t}\n\n\t// Returns true if the send succeeds.\n\tprivate _trySend(msg: ArrayBuffer): boolean {\n\t\tif (!this.open) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (this.dataChannel.bufferedAmount > DataConnection.MAX_BUFFERED_AMOUNT) {\n\t\t\tthis._buffering = true;\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis._buffering = false;\n\t\t\t\tthis._tryBuffer();\n\t\t\t}, 50);\n\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\tthis.dataChannel.send(msg);\n\t\t} catch (e) {\n\t\t\tlogger.error(`DC#:${this.connectionId} Error when sending:`, e);\n\t\t\tthis._buffering = true;\n\n\t\t\tthis.close();\n\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\t// Try to send the first message in the buffer.\n\tprivate _tryBuffer(): void {\n\t\tif (!this.open) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._buffer.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst msg = this._buffer[0];\n\n\t\tif (this._trySend(msg)) {\n\t\t\tthis._buffer.shift();\n\t\t\tthis._bufferSize = this._buffer.length;\n\t\t\tthis._tryBuffer();\n\t\t}\n\t}\n\n\tpublic override close(options?: { flush?: boolean }) {\n\t\tif (options?.flush) {\n\t\t\tthis.send({\n\t\t\t\t__peerData: {\n\t\t\t\t\ttype: \"close\",\n\t\t\t\t},\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tthis._buffer = [];\n\t\tthis._bufferSize = 0;\n\t\tsuper.close();\n\t}\n}\n", "import logger from \"../logger\";\nimport { Negotiator } from \"../negotiator\";\nimport {\n\tBaseConnectionErrorType,\n\tConnectionType,\n\tDataConnectionErrorType,\n\tServerMessageType,\n} from \"../enums\";\nimport type { Peer } from \"../peer\";\nimport { BaseConnection, type BaseConnectionEvents } from \"../baseconnection\";\nimport type { ServerMessage } from \"../servermessage\";\nimport type { EventsWithError } from \"../peerError\";\nimport { randomToken } from \"../utils/randomToken\";\n\nexport interface DataConnectionEvents\n\textends EventsWithError<DataConnectionErrorType | BaseConnectionErrorType>,\n\t\tBaseConnectionEvents<DataConnectionErrorType | BaseConnectionErrorType> {\n\t/**\n\t * Emitted when data is received from the remote peer.\n\t */\n\tdata: (data: unknown) => void;\n\t/**\n\t * Emitted when the connection is established and ready-to-use.\n\t */\n\topen: () => void;\n}\n\n/**\n * Wraps a DataChannel between two Peers.\n */\nexport abstract class DataConnection extends BaseConnection<\n\tDataConnectionEvents,\n\tDataConnectionErrorType\n> {\n\tprotected static readonly ID_PREFIX = \"dc_\";\n\tprotected static readonly MAX_BUFFERED_AMOUNT = 8 * 1024 * 1024;\n\n\tprivate _negotiator: Negotiator<DataConnectionEvents, this>;\n\tabstract readonly serialization: string;\n\treadonly reliable: boolean;\n\n\tpublic get type() {\n\t\treturn ConnectionType.Data;\n\t}\n\n\tconstructor(peerId: string, provider: Peer, options: any) {\n\t\tsuper(peerId, provider, options);\n\n\t\tthis.connectionId =\n\t\t\tthis.options.connectionId || DataConnection.ID_PREFIX + randomToken();\n\n\t\tthis.label = this.options.label || this.connectionId;\n\t\tthis.reliable = !!this.options.reliable;\n\n\t\tthis._negotiator = new Negotiator(this);\n\n\t\tthis._negotiator.startConnection(\n\t\t\tthis.options._payload || {\n\t\t\t\toriginator: true,\n\t\t\t\treliable: this.reliable,\n\t\t\t},\n\t\t);\n\t}\n\n\t/** Called by the Negotiator when the DataChannel is ready. */\n\toverride _initializeDataChannel(dc: RTCDataChannel): void {\n\t\tthis.dataChannel = dc;\n\n\t\tthis.dataChannel.onopen = () => {\n\t\t\tlogger.log(`DC#${this.connectionId} dc connection success`);\n\t\t\tthis._open = true;\n\t\t\tthis.emit(\"open\");\n\t\t};\n\n\t\tthis.dataChannel.onmessage = (e) => {\n\t\t\tlogger.log(`DC#${this.connectionId} dc onmessage:`, e.data);\n\t\t\t// this._handleDataMessage(e);\n\t\t};\n\n\t\tthis.dataChannel.onclose = () => {\n\t\t\tlogger.log(`DC#${this.connectionId} dc closed for:`, this.peer);\n\t\t\tthis.close();\n\t\t};\n\t}\n\n\t/**\n\t * Exposed functionality for users.\n\t */\n\n\t/** Allows user to close connection. */\n\tclose(options?: { flush?: boolean }): void {\n\t\tif (options?.flush) {\n\t\t\tthis.send({\n\t\t\t\t__peerData: {\n\t\t\t\t\ttype: \"close\",\n\t\t\t\t},\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tif (this._negotiator) {\n\t\t\tthis._negotiator.cleanup();\n\t\t\tthis._negotiator = null;\n\t\t}\n\n\t\tif (this.provider) {\n\t\t\tthis.provider._removeConnection(this);\n\n\t\t\tthis.provider = null;\n\t\t}\n\n\t\tif (this.dataChannel) {\n\t\t\tthis.dataChannel.onopen = null;\n\t\t\tthis.dataChannel.onmessage = null;\n\t\t\tthis.dataChannel.onclose = null;\n\t\t\tthis.dataChannel = null;\n\t\t}\n\n\t\tif (!this.open) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._open = false;\n\n\t\tsuper.emit(\"close\");\n\t}\n\n\tprotected abstract _send(data: any, chunked: boolean): void | Promise<void>;\n\n\t/** Allows user to send data. */\n\tpublic send(data: any, chunked = false) {\n\t\tif (!this.open) {\n\t\t\tthis.emitError(\n\t\t\t\tDataConnectionErrorType.NotOpenYet,\n\t\t\t\t\"Connection is not open. You should listen for the `open` event before sending messages.\",\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\treturn this._send(data, chunked);\n\t}\n\n\tasync handleMessage(message: ServerMessage) {\n\t\tconst payload = message.payload;\n\n\t\tswitch (message.type) {\n\t\t\tcase ServerMessageType.Answer:\n\t\t\t\tawait this._negotiator.handleSDP(message.type, payload.sdp);\n\t\t\t\tbreak;\n\t\t\tcase ServerMessageType.Candidate:\n\t\t\t\tawait this._negotiator.handleCandidate(payload.candidate);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tlogger.warn(\n\t\t\t\t\t\"Unrecognized message type:\",\n\t\t\t\t\tmessage.type,\n\t\t\t\t\t\"from peer:\",\n\t\t\t\t\tthis.peer,\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t}\n\t}\n}\n", "import { BufferedConnection } from \"./BufferedConnection\";\nimport { SerializationType } from \"../../enums\";\n\nexport class Raw extends BufferedConnection {\n\treadonly serialization = SerializationType.None;\n\n\tprotected _handleDataMessage({ data }) {\n\t\tsuper.emit(\"data\", data);\n\t}\n\n\toverride _send(data, _chunked) {\n\t\tthis._bufferedSend(data);\n\t}\n}\n", "import { BufferedConnection } from \"./BufferedConnection\";\nimport { DataConnectionErrorType, SerializationType } from \"../../enums\";\nimport { util } from \"../../util\";\n\nexport class Json extends BufferedConnection {\n\treadonly serialization = SerializationType.JSON;\n\tprivate readonly encoder = new TextEncoder();\n\tprivate readonly decoder = new TextDecoder();\n\n\tstringify: (data: any) => string = JSON.stringify;\n\tparse: (data: string) => any = JSON.parse;\n\n\t// Handles a DataChannel message.\n\tprotected override _handleDataMessage({ data }: { data: Uint8Array }): void {\n\t\tconst deserializedData = this.parse(this.decoder.decode(data));\n\n\t\t// PeerJS specific message\n\t\tconst peerData = deserializedData[\"__peerData\"];\n\t\tif (peerData && peerData.type === \"close\") {\n\t\t\tthis.close();\n\t\t\treturn;\n\t\t}\n\n\t\tthis.emit(\"data\", deserializedData);\n\t}\n\n\toverride _send(data, _chunked) {\n\t\tconst encodedData = this.encoder.encode(this.stringify(data));\n\t\tif (encodedData.byteLength >= util.chunkedMTU) {\n\t\t\tthis.emitError(\n\t\t\t\tDataConnectionErrorType.MessageToBig,\n\t\t\t\t\"Message too big for JSON channel\",\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tthis._bufferedSend(encodedData);\n\t}\n}\n", "import { Peer, type SerializerMapping } from \"./peer\";\nimport { MsgPack } from \"./exports\";\n\n/**\n * @experimental\n */\nexport class MsgPackPeer extends Peer {\n\toverride _serializers: SerializerMapping = {\n\t\tMsgPack,\n\t\tdefault: MsgPack,\n\t};\n}\n", "import { decodeMultiStream, Encoder } from \"@msgpack/msgpack\";\nimport { StreamConnection } from \"./StreamConnection.js\";\nimport type { Peer } from \"../../peer.js\";\n\nexport class MsgPack extends StreamConnection {\n\treadonly serialization = \"MsgPack\";\n\tprivate _encoder = new Encoder();\n\n\tconstructor(peerId: string, provider: Peer, options: any) {\n\t\tsuper(peerId, provider, options);\n\n\t\t(async () => {\n\t\t\tfor await (const msg of decodeMultiStream(this._rawReadStream)) {\n\t\t\t\t// @ts-ignore\n\t\t\t\tif (msg.__peerData?.type === \"close\") {\n\t\t\t\t\tthis.close();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.emit(\"data\", msg);\n\t\t\t}\n\t\t})();\n\t}\n\n\tprotected override _send(data) {\n\t\treturn this.writer.write(this._encoder.encode(data));\n\t}\n}\n", "import logger from \"../../logger.js\";\nimport type { Peer } from \"../../peer.js\";\nimport { DataConnection } from \"../DataConnection.js\";\n\nexport abstract class StreamConnection extends DataConnection {\n\tprivate _CHUNK_SIZE = 1024 * 8 * 4;\n\tprivate _splitStream = new TransformStream<Uint8Array>({\n\t\ttransform: (chunk, controller) => {\n\t\t\tfor (let split = 0; split < chunk.length; split += this._CHUNK_SIZE) {\n\t\t\t\tcontroller.enqueue(chunk.subarray(split, split + this._CHUNK_SIZE));\n\t\t\t}\n\t\t},\n\t});\n\tprivate _rawSendStream = new WritableStream<ArrayBuffer>({\n\t\twrite: async (chunk, controller) => {\n\t\t\tconst openEvent = new Promise((resolve) =>\n\t\t\t\tthis.dataChannel.addEventListener(\"bufferedamountlow\", resolve, {\n\t\t\t\t\tonce: true,\n\t\t\t\t}),\n\t\t\t);\n\n\t\t\t// if we can send the chunk now, send it\n\t\t\t// if not, we wait until at least half of the sending buffer is free again\n\t\t\tawait (this.dataChannel.bufferedAmount <=\n\t\t\t\tDataConnection.MAX_BUFFERED_AMOUNT - chunk.byteLength || openEvent);\n\n\t\t\t// TODO: what can go wrong here?\n\t\t\ttry {\n\t\t\t\tthis.dataChannel.send(chunk);\n\t\t\t} catch (e) {\n\t\t\t\tlogger.error(`DC#:${this.connectionId} Error when sending:`, e);\n\t\t\t\tcontroller.error(e);\n\t\t\t\tthis.close();\n\t\t\t}\n\t\t},\n\t});\n\tprotected writer = this._splitStream.writable.getWriter();\n\n\tprotected _rawReadStream = new ReadableStream<ArrayBuffer>({\n\t\tstart: (controller) => {\n\t\t\tthis.once(\"open\", () => {\n\t\t\t\tthis.dataChannel.addEventListener(\"message\", (e) => {\n\t\t\t\t\tcontroller.enqueue(e.data);\n\t\t\t\t});\n\t\t\t});\n\t\t},\n\t});\n\n\tprotected constructor(peerId: string, provider: Peer, options: any) {\n\t\tsuper(peerId, provider, { ...options, reliable: true });\n\n\t\tvoid this._splitStream.readable.pipeTo(this._rawSendStream);\n\t}\n\n\tpublic override _initializeDataChannel(dc) {\n\t\tsuper._initializeDataChannel(dc);\n\t\tthis.dataChannel.binaryType = \"arraybuffer\";\n\t\tthis.dataChannel.bufferedAmountLowThreshold =\n\t\t\tDataConnection.MAX_BUFFERED_AMOUNT / 2;\n\t}\n}\n", "const WebSocketSignalingProvider = require('./websocket-signaling-provider');\n\nclass PeerJSSignalingProvider {\n constructor({ id, url, PeerImpl, WebSocketImpl, priority = 0, connectTimeoutMs = 10000 }) {\n if (!url) {\n throw new Error('PeerJS signaling provider requires a url');\n }\n\n this.id = id || url;\n this.url = url;\n this.priority = priority;\n this.isCustomPeerImpl = Boolean(PeerImpl);\n this.PeerImpl = PeerImpl || this.resolvePeerImplementation();\n this.WebSocketImpl = WebSocketImpl;\n this.connectTimeoutMs = connectTimeoutMs;\n this.peer = null;\n this.peerId = null;\n this.connections = new Map();\n this.messageHandlers = new Set();\n this.fallbackProvider = null;\n }\n\n resolvePeerImplementation() {\n try {\n const peerjs = require('peerjs');\n return peerjs.Peer || peerjs;\n } catch (error) {\n return null;\n }\n }\n\n parsePeerJsServerUrl() {\n const parsed = new URL(this.url);\n const secure = parsed.protocol === 'wss:';\n const host = parsed.hostname;\n const port = parsed.port ? Number(parsed.port) : secure ? 443 : 80;\n const path = parsed.pathname || '/';\n const key = parsed.searchParams.get('key') || 'peerjs';\n\n return { secure, host, port, path, key };\n }\n\n shouldUseWebSocketFallback() {\n return !this.isCustomPeerImpl && typeof globalThis.RTCPeerConnection !== 'function';\n }\n\n useWebSocketFallback() {\n if (!this.fallbackProvider) {\n this.fallbackProvider = new WebSocketSignalingProvider({\n id: `${this.id}-ws-fallback`,\n url: this.url,\n WebSocketImpl: this.WebSocketImpl,\n priority: this.priority\n });\n }\n return this.fallbackProvider;\n }\n\n async connect() {\n if (this.shouldUseWebSocketFallback()) {\n await this.useWebSocketFallback().connect();\n return;\n }\n\n if (!this.PeerImpl) {\n throw new Error('PeerJS implementation is not available');\n }\n\n const server = this.parsePeerJsServerUrl();\n const peerId = `dignityjs_${Math.random().toString(36).slice(2, 12)}`;\n\n await new Promise((resolve, reject) => {\n const peer = new this.PeerImpl(peerId, {\n host: server.host,\n port: server.port,\n path: server.path,\n secure: server.secure,\n key: server.key\n });\n\n const timeout = setTimeout(() => {\n reject(new Error(`Unable to connect to signaling url ${this.url}`));\n }, this.connectTimeoutMs);\n\n peer.on('open', () => {\n clearTimeout(timeout);\n this.peer = peer;\n this.peerId = peerId;\n resolve();\n });\n\n peer.on('connection', (connection) => {\n this.attachConnectionHandlers(connection);\n });\n\n peer.on('error', async (error) => {\n clearTimeout(timeout);\n if (error && error.type === 'browser-incompatible') {\n try {\n await this.useWebSocketFallback().connect();\n resolve();\n return;\n } catch (fallbackError) {\n reject(new Error(`Unable to connect to signaling url ${this.url}`));\n return;\n }\n }\n reject(new Error(`Unable to connect to signaling url ${this.url}`));\n });\n });\n }\n\n attachConnectionHandlers(connection) {\n const remoteId = connection.peer;\n this.connections.set(remoteId, connection);\n\n connection.on('data', (payload) => {\n for (const handler of this.messageHandlers) {\n handler(payload);\n }\n });\n\n connection.on('close', () => {\n this.connections.delete(remoteId);\n });\n }\n\n async openConnection(remotePeerId) {\n if (!this.peer) {\n throw new Error('PeerJS is not connected');\n }\n\n const existing = this.connections.get(remotePeerId);\n if (existing && existing.open) {\n return existing;\n }\n\n return await new Promise((resolve, reject) => {\n const connection = this.peer.connect(remotePeerId, { reliable: true, serialization: 'json' });\n const timeout = setTimeout(() => {\n reject(new Error(`Unable to connect peer ${remotePeerId} via ${this.url}`));\n }, this.connectTimeoutMs);\n\n connection.on('open', () => {\n clearTimeout(timeout);\n this.attachConnectionHandlers(connection);\n resolve(connection);\n });\n\n connection.on('error', () => {\n clearTimeout(timeout);\n reject(new Error(`Unable to connect peer ${remotePeerId} via ${this.url}`));\n });\n });\n }\n\n onMessage(handler) {\n if (this.fallbackProvider) {\n this.fallbackProvider.onMessage(handler);\n return;\n }\n this.messageHandlers.add(handler);\n }\n\n async send(message) {\n if (this.fallbackProvider) {\n await this.fallbackProvider.send(message);\n return;\n }\n\n if (!this.peer) {\n throw new Error(`Signaling socket is not open for ${this.url}`);\n }\n\n if (message && message.to) {\n const connection = await this.openConnection(message.to);\n connection.send(message);\n return;\n }\n\n for (const connection of this.connections.values()) {\n if (connection.open) {\n connection.send(message);\n }\n }\n }\n\n async disconnect() {\n if (this.fallbackProvider) {\n await this.fallbackProvider.disconnect();\n this.fallbackProvider = null;\n return;\n }\n\n for (const connection of this.connections.values()) {\n if (typeof connection.close === 'function') {\n connection.close();\n }\n }\n this.connections.clear();\n\n if (this.peer && typeof this.peer.destroy === 'function') {\n this.peer.destroy();\n }\n this.peer = null;\n this.peerId = null;\n }\n}\n\nmodule.exports = PeerJSSignalingProvider;\n", "const DEFAULT_CLOUDFLARE_SIGNALING_URLS = [\n 'wss://peerjs.92k.de/peerjs?key=peerjs',\n 'wss://0.peerjs.com/peerjs?key=peerjs'\n];\n\nconst DEFAULT_SIGNALING_FALLBACK_URLS = [\n 'wss://relay.dignity.dev/signaling',\n 'wss://backup-relay.dignity.dev/signaling'\n];\n\nmodule.exports = {\n DEFAULT_CLOUDFLARE_SIGNALING_URLS,\n DEFAULT_SIGNALING_FALLBACK_URLS\n};\n", "const SignalingPool = require('./signaling-pool');\nconst WebSocketSignalingProvider = require('./websocket-signaling-provider');\nconst PeerJSSignalingProvider = require('./peerjs-signaling-provider');\nconst {\n DEFAULT_CLOUDFLARE_SIGNALING_URLS,\n DEFAULT_SIGNALING_FALLBACK_URLS\n} = require('./default-signaling-config');\n\nfunction createDefaultSignalingPool(options = {}) {\n const cloudflareUrls = options.cloudflareUrls || DEFAULT_CLOUDFLARE_SIGNALING_URLS;\n const fallbackUrls = options.fallbackUrls || DEFAULT_SIGNALING_FALLBACK_URLS;\n const WebSocketImpl = options.WebSocketImpl;\n\n const providers = [];\n\n cloudflareUrls.forEach((url, index) => {\n const usePeerJsProvider = /^wss:\\/\\/(peerjs\\.92k\\.de|0\\.peerjs\\.com)(\\/|$)/.test(url);\n const ProviderClass = usePeerJsProvider ? PeerJSSignalingProvider : WebSocketSignalingProvider;\n\n providers.push(\n new ProviderClass({\n id: `cloudflare-${index + 1}`,\n url,\n WebSocketImpl,\n priority: index\n })\n );\n });\n\n fallbackUrls.forEach((url, index) => {\n providers.push(\n new WebSocketSignalingProvider({\n id: `fallback-${index + 1}`,\n url,\n WebSocketImpl,\n priority: cloudflareUrls.length + index\n })\n );\n });\n\n if (Array.isArray(options.customProviders)) {\n providers.push(...options.customProviders);\n }\n\n return new SignalingPool(providers);\n}\n\nmodule.exports = createDefaultSignalingPool;\n", "class InMemoryNetworkHub {\n constructor() {\n this.adapters = new Map();\n }\n\n register(adapter) {\n this.adapters.set(adapter.nodeId, adapter);\n }\n\n unregister(nodeId) {\n this.adapters.delete(nodeId);\n }\n\n async broadcast(senderId, message) {\n const deliveries = [];\n for (const [nodeId, adapter] of this.adapters.entries()) {\n if (nodeId !== senderId) {\n deliveries.push(adapter.receive(message));\n }\n }\n await Promise.all(deliveries);\n }\n}\n\nclass InMemoryNetworkAdapter {\n constructor(hub) {\n if (!hub) {\n throw new Error('InMemoryNetworkAdapter requires an InMemoryNetworkHub');\n }\n\n this.hub = hub;\n this.nodeId = null;\n this.messageHandlers = new Set();\n }\n\n async start(nodeId) {\n this.nodeId = nodeId;\n this.hub.register(this);\n }\n\n async stop() {\n if (this.nodeId) {\n this.hub.unregister(this.nodeId);\n }\n\n this.nodeId = null;\n }\n\n async broadcast(message) {\n if (!this.nodeId) {\n throw new Error('Network adapter has not been started');\n }\n\n await this.hub.broadcast(this.nodeId, message);\n }\n\n onMessage(handler) {\n this.messageHandlers.add(handler);\n }\n\n offMessage(handler) {\n this.messageHandlers.delete(handler);\n }\n\n async receive(message) {\n const deliveries = [];\n for (const handler of this.messageHandlers) {\n deliveries.push(handler(message));\n }\n await Promise.all(deliveries);\n }\n}\n\nmodule.exports = {\n InMemoryNetworkHub,\n InMemoryNetworkAdapter\n};\n", "/**\n * dignity.js public API.\n *\n * This package exposes:\n * - `DignityP2P`: REST-like object CRUD over peer-to-peer operation replication\n * - signaling providers and pool helpers\n * - in-memory adapter utilities for tests and local prototyping\n */\nconst DignityP2P = require('./core/dignity-p2p');\nconst createDefaultSignalingPool = require('./signaling/create-default-signaling-pool');\nconst SignalingPool = require('./signaling/signaling-pool');\nconst WebSocketSignalingProvider = require('./signaling/websocket-signaling-provider');\nconst PeerJSSignalingProvider = require('./signaling/peerjs-signaling-provider');\nconst {\n InMemoryNetworkHub,\n InMemoryNetworkAdapter\n} = require('./network/in-memory-network');\nconst {\n DEFAULT_CLOUDFLARE_SIGNALING_URLS,\n DEFAULT_SIGNALING_FALLBACK_URLS\n} = require('./signaling/default-signaling-config');\nconst VDF = require('./security/vdf');\nconst SlothPermutation = require('./security/sloth-vdf');\nconst {\n MessageSecurityService,\n DEFAULT_SECURITY_OPTIONS\n} = require('./security/message-security-service');\n\nmodule.exports = {\n DignityP2P,\n createDefaultSignalingPool,\n SignalingPool,\n WebSocketSignalingProvider,\n PeerJSSignalingProvider,\n InMemoryNetworkHub,\n InMemoryNetworkAdapter,\n DEFAULT_CLOUDFLARE_SIGNALING_URLS,\n DEFAULT_SIGNALING_FALLBACK_URLS,\n VDF,\n SlothPermutation,\n MessageSecurityService,\n DEFAULT_SECURITY_OPTIONS\n};\n"],
5
- "mappings": "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AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,YAAI,EAAE,CAAC;AACP,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,YAAI,EAAE,CAAC;AACP,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,YAAI,EAAE,CAAC;AACP,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,YAAI,EAAE,CAAC;AACP,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,YAAI,EAAE,CAAC;AACP,cAAM,IAAI;AACV,cAAM,IAAI;AACV,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,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",
3
+ "sources": ["../src/utils/event-emitter.js", "../node_modules/tweetnacl/nacl-fast.js", "../node_modules/tweetnacl-util/nacl-util.js", "../src/security/sloth-vdf.js", "../src/security/vdf.js", "../src/security/message-security-service.js", "../src/core/dignity-p2p.js", "../src/signaling/signaling-pool.js", "../src/signaling/websocket-signaling-provider.js", "../node_modules/peerjs-js-binarypack/lib/binarypack.ts", "../node_modules/peerjs-js-binarypack/lib/bufferbuilder.ts", "../node_modules/webrtc-adapter/dist/utils.js", "../node_modules/webrtc-adapter/dist/chrome/getusermedia.js", "../node_modules/webrtc-adapter/dist/chrome/chrome_shim.js", "../node_modules/webrtc-adapter/dist/firefox/getusermedia.js", "../node_modules/webrtc-adapter/dist/firefox/getdisplaymedia.js", "../node_modules/webrtc-adapter/dist/firefox/firefox_shim.js", "../node_modules/webrtc-adapter/dist/safari/safari_shim.js", "../node_modules/sdp/dist/sdp.js", "../node_modules/webrtc-adapter/dist/common_shim.js", "../node_modules/webrtc-adapter/dist/adapter_factory.js", "../node_modules/webrtc-adapter/dist/adapter_core.js", "../node_modules/eventemitter3/index.js", "../node_modules/@msgpack/msgpack/src/utils/int.ts", "../node_modules/@msgpack/msgpack/src/utils/utf8.ts", "../node_modules/@msgpack/msgpack/src/ExtData.ts", "../node_modules/@msgpack/msgpack/src/DecodeError.ts", "../node_modules/@msgpack/msgpack/src/timestamp.ts", "../node_modules/@msgpack/msgpack/src/ExtensionCodec.ts", "../node_modules/@msgpack/msgpack/src/utils/typedArrays.ts", "../node_modules/@msgpack/msgpack/src/Encoder.ts", "../node_modules/@msgpack/msgpack/src/encode.ts", "../node_modules/@msgpack/msgpack/src/utils/prettyByte.ts", "../node_modules/@msgpack/msgpack/src/CachedKeyDecoder.ts", "../node_modules/@msgpack/msgpack/src/Decoder.ts", "../node_modules/@msgpack/msgpack/src/decode.ts", "../node_modules/@msgpack/msgpack/src/utils/stream.ts", "../node_modules/@msgpack/msgpack/src/decodeAsync.ts", "../node_modules/@msgpack/msgpack/src/index.ts", "../node_modules/peerjs/dist/lib/exports.ts", "../node_modules/peerjs/dist/lib/util.ts", "../node_modules/peerjs/dist/lib/dataconnection/BufferedConnection/binaryPackChunker.ts", "../node_modules/peerjs/dist/lib/supports.ts", "../node_modules/peerjs/dist/lib/utils/validateId.ts", "../node_modules/peerjs/dist/lib/utils/randomToken.ts", "../node_modules/peerjs/dist/lib/peer.ts", "../node_modules/peerjs/dist/lib/logger.ts", "../node_modules/peerjs/dist/lib/socket.ts", "../node_modules/peerjs/dist/lib/enums.ts", "../node_modules/peerjs/dist/lib/version.ts", "../node_modules/peerjs/dist/lib/mediaconnection.ts", "../node_modules/peerjs/dist/lib/negotiator.ts", "../node_modules/peerjs/dist/lib/baseconnection.ts", "../node_modules/peerjs/dist/lib/peerError.ts", "../node_modules/peerjs/dist/lib/api.ts", "../node_modules/peerjs/dist/lib/dataconnection/BufferedConnection/BinaryPack.ts", "../node_modules/peerjs/dist/lib/dataconnection/BufferedConnection/BufferedConnection.ts", "../node_modules/peerjs/dist/lib/dataconnection/DataConnection.ts", "../node_modules/peerjs/dist/lib/dataconnection/BufferedConnection/Raw.ts", "../node_modules/peerjs/dist/lib/dataconnection/BufferedConnection/Json.ts", "../node_modules/peerjs/dist/lib/msgPackPeer.ts", "../node_modules/peerjs/dist/lib/dataconnection/StreamConnection/MsgPack.ts", "../node_modules/peerjs/dist/lib/dataconnection/StreamConnection/StreamConnection.ts", "../src/signaling/peerjs-signaling-provider.js", "../src/signaling/default-signaling-config.js", "../src/signaling/create-default-signaling-pool.js", "../src/network/in-memory-network.js", "../src/persistence/indexeddb-persistence.js", "../src/index.js"],
4
+ "sourcesContent": ["class EventEmitter {\n constructor() {\n this.handlers = new Map();\n }\n\n on(eventName, handler) {\n if (!this.handlers.has(eventName)) {\n this.handlers.set(eventName, new Set());\n }\n\n this.handlers.get(eventName).add(handler);\n }\n\n off(eventName, handler) {\n const eventHandlers = this.handlers.get(eventName);\n if (!eventHandlers) {\n return;\n }\n\n eventHandlers.delete(handler);\n if (eventHandlers.size === 0) {\n this.handlers.delete(eventName);\n }\n }\n\n emit(eventName, payload) {\n const eventHandlers = this.handlers.get(eventName);\n if (!eventHandlers) {\n return;\n }\n\n for (const handler of eventHandlers) {\n handler(payload);\n }\n }\n}\n\nmodule.exports = EventEmitter;\n", "(function(nacl) {\n'use strict';\n\n// Ported in 2014 by Dmitry Chestnykh and Devi Mandiri.\n// Public domain.\n//\n// Implementation derived from TweetNaCl version 20140427.\n// See for details: http://tweetnacl.cr.yp.to/\n\nvar gf = function(init) {\n var i, r = new Float64Array(16);\n if (init) for (i = 0; i < init.length; i++) r[i] = init[i];\n return r;\n};\n\n// Pluggable, initialized in high-level API below.\nvar randombytes = function(/* x, n */) { throw new Error('no PRNG'); };\n\nvar _0 = new Uint8Array(16);\nvar _9 = new Uint8Array(32); _9[0] = 9;\n\nvar gf0 = gf(),\n gf1 = gf([1]),\n _121665 = gf([0xdb41, 1]),\n D = gf([0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]),\n D2 = gf([0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406]),\n X = gf([0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169]),\n Y = gf([0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666]),\n I = gf([0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]);\n\nfunction ts64(x, i, h, l) {\n x[i] = (h >> 24) & 0xff;\n x[i+1] = (h >> 16) & 0xff;\n x[i+2] = (h >> 8) & 0xff;\n x[i+3] = h & 0xff;\n x[i+4] = (l >> 24) & 0xff;\n x[i+5] = (l >> 16) & 0xff;\n x[i+6] = (l >> 8) & 0xff;\n x[i+7] = l & 0xff;\n}\n\nfunction vn(x, xi, y, yi, n) {\n var i,d = 0;\n for (i = 0; i < n; i++) d |= x[xi+i]^y[yi+i];\n return (1 & ((d - 1) >>> 8)) - 1;\n}\n\nfunction crypto_verify_16(x, xi, y, yi) {\n return vn(x,xi,y,yi,16);\n}\n\nfunction crypto_verify_32(x, xi, y, yi) {\n return vn(x,xi,y,yi,32);\n}\n\nfunction core_salsa20(o, p, k, c) {\n var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,\n j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,\n j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,\n j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,\n j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,\n j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,\n j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,\n j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,\n j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,\n j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,\n j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,\n j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,\n j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,\n j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,\n j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,\n j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;\n\n var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\n x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\n x15 = j15, u;\n\n for (var i = 0; i < 20; i += 2) {\n u = x0 + x12 | 0;\n x4 ^= u<<7 | u>>>(32-7);\n u = x4 + x0 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x4 | 0;\n x12 ^= u<<13 | u>>>(32-13);\n u = x12 + x8 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x1 | 0;\n x9 ^= u<<7 | u>>>(32-7);\n u = x9 + x5 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x9 | 0;\n x1 ^= u<<13 | u>>>(32-13);\n u = x1 + x13 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x6 | 0;\n x14 ^= u<<7 | u>>>(32-7);\n u = x14 + x10 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x14 | 0;\n x6 ^= u<<13 | u>>>(32-13);\n u = x6 + x2 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x11 | 0;\n x3 ^= u<<7 | u>>>(32-7);\n u = x3 + x15 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x3 | 0;\n x11 ^= u<<13 | u>>>(32-13);\n u = x11 + x7 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n\n u = x0 + x3 | 0;\n x1 ^= u<<7 | u>>>(32-7);\n u = x1 + x0 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x1 | 0;\n x3 ^= u<<13 | u>>>(32-13);\n u = x3 + x2 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x4 | 0;\n x6 ^= u<<7 | u>>>(32-7);\n u = x6 + x5 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x6 | 0;\n x4 ^= u<<13 | u>>>(32-13);\n u = x4 + x7 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x9 | 0;\n x11 ^= u<<7 | u>>>(32-7);\n u = x11 + x10 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x11 | 0;\n x9 ^= u<<13 | u>>>(32-13);\n u = x9 + x8 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x14 | 0;\n x12 ^= u<<7 | u>>>(32-7);\n u = x12 + x15 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x12 | 0;\n x14 ^= u<<13 | u>>>(32-13);\n u = x14 + x13 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n }\n x0 = x0 + j0 | 0;\n x1 = x1 + j1 | 0;\n x2 = x2 + j2 | 0;\n x3 = x3 + j3 | 0;\n x4 = x4 + j4 | 0;\n x5 = x5 + j5 | 0;\n x6 = x6 + j6 | 0;\n x7 = x7 + j7 | 0;\n x8 = x8 + j8 | 0;\n x9 = x9 + j9 | 0;\n x10 = x10 + j10 | 0;\n x11 = x11 + j11 | 0;\n x12 = x12 + j12 | 0;\n x13 = x13 + j13 | 0;\n x14 = x14 + j14 | 0;\n x15 = x15 + j15 | 0;\n\n o[ 0] = x0 >>> 0 & 0xff;\n o[ 1] = x0 >>> 8 & 0xff;\n o[ 2] = x0 >>> 16 & 0xff;\n o[ 3] = x0 >>> 24 & 0xff;\n\n o[ 4] = x1 >>> 0 & 0xff;\n o[ 5] = x1 >>> 8 & 0xff;\n o[ 6] = x1 >>> 16 & 0xff;\n o[ 7] = x1 >>> 24 & 0xff;\n\n o[ 8] = x2 >>> 0 & 0xff;\n o[ 9] = x2 >>> 8 & 0xff;\n o[10] = x2 >>> 16 & 0xff;\n o[11] = x2 >>> 24 & 0xff;\n\n o[12] = x3 >>> 0 & 0xff;\n o[13] = x3 >>> 8 & 0xff;\n o[14] = x3 >>> 16 & 0xff;\n o[15] = x3 >>> 24 & 0xff;\n\n o[16] = x4 >>> 0 & 0xff;\n o[17] = x4 >>> 8 & 0xff;\n o[18] = x4 >>> 16 & 0xff;\n o[19] = x4 >>> 24 & 0xff;\n\n o[20] = x5 >>> 0 & 0xff;\n o[21] = x5 >>> 8 & 0xff;\n o[22] = x5 >>> 16 & 0xff;\n o[23] = x5 >>> 24 & 0xff;\n\n o[24] = x6 >>> 0 & 0xff;\n o[25] = x6 >>> 8 & 0xff;\n o[26] = x6 >>> 16 & 0xff;\n o[27] = x6 >>> 24 & 0xff;\n\n o[28] = x7 >>> 0 & 0xff;\n o[29] = x7 >>> 8 & 0xff;\n o[30] = x7 >>> 16 & 0xff;\n o[31] = x7 >>> 24 & 0xff;\n\n o[32] = x8 >>> 0 & 0xff;\n o[33] = x8 >>> 8 & 0xff;\n o[34] = x8 >>> 16 & 0xff;\n o[35] = x8 >>> 24 & 0xff;\n\n o[36] = x9 >>> 0 & 0xff;\n o[37] = x9 >>> 8 & 0xff;\n o[38] = x9 >>> 16 & 0xff;\n o[39] = x9 >>> 24 & 0xff;\n\n o[40] = x10 >>> 0 & 0xff;\n o[41] = x10 >>> 8 & 0xff;\n o[42] = x10 >>> 16 & 0xff;\n o[43] = x10 >>> 24 & 0xff;\n\n o[44] = x11 >>> 0 & 0xff;\n o[45] = x11 >>> 8 & 0xff;\n o[46] = x11 >>> 16 & 0xff;\n o[47] = x11 >>> 24 & 0xff;\n\n o[48] = x12 >>> 0 & 0xff;\n o[49] = x12 >>> 8 & 0xff;\n o[50] = x12 >>> 16 & 0xff;\n o[51] = x12 >>> 24 & 0xff;\n\n o[52] = x13 >>> 0 & 0xff;\n o[53] = x13 >>> 8 & 0xff;\n o[54] = x13 >>> 16 & 0xff;\n o[55] = x13 >>> 24 & 0xff;\n\n o[56] = x14 >>> 0 & 0xff;\n o[57] = x14 >>> 8 & 0xff;\n o[58] = x14 >>> 16 & 0xff;\n o[59] = x14 >>> 24 & 0xff;\n\n o[60] = x15 >>> 0 & 0xff;\n o[61] = x15 >>> 8 & 0xff;\n o[62] = x15 >>> 16 & 0xff;\n o[63] = x15 >>> 24 & 0xff;\n}\n\nfunction core_hsalsa20(o,p,k,c) {\n var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,\n j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,\n j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,\n j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,\n j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,\n j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,\n j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,\n j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,\n j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,\n j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,\n j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,\n j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,\n j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,\n j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,\n j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,\n j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;\n\n var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\n x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\n x15 = j15, u;\n\n for (var i = 0; i < 20; i += 2) {\n u = x0 + x12 | 0;\n x4 ^= u<<7 | u>>>(32-7);\n u = x4 + x0 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x4 | 0;\n x12 ^= u<<13 | u>>>(32-13);\n u = x12 + x8 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x1 | 0;\n x9 ^= u<<7 | u>>>(32-7);\n u = x9 + x5 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x9 | 0;\n x1 ^= u<<13 | u>>>(32-13);\n u = x1 + x13 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x6 | 0;\n x14 ^= u<<7 | u>>>(32-7);\n u = x14 + x10 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x14 | 0;\n x6 ^= u<<13 | u>>>(32-13);\n u = x6 + x2 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x11 | 0;\n x3 ^= u<<7 | u>>>(32-7);\n u = x3 + x15 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x3 | 0;\n x11 ^= u<<13 | u>>>(32-13);\n u = x11 + x7 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n\n u = x0 + x3 | 0;\n x1 ^= u<<7 | u>>>(32-7);\n u = x1 + x0 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x1 | 0;\n x3 ^= u<<13 | u>>>(32-13);\n u = x3 + x2 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x4 | 0;\n x6 ^= u<<7 | u>>>(32-7);\n u = x6 + x5 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x6 | 0;\n x4 ^= u<<13 | u>>>(32-13);\n u = x4 + x7 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x9 | 0;\n x11 ^= u<<7 | u>>>(32-7);\n u = x11 + x10 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x11 | 0;\n x9 ^= u<<13 | u>>>(32-13);\n u = x9 + x8 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x14 | 0;\n x12 ^= u<<7 | u>>>(32-7);\n u = x12 + x15 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x12 | 0;\n x14 ^= u<<13 | u>>>(32-13);\n u = x14 + x13 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n }\n\n o[ 0] = x0 >>> 0 & 0xff;\n o[ 1] = x0 >>> 8 & 0xff;\n o[ 2] = x0 >>> 16 & 0xff;\n o[ 3] = x0 >>> 24 & 0xff;\n\n o[ 4] = x5 >>> 0 & 0xff;\n o[ 5] = x5 >>> 8 & 0xff;\n o[ 6] = x5 >>> 16 & 0xff;\n o[ 7] = x5 >>> 24 & 0xff;\n\n o[ 8] = x10 >>> 0 & 0xff;\n o[ 9] = x10 >>> 8 & 0xff;\n o[10] = x10 >>> 16 & 0xff;\n o[11] = x10 >>> 24 & 0xff;\n\n o[12] = x15 >>> 0 & 0xff;\n o[13] = x15 >>> 8 & 0xff;\n o[14] = x15 >>> 16 & 0xff;\n o[15] = x15 >>> 24 & 0xff;\n\n o[16] = x6 >>> 0 & 0xff;\n o[17] = x6 >>> 8 & 0xff;\n o[18] = x6 >>> 16 & 0xff;\n o[19] = x6 >>> 24 & 0xff;\n\n o[20] = x7 >>> 0 & 0xff;\n o[21] = x7 >>> 8 & 0xff;\n o[22] = x7 >>> 16 & 0xff;\n o[23] = x7 >>> 24 & 0xff;\n\n o[24] = x8 >>> 0 & 0xff;\n o[25] = x8 >>> 8 & 0xff;\n o[26] = x8 >>> 16 & 0xff;\n o[27] = x8 >>> 24 & 0xff;\n\n o[28] = x9 >>> 0 & 0xff;\n o[29] = x9 >>> 8 & 0xff;\n o[30] = x9 >>> 16 & 0xff;\n o[31] = x9 >>> 24 & 0xff;\n}\n\nfunction crypto_core_salsa20(out,inp,k,c) {\n core_salsa20(out,inp,k,c);\n}\n\nfunction crypto_core_hsalsa20(out,inp,k,c) {\n core_hsalsa20(out,inp,k,c);\n}\n\nvar sigma = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]);\n // \"expand 32-byte k\"\n\nfunction crypto_stream_salsa20_xor(c,cpos,m,mpos,b,n,k) {\n var z = new Uint8Array(16), x = new Uint8Array(64);\n var u, i;\n for (i = 0; i < 16; i++) z[i] = 0;\n for (i = 0; i < 8; i++) z[i] = n[i];\n while (b >= 64) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < 64; i++) c[cpos+i] = m[mpos+i] ^ x[i];\n u = 1;\n for (i = 8; i < 16; i++) {\n u = u + (z[i] & 0xff) | 0;\n z[i] = u & 0xff;\n u >>>= 8;\n }\n b -= 64;\n cpos += 64;\n mpos += 64;\n }\n if (b > 0) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < b; i++) c[cpos+i] = m[mpos+i] ^ x[i];\n }\n return 0;\n}\n\nfunction crypto_stream_salsa20(c,cpos,b,n,k) {\n var z = new Uint8Array(16), x = new Uint8Array(64);\n var u, i;\n for (i = 0; i < 16; i++) z[i] = 0;\n for (i = 0; i < 8; i++) z[i] = n[i];\n while (b >= 64) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < 64; i++) c[cpos+i] = x[i];\n u = 1;\n for (i = 8; i < 16; i++) {\n u = u + (z[i] & 0xff) | 0;\n z[i] = u & 0xff;\n u >>>= 8;\n }\n b -= 64;\n cpos += 64;\n }\n if (b > 0) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < b; i++) c[cpos+i] = x[i];\n }\n return 0;\n}\n\nfunction crypto_stream(c,cpos,d,n,k) {\n var s = new Uint8Array(32);\n crypto_core_hsalsa20(s,n,k,sigma);\n var sn = new Uint8Array(8);\n for (var i = 0; i < 8; i++) sn[i] = n[i+16];\n return crypto_stream_salsa20(c,cpos,d,sn,s);\n}\n\nfunction crypto_stream_xor(c,cpos,m,mpos,d,n,k) {\n var s = new Uint8Array(32);\n crypto_core_hsalsa20(s,n,k,sigma);\n var sn = new Uint8Array(8);\n for (var i = 0; i < 8; i++) sn[i] = n[i+16];\n return crypto_stream_salsa20_xor(c,cpos,m,mpos,d,sn,s);\n}\n\n/*\n* Port of Andrew Moon's Poly1305-donna-16. Public domain.\n* https://github.com/floodyberry/poly1305-donna\n*/\n\nvar poly1305 = function(key) {\n this.buffer = new Uint8Array(16);\n this.r = new Uint16Array(10);\n this.h = new Uint16Array(10);\n this.pad = new Uint16Array(8);\n this.leftover = 0;\n this.fin = 0;\n\n var t0, t1, t2, t3, t4, t5, t6, t7;\n\n t0 = key[ 0] & 0xff | (key[ 1] & 0xff) << 8; this.r[0] = ( t0 ) & 0x1fff;\n t1 = key[ 2] & 0xff | (key[ 3] & 0xff) << 8; this.r[1] = ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\n t2 = key[ 4] & 0xff | (key[ 5] & 0xff) << 8; this.r[2] = ((t1 >>> 10) | (t2 << 6)) & 0x1f03;\n t3 = key[ 6] & 0xff | (key[ 7] & 0xff) << 8; this.r[3] = ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\n t4 = key[ 8] & 0xff | (key[ 9] & 0xff) << 8; this.r[4] = ((t3 >>> 4) | (t4 << 12)) & 0x00ff;\n this.r[5] = ((t4 >>> 1)) & 0x1ffe;\n t5 = key[10] & 0xff | (key[11] & 0xff) << 8; this.r[6] = ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\n t6 = key[12] & 0xff | (key[13] & 0xff) << 8; this.r[7] = ((t5 >>> 11) | (t6 << 5)) & 0x1f81;\n t7 = key[14] & 0xff | (key[15] & 0xff) << 8; this.r[8] = ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\n this.r[9] = ((t7 >>> 5)) & 0x007f;\n\n this.pad[0] = key[16] & 0xff | (key[17] & 0xff) << 8;\n this.pad[1] = key[18] & 0xff | (key[19] & 0xff) << 8;\n this.pad[2] = key[20] & 0xff | (key[21] & 0xff) << 8;\n this.pad[3] = key[22] & 0xff | (key[23] & 0xff) << 8;\n this.pad[4] = key[24] & 0xff | (key[25] & 0xff) << 8;\n this.pad[5] = key[26] & 0xff | (key[27] & 0xff) << 8;\n this.pad[6] = key[28] & 0xff | (key[29] & 0xff) << 8;\n this.pad[7] = key[30] & 0xff | (key[31] & 0xff) << 8;\n};\n\npoly1305.prototype.blocks = function(m, mpos, bytes) {\n var hibit = this.fin ? 0 : (1 << 11);\n var t0, t1, t2, t3, t4, t5, t6, t7, c;\n var d0, d1, d2, d3, d4, d5, d6, d7, d8, d9;\n\n var h0 = this.h[0],\n h1 = this.h[1],\n h2 = this.h[2],\n h3 = this.h[3],\n h4 = this.h[4],\n h5 = this.h[5],\n h6 = this.h[6],\n h7 = this.h[7],\n h8 = this.h[8],\n h9 = this.h[9];\n\n var r0 = this.r[0],\n r1 = this.r[1],\n r2 = this.r[2],\n r3 = this.r[3],\n r4 = this.r[4],\n r5 = this.r[5],\n r6 = this.r[6],\n r7 = this.r[7],\n r8 = this.r[8],\n r9 = this.r[9];\n\n while (bytes >= 16) {\n t0 = m[mpos+ 0] & 0xff | (m[mpos+ 1] & 0xff) << 8; h0 += ( t0 ) & 0x1fff;\n t1 = m[mpos+ 2] & 0xff | (m[mpos+ 3] & 0xff) << 8; h1 += ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\n t2 = m[mpos+ 4] & 0xff | (m[mpos+ 5] & 0xff) << 8; h2 += ((t1 >>> 10) | (t2 << 6)) & 0x1fff;\n t3 = m[mpos+ 6] & 0xff | (m[mpos+ 7] & 0xff) << 8; h3 += ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\n t4 = m[mpos+ 8] & 0xff | (m[mpos+ 9] & 0xff) << 8; h4 += ((t3 >>> 4) | (t4 << 12)) & 0x1fff;\n h5 += ((t4 >>> 1)) & 0x1fff;\n t5 = m[mpos+10] & 0xff | (m[mpos+11] & 0xff) << 8; h6 += ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\n t6 = m[mpos+12] & 0xff | (m[mpos+13] & 0xff) << 8; h7 += ((t5 >>> 11) | (t6 << 5)) & 0x1fff;\n t7 = m[mpos+14] & 0xff | (m[mpos+15] & 0xff) << 8; h8 += ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\n h9 += ((t7 >>> 5)) | hibit;\n\n c = 0;\n\n d0 = c;\n d0 += h0 * r0;\n d0 += h1 * (5 * r9);\n d0 += h2 * (5 * r8);\n d0 += h3 * (5 * r7);\n d0 += h4 * (5 * r6);\n c = (d0 >>> 13); d0 &= 0x1fff;\n d0 += h5 * (5 * r5);\n d0 += h6 * (5 * r4);\n d0 += h7 * (5 * r3);\n d0 += h8 * (5 * r2);\n d0 += h9 * (5 * r1);\n c += (d0 >>> 13); d0 &= 0x1fff;\n\n d1 = c;\n d1 += h0 * r1;\n d1 += h1 * r0;\n d1 += h2 * (5 * r9);\n d1 += h3 * (5 * r8);\n d1 += h4 * (5 * r7);\n c = (d1 >>> 13); d1 &= 0x1fff;\n d1 += h5 * (5 * r6);\n d1 += h6 * (5 * r5);\n d1 += h7 * (5 * r4);\n d1 += h8 * (5 * r3);\n d1 += h9 * (5 * r2);\n c += (d1 >>> 13); d1 &= 0x1fff;\n\n d2 = c;\n d2 += h0 * r2;\n d2 += h1 * r1;\n d2 += h2 * r0;\n d2 += h3 * (5 * r9);\n d2 += h4 * (5 * r8);\n c = (d2 >>> 13); d2 &= 0x1fff;\n d2 += h5 * (5 * r7);\n d2 += h6 * (5 * r6);\n d2 += h7 * (5 * r5);\n d2 += h8 * (5 * r4);\n d2 += h9 * (5 * r3);\n c += (d2 >>> 13); d2 &= 0x1fff;\n\n d3 = c;\n d3 += h0 * r3;\n d3 += h1 * r2;\n d3 += h2 * r1;\n d3 += h3 * r0;\n d3 += h4 * (5 * r9);\n c = (d3 >>> 13); d3 &= 0x1fff;\n d3 += h5 * (5 * r8);\n d3 += h6 * (5 * r7);\n d3 += h7 * (5 * r6);\n d3 += h8 * (5 * r5);\n d3 += h9 * (5 * r4);\n c += (d3 >>> 13); d3 &= 0x1fff;\n\n d4 = c;\n d4 += h0 * r4;\n d4 += h1 * r3;\n d4 += h2 * r2;\n d4 += h3 * r1;\n d4 += h4 * r0;\n c = (d4 >>> 13); d4 &= 0x1fff;\n d4 += h5 * (5 * r9);\n d4 += h6 * (5 * r8);\n d4 += h7 * (5 * r7);\n d4 += h8 * (5 * r6);\n d4 += h9 * (5 * r5);\n c += (d4 >>> 13); d4 &= 0x1fff;\n\n d5 = c;\n d5 += h0 * r5;\n d5 += h1 * r4;\n d5 += h2 * r3;\n d5 += h3 * r2;\n d5 += h4 * r1;\n c = (d5 >>> 13); d5 &= 0x1fff;\n d5 += h5 * r0;\n d5 += h6 * (5 * r9);\n d5 += h7 * (5 * r8);\n d5 += h8 * (5 * r7);\n d5 += h9 * (5 * r6);\n c += (d5 >>> 13); d5 &= 0x1fff;\n\n d6 = c;\n d6 += h0 * r6;\n d6 += h1 * r5;\n d6 += h2 * r4;\n d6 += h3 * r3;\n d6 += h4 * r2;\n c = (d6 >>> 13); d6 &= 0x1fff;\n d6 += h5 * r1;\n d6 += h6 * r0;\n d6 += h7 * (5 * r9);\n d6 += h8 * (5 * r8);\n d6 += h9 * (5 * r7);\n c += (d6 >>> 13); d6 &= 0x1fff;\n\n d7 = c;\n d7 += h0 * r7;\n d7 += h1 * r6;\n d7 += h2 * r5;\n d7 += h3 * r4;\n d7 += h4 * r3;\n c = (d7 >>> 13); d7 &= 0x1fff;\n d7 += h5 * r2;\n d7 += h6 * r1;\n d7 += h7 * r0;\n d7 += h8 * (5 * r9);\n d7 += h9 * (5 * r8);\n c += (d7 >>> 13); d7 &= 0x1fff;\n\n d8 = c;\n d8 += h0 * r8;\n d8 += h1 * r7;\n d8 += h2 * r6;\n d8 += h3 * r5;\n d8 += h4 * r4;\n c = (d8 >>> 13); d8 &= 0x1fff;\n d8 += h5 * r3;\n d8 += h6 * r2;\n d8 += h7 * r1;\n d8 += h8 * r0;\n d8 += h9 * (5 * r9);\n c += (d8 >>> 13); d8 &= 0x1fff;\n\n d9 = c;\n d9 += h0 * r9;\n d9 += h1 * r8;\n d9 += h2 * r7;\n d9 += h3 * r6;\n d9 += h4 * r5;\n c = (d9 >>> 13); d9 &= 0x1fff;\n d9 += h5 * r4;\n d9 += h6 * r3;\n d9 += h7 * r2;\n d9 += h8 * r1;\n d9 += h9 * r0;\n c += (d9 >>> 13); d9 &= 0x1fff;\n\n c = (((c << 2) + c)) | 0;\n c = (c + d0) | 0;\n d0 = c & 0x1fff;\n c = (c >>> 13);\n d1 += c;\n\n h0 = d0;\n h1 = d1;\n h2 = d2;\n h3 = d3;\n h4 = d4;\n h5 = d5;\n h6 = d6;\n h7 = d7;\n h8 = d8;\n h9 = d9;\n\n mpos += 16;\n bytes -= 16;\n }\n this.h[0] = h0;\n this.h[1] = h1;\n this.h[2] = h2;\n this.h[3] = h3;\n this.h[4] = h4;\n this.h[5] = h5;\n this.h[6] = h6;\n this.h[7] = h7;\n this.h[8] = h8;\n this.h[9] = h9;\n};\n\npoly1305.prototype.finish = function(mac, macpos) {\n var g = new Uint16Array(10);\n var c, mask, f, i;\n\n if (this.leftover) {\n i = this.leftover;\n this.buffer[i++] = 1;\n for (; i < 16; i++) this.buffer[i] = 0;\n this.fin = 1;\n this.blocks(this.buffer, 0, 16);\n }\n\n c = this.h[1] >>> 13;\n this.h[1] &= 0x1fff;\n for (i = 2; i < 10; i++) {\n this.h[i] += c;\n c = this.h[i] >>> 13;\n this.h[i] &= 0x1fff;\n }\n this.h[0] += (c * 5);\n c = this.h[0] >>> 13;\n this.h[0] &= 0x1fff;\n this.h[1] += c;\n c = this.h[1] >>> 13;\n this.h[1] &= 0x1fff;\n this.h[2] += c;\n\n g[0] = this.h[0] + 5;\n c = g[0] >>> 13;\n g[0] &= 0x1fff;\n for (i = 1; i < 10; i++) {\n g[i] = this.h[i] + c;\n c = g[i] >>> 13;\n g[i] &= 0x1fff;\n }\n g[9] -= (1 << 13);\n\n mask = (c ^ 1) - 1;\n for (i = 0; i < 10; i++) g[i] &= mask;\n mask = ~mask;\n for (i = 0; i < 10; i++) this.h[i] = (this.h[i] & mask) | g[i];\n\n this.h[0] = ((this.h[0] ) | (this.h[1] << 13) ) & 0xffff;\n this.h[1] = ((this.h[1] >>> 3) | (this.h[2] << 10) ) & 0xffff;\n this.h[2] = ((this.h[2] >>> 6) | (this.h[3] << 7) ) & 0xffff;\n this.h[3] = ((this.h[3] >>> 9) | (this.h[4] << 4) ) & 0xffff;\n this.h[4] = ((this.h[4] >>> 12) | (this.h[5] << 1) | (this.h[6] << 14)) & 0xffff;\n this.h[5] = ((this.h[6] >>> 2) | (this.h[7] << 11) ) & 0xffff;\n this.h[6] = ((this.h[7] >>> 5) | (this.h[8] << 8) ) & 0xffff;\n this.h[7] = ((this.h[8] >>> 8) | (this.h[9] << 5) ) & 0xffff;\n\n f = this.h[0] + this.pad[0];\n this.h[0] = f & 0xffff;\n for (i = 1; i < 8; i++) {\n f = (((this.h[i] + this.pad[i]) | 0) + (f >>> 16)) | 0;\n this.h[i] = f & 0xffff;\n }\n\n mac[macpos+ 0] = (this.h[0] >>> 0) & 0xff;\n mac[macpos+ 1] = (this.h[0] >>> 8) & 0xff;\n mac[macpos+ 2] = (this.h[1] >>> 0) & 0xff;\n mac[macpos+ 3] = (this.h[1] >>> 8) & 0xff;\n mac[macpos+ 4] = (this.h[2] >>> 0) & 0xff;\n mac[macpos+ 5] = (this.h[2] >>> 8) & 0xff;\n mac[macpos+ 6] = (this.h[3] >>> 0) & 0xff;\n mac[macpos+ 7] = (this.h[3] >>> 8) & 0xff;\n mac[macpos+ 8] = (this.h[4] >>> 0) & 0xff;\n mac[macpos+ 9] = (this.h[4] >>> 8) & 0xff;\n mac[macpos+10] = (this.h[5] >>> 0) & 0xff;\n mac[macpos+11] = (this.h[5] >>> 8) & 0xff;\n mac[macpos+12] = (this.h[6] >>> 0) & 0xff;\n mac[macpos+13] = (this.h[6] >>> 8) & 0xff;\n mac[macpos+14] = (this.h[7] >>> 0) & 0xff;\n mac[macpos+15] = (this.h[7] >>> 8) & 0xff;\n};\n\npoly1305.prototype.update = function(m, mpos, bytes) {\n var i, want;\n\n if (this.leftover) {\n want = (16 - this.leftover);\n if (want > bytes)\n want = bytes;\n for (i = 0; i < want; i++)\n this.buffer[this.leftover + i] = m[mpos+i];\n bytes -= want;\n mpos += want;\n this.leftover += want;\n if (this.leftover < 16)\n return;\n this.blocks(this.buffer, 0, 16);\n this.leftover = 0;\n }\n\n if (bytes >= 16) {\n want = bytes - (bytes % 16);\n this.blocks(m, mpos, want);\n mpos += want;\n bytes -= want;\n }\n\n if (bytes) {\n for (i = 0; i < bytes; i++)\n this.buffer[this.leftover + i] = m[mpos+i];\n this.leftover += bytes;\n }\n};\n\nfunction crypto_onetimeauth(out, outpos, m, mpos, n, k) {\n var s = new poly1305(k);\n s.update(m, mpos, n);\n s.finish(out, outpos);\n return 0;\n}\n\nfunction crypto_onetimeauth_verify(h, hpos, m, mpos, n, k) {\n var x = new Uint8Array(16);\n crypto_onetimeauth(x,0,m,mpos,n,k);\n return crypto_verify_16(h,hpos,x,0);\n}\n\nfunction crypto_secretbox(c,m,d,n,k) {\n var i;\n if (d < 32) return -1;\n crypto_stream_xor(c,0,m,0,d,n,k);\n crypto_onetimeauth(c, 16, c, 32, d - 32, c);\n for (i = 0; i < 16; i++) c[i] = 0;\n return 0;\n}\n\nfunction crypto_secretbox_open(m,c,d,n,k) {\n var i;\n var x = new Uint8Array(32);\n if (d < 32) return -1;\n crypto_stream(x,0,32,n,k);\n if (crypto_onetimeauth_verify(c, 16,c, 32,d - 32,x) !== 0) return -1;\n crypto_stream_xor(m,0,c,0,d,n,k);\n for (i = 0; i < 32; i++) m[i] = 0;\n return 0;\n}\n\nfunction set25519(r, a) {\n var i;\n for (i = 0; i < 16; i++) r[i] = a[i]|0;\n}\n\nfunction car25519(o) {\n var i, v, c = 1;\n for (i = 0; i < 16; i++) {\n v = o[i] + c + 65535;\n c = Math.floor(v / 65536);\n o[i] = v - c * 65536;\n }\n o[0] += c-1 + 37 * (c-1);\n}\n\nfunction sel25519(p, q, b) {\n var t, c = ~(b-1);\n for (var i = 0; i < 16; i++) {\n t = c & (p[i] ^ q[i]);\n p[i] ^= t;\n q[i] ^= t;\n }\n}\n\nfunction pack25519(o, n) {\n var i, j, b;\n var m = gf(), t = gf();\n for (i = 0; i < 16; i++) t[i] = n[i];\n car25519(t);\n car25519(t);\n car25519(t);\n for (j = 0; j < 2; j++) {\n m[0] = t[0] - 0xffed;\n for (i = 1; i < 15; i++) {\n m[i] = t[i] - 0xffff - ((m[i-1]>>16) & 1);\n m[i-1] &= 0xffff;\n }\n m[15] = t[15] - 0x7fff - ((m[14]>>16) & 1);\n b = (m[15]>>16) & 1;\n m[14] &= 0xffff;\n sel25519(t, m, 1-b);\n }\n for (i = 0; i < 16; i++) {\n o[2*i] = t[i] & 0xff;\n o[2*i+1] = t[i]>>8;\n }\n}\n\nfunction neq25519(a, b) {\n var c = new Uint8Array(32), d = new Uint8Array(32);\n pack25519(c, a);\n pack25519(d, b);\n return crypto_verify_32(c, 0, d, 0);\n}\n\nfunction par25519(a) {\n var d = new Uint8Array(32);\n pack25519(d, a);\n return d[0] & 1;\n}\n\nfunction unpack25519(o, n) {\n var i;\n for (i = 0; i < 16; i++) o[i] = n[2*i] + (n[2*i+1] << 8);\n o[15] &= 0x7fff;\n}\n\nfunction A(o, a, b) {\n for (var i = 0; i < 16; i++) o[i] = a[i] + b[i];\n}\n\nfunction Z(o, a, b) {\n for (var i = 0; i < 16; i++) o[i] = a[i] - b[i];\n}\n\nfunction M(o, a, b) {\n var v, c,\n t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0,\n t8 = 0, t9 = 0, t10 = 0, t11 = 0, t12 = 0, t13 = 0, t14 = 0, t15 = 0,\n t16 = 0, t17 = 0, t18 = 0, t19 = 0, t20 = 0, t21 = 0, t22 = 0, t23 = 0,\n t24 = 0, t25 = 0, t26 = 0, t27 = 0, t28 = 0, t29 = 0, t30 = 0,\n b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3],\n b4 = b[4],\n b5 = b[5],\n b6 = b[6],\n b7 = b[7],\n b8 = b[8],\n b9 = b[9],\n b10 = b[10],\n b11 = b[11],\n b12 = b[12],\n b13 = b[13],\n b14 = b[14],\n b15 = b[15];\n\n v = a[0];\n t0 += v * b0;\n t1 += v * b1;\n t2 += v * b2;\n t3 += v * b3;\n t4 += v * b4;\n t5 += v * b5;\n t6 += v * b6;\n t7 += v * b7;\n t8 += v * b8;\n t9 += v * b9;\n t10 += v * b10;\n t11 += v * b11;\n t12 += v * b12;\n t13 += v * b13;\n t14 += v * b14;\n t15 += v * b15;\n v = a[1];\n t1 += v * b0;\n t2 += v * b1;\n t3 += v * b2;\n t4 += v * b3;\n t5 += v * b4;\n t6 += v * b5;\n t7 += v * b6;\n t8 += v * b7;\n t9 += v * b8;\n t10 += v * b9;\n t11 += v * b10;\n t12 += v * b11;\n t13 += v * b12;\n t14 += v * b13;\n t15 += v * b14;\n t16 += v * b15;\n v = a[2];\n t2 += v * b0;\n t3 += v * b1;\n t4 += v * b2;\n t5 += v * b3;\n t6 += v * b4;\n t7 += v * b5;\n t8 += v * b6;\n t9 += v * b7;\n t10 += v * b8;\n t11 += v * b9;\n t12 += v * b10;\n t13 += v * b11;\n t14 += v * b12;\n t15 += v * b13;\n t16 += v * b14;\n t17 += v * b15;\n v = a[3];\n t3 += v * b0;\n t4 += v * b1;\n t5 += v * b2;\n t6 += v * b3;\n t7 += v * b4;\n t8 += v * b5;\n t9 += v * b6;\n t10 += v * b7;\n t11 += v * b8;\n t12 += v * b9;\n t13 += v * b10;\n t14 += v * b11;\n t15 += v * b12;\n t16 += v * b13;\n t17 += v * b14;\n t18 += v * b15;\n v = a[4];\n t4 += v * b0;\n t5 += v * b1;\n t6 += v * b2;\n t7 += v * b3;\n t8 += v * b4;\n t9 += v * b5;\n t10 += v * b6;\n t11 += v * b7;\n t12 += v * b8;\n t13 += v * b9;\n t14 += v * b10;\n t15 += v * b11;\n t16 += v * b12;\n t17 += v * b13;\n t18 += v * b14;\n t19 += v * b15;\n v = a[5];\n t5 += v * b0;\n t6 += v * b1;\n t7 += v * b2;\n t8 += v * b3;\n t9 += v * b4;\n t10 += v * b5;\n t11 += v * b6;\n t12 += v * b7;\n t13 += v * b8;\n t14 += v * b9;\n t15 += v * b10;\n t16 += v * b11;\n t17 += v * b12;\n t18 += v * b13;\n t19 += v * b14;\n t20 += v * b15;\n v = a[6];\n t6 += v * b0;\n t7 += v * b1;\n t8 += v * b2;\n t9 += v * b3;\n t10 += v * b4;\n t11 += v * b5;\n t12 += v * b6;\n t13 += v * b7;\n t14 += v * b8;\n t15 += v * b9;\n t16 += v * b10;\n t17 += v * b11;\n t18 += v * b12;\n t19 += v * b13;\n t20 += v * b14;\n t21 += v * b15;\n v = a[7];\n t7 += v * b0;\n t8 += v * b1;\n t9 += v * b2;\n t10 += v * b3;\n t11 += v * b4;\n t12 += v * b5;\n t13 += v * b6;\n t14 += v * b7;\n t15 += v * b8;\n t16 += v * b9;\n t17 += v * b10;\n t18 += v * b11;\n t19 += v * b12;\n t20 += v * b13;\n t21 += v * b14;\n t22 += v * b15;\n v = a[8];\n t8 += v * b0;\n t9 += v * b1;\n t10 += v * b2;\n t11 += v * b3;\n t12 += v * b4;\n t13 += v * b5;\n t14 += v * b6;\n t15 += v * b7;\n t16 += v * b8;\n t17 += v * b9;\n t18 += v * b10;\n t19 += v * b11;\n t20 += v * b12;\n t21 += v * b13;\n t22 += v * b14;\n t23 += v * b15;\n v = a[9];\n t9 += v * b0;\n t10 += v * b1;\n t11 += v * b2;\n t12 += v * b3;\n t13 += v * b4;\n t14 += v * b5;\n t15 += v * b6;\n t16 += v * b7;\n t17 += v * b8;\n t18 += v * b9;\n t19 += v * b10;\n t20 += v * b11;\n t21 += v * b12;\n t22 += v * b13;\n t23 += v * b14;\n t24 += v * b15;\n v = a[10];\n t10 += v * b0;\n t11 += v * b1;\n t12 += v * b2;\n t13 += v * b3;\n t14 += v * b4;\n t15 += v * b5;\n t16 += v * b6;\n t17 += v * b7;\n t18 += v * b8;\n t19 += v * b9;\n t20 += v * b10;\n t21 += v * b11;\n t22 += v * b12;\n t23 += v * b13;\n t24 += v * b14;\n t25 += v * b15;\n v = a[11];\n t11 += v * b0;\n t12 += v * b1;\n t13 += v * b2;\n t14 += v * b3;\n t15 += v * b4;\n t16 += v * b5;\n t17 += v * b6;\n t18 += v * b7;\n t19 += v * b8;\n t20 += v * b9;\n t21 += v * b10;\n t22 += v * b11;\n t23 += v * b12;\n t24 += v * b13;\n t25 += v * b14;\n t26 += v * b15;\n v = a[12];\n t12 += v * b0;\n t13 += v * b1;\n t14 += v * b2;\n t15 += v * b3;\n t16 += v * b4;\n t17 += v * b5;\n t18 += v * b6;\n t19 += v * b7;\n t20 += v * b8;\n t21 += v * b9;\n t22 += v * b10;\n t23 += v * b11;\n t24 += v * b12;\n t25 += v * b13;\n t26 += v * b14;\n t27 += v * b15;\n v = a[13];\n t13 += v * b0;\n t14 += v * b1;\n t15 += v * b2;\n t16 += v * b3;\n t17 += v * b4;\n t18 += v * b5;\n t19 += v * b6;\n t20 += v * b7;\n t21 += v * b8;\n t22 += v * b9;\n t23 += v * b10;\n t24 += v * b11;\n t25 += v * b12;\n t26 += v * b13;\n t27 += v * b14;\n t28 += v * b15;\n v = a[14];\n t14 += v * b0;\n t15 += v * b1;\n t16 += v * b2;\n t17 += v * b3;\n t18 += v * b4;\n t19 += v * b5;\n t20 += v * b6;\n t21 += v * b7;\n t22 += v * b8;\n t23 += v * b9;\n t24 += v * b10;\n t25 += v * b11;\n t26 += v * b12;\n t27 += v * b13;\n t28 += v * b14;\n t29 += v * b15;\n v = a[15];\n t15 += v * b0;\n t16 += v * b1;\n t17 += v * b2;\n t18 += v * b3;\n t19 += v * b4;\n t20 += v * b5;\n t21 += v * b6;\n t22 += v * b7;\n t23 += v * b8;\n t24 += v * b9;\n t25 += v * b10;\n t26 += v * b11;\n t27 += v * b12;\n t28 += v * b13;\n t29 += v * b14;\n t30 += v * b15;\n\n t0 += 38 * t16;\n t1 += 38 * t17;\n t2 += 38 * t18;\n t3 += 38 * t19;\n t4 += 38 * t20;\n t5 += 38 * t21;\n t6 += 38 * t22;\n t7 += 38 * t23;\n t8 += 38 * t24;\n t9 += 38 * t25;\n t10 += 38 * t26;\n t11 += 38 * t27;\n t12 += 38 * t28;\n t13 += 38 * t29;\n t14 += 38 * t30;\n // t15 left as is\n\n // first car\n c = 1;\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n t0 += c-1 + 37 * (c-1);\n\n // second car\n c = 1;\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n t0 += c-1 + 37 * (c-1);\n\n o[ 0] = t0;\n o[ 1] = t1;\n o[ 2] = t2;\n o[ 3] = t3;\n o[ 4] = t4;\n o[ 5] = t5;\n o[ 6] = t6;\n o[ 7] = t7;\n o[ 8] = t8;\n o[ 9] = t9;\n o[10] = t10;\n o[11] = t11;\n o[12] = t12;\n o[13] = t13;\n o[14] = t14;\n o[15] = t15;\n}\n\nfunction S(o, a) {\n M(o, a, a);\n}\n\nfunction inv25519(o, i) {\n var c = gf();\n var a;\n for (a = 0; a < 16; a++) c[a] = i[a];\n for (a = 253; a >= 0; a--) {\n S(c, c);\n if(a !== 2 && a !== 4) M(c, c, i);\n }\n for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction pow2523(o, i) {\n var c = gf();\n var a;\n for (a = 0; a < 16; a++) c[a] = i[a];\n for (a = 250; a >= 0; a--) {\n S(c, c);\n if(a !== 1) M(c, c, i);\n }\n for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction crypto_scalarmult(q, n, p) {\n var z = new Uint8Array(32);\n var x = new Float64Array(80), r, i;\n var a = gf(), b = gf(), c = gf(),\n d = gf(), e = gf(), f = gf();\n for (i = 0; i < 31; i++) z[i] = n[i];\n z[31]=(n[31]&127)|64;\n z[0]&=248;\n unpack25519(x,p);\n for (i = 0; i < 16; i++) {\n b[i]=x[i];\n d[i]=a[i]=c[i]=0;\n }\n a[0]=d[0]=1;\n for (i=254; i>=0; --i) {\n r=(z[i>>>3]>>>(i&7))&1;\n sel25519(a,b,r);\n sel25519(c,d,r);\n A(e,a,c);\n Z(a,a,c);\n A(c,b,d);\n Z(b,b,d);\n S(d,e);\n S(f,a);\n M(a,c,a);\n M(c,b,e);\n A(e,a,c);\n Z(a,a,c);\n S(b,a);\n Z(c,d,f);\n M(a,c,_121665);\n A(a,a,d);\n M(c,c,a);\n M(a,d,f);\n M(d,b,x);\n S(b,e);\n sel25519(a,b,r);\n sel25519(c,d,r);\n }\n for (i = 0; i < 16; i++) {\n x[i+16]=a[i];\n x[i+32]=c[i];\n x[i+48]=b[i];\n x[i+64]=d[i];\n }\n var x32 = x.subarray(32);\n var x16 = x.subarray(16);\n inv25519(x32,x32);\n M(x16,x16,x32);\n pack25519(q,x16);\n return 0;\n}\n\nfunction crypto_scalarmult_base(q, n) {\n return crypto_scalarmult(q, n, _9);\n}\n\nfunction crypto_box_keypair(y, x) {\n randombytes(x, 32);\n return crypto_scalarmult_base(y, x);\n}\n\nfunction crypto_box_beforenm(k, y, x) {\n var s = new Uint8Array(32);\n crypto_scalarmult(s, x, y);\n return crypto_core_hsalsa20(k, _0, s, sigma);\n}\n\nvar crypto_box_afternm = crypto_secretbox;\nvar crypto_box_open_afternm = crypto_secretbox_open;\n\nfunction crypto_box(c, m, d, n, y, x) {\n var k = new Uint8Array(32);\n crypto_box_beforenm(k, y, x);\n return crypto_box_afternm(c, m, d, n, k);\n}\n\nfunction crypto_box_open(m, c, d, n, y, x) {\n var k = new Uint8Array(32);\n crypto_box_beforenm(k, y, x);\n return crypto_box_open_afternm(m, c, d, n, k);\n}\n\nvar K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction crypto_hashblocks_hl(hh, hl, m, n) {\n var wh = new Int32Array(16), wl = new Int32Array(16),\n bh0, bh1, bh2, bh3, bh4, bh5, bh6, bh7,\n bl0, bl1, bl2, bl3, bl4, bl5, bl6, bl7,\n th, tl, i, j, h, l, a, b, c, d;\n\n var ah0 = hh[0],\n ah1 = hh[1],\n ah2 = hh[2],\n ah3 = hh[3],\n ah4 = hh[4],\n ah5 = hh[5],\n ah6 = hh[6],\n ah7 = hh[7],\n\n al0 = hl[0],\n al1 = hl[1],\n al2 = hl[2],\n al3 = hl[3],\n al4 = hl[4],\n al5 = hl[5],\n al6 = hl[6],\n al7 = hl[7];\n\n var pos = 0;\n while (n >= 128) {\n for (i = 0; i < 16; i++) {\n j = 8 * i + pos;\n wh[i] = (m[j+0] << 24) | (m[j+1] << 16) | (m[j+2] << 8) | m[j+3];\n wl[i] = (m[j+4] << 24) | (m[j+5] << 16) | (m[j+6] << 8) | m[j+7];\n }\n for (i = 0; i < 80; i++) {\n bh0 = ah0;\n bh1 = ah1;\n bh2 = ah2;\n bh3 = ah3;\n bh4 = ah4;\n bh5 = ah5;\n bh6 = ah6;\n bh7 = ah7;\n\n bl0 = al0;\n bl1 = al1;\n bl2 = al2;\n bl3 = al3;\n bl4 = al4;\n bl5 = al5;\n bl6 = al6;\n bl7 = al7;\n\n // add\n h = ah7;\n l = al7;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n // Sigma1\n h = ((ah4 >>> 14) | (al4 << (32-14))) ^ ((ah4 >>> 18) | (al4 << (32-18))) ^ ((al4 >>> (41-32)) | (ah4 << (32-(41-32))));\n l = ((al4 >>> 14) | (ah4 << (32-14))) ^ ((al4 >>> 18) | (ah4 << (32-18))) ^ ((ah4 >>> (41-32)) | (al4 << (32-(41-32))));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // Ch\n h = (ah4 & ah5) ^ (~ah4 & ah6);\n l = (al4 & al5) ^ (~al4 & al6);\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // K\n h = K[i*2];\n l = K[i*2+1];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // w\n h = wh[i%16];\n l = wl[i%16];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n th = c & 0xffff | d << 16;\n tl = a & 0xffff | b << 16;\n\n // add\n h = th;\n l = tl;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n // Sigma0\n h = ((ah0 >>> 28) | (al0 << (32-28))) ^ ((al0 >>> (34-32)) | (ah0 << (32-(34-32)))) ^ ((al0 >>> (39-32)) | (ah0 << (32-(39-32))));\n l = ((al0 >>> 28) | (ah0 << (32-28))) ^ ((ah0 >>> (34-32)) | (al0 << (32-(34-32)))) ^ ((ah0 >>> (39-32)) | (al0 << (32-(39-32))));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // Maj\n h = (ah0 & ah1) ^ (ah0 & ah2) ^ (ah1 & ah2);\n l = (al0 & al1) ^ (al0 & al2) ^ (al1 & al2);\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n bh7 = (c & 0xffff) | (d << 16);\n bl7 = (a & 0xffff) | (b << 16);\n\n // add\n h = bh3;\n l = bl3;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = th;\n l = tl;\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n bh3 = (c & 0xffff) | (d << 16);\n bl3 = (a & 0xffff) | (b << 16);\n\n ah1 = bh0;\n ah2 = bh1;\n ah3 = bh2;\n ah4 = bh3;\n ah5 = bh4;\n ah6 = bh5;\n ah7 = bh6;\n ah0 = bh7;\n\n al1 = bl0;\n al2 = bl1;\n al3 = bl2;\n al4 = bl3;\n al5 = bl4;\n al6 = bl5;\n al7 = bl6;\n al0 = bl7;\n\n if (i%16 === 15) {\n for (j = 0; j < 16; j++) {\n // add\n h = wh[j];\n l = wl[j];\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = wh[(j+9)%16];\n l = wl[(j+9)%16];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // sigma0\n th = wh[(j+1)%16];\n tl = wl[(j+1)%16];\n h = ((th >>> 1) | (tl << (32-1))) ^ ((th >>> 8) | (tl << (32-8))) ^ (th >>> 7);\n l = ((tl >>> 1) | (th << (32-1))) ^ ((tl >>> 8) | (th << (32-8))) ^ ((tl >>> 7) | (th << (32-7)));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // sigma1\n th = wh[(j+14)%16];\n tl = wl[(j+14)%16];\n h = ((th >>> 19) | (tl << (32-19))) ^ ((tl >>> (61-32)) | (th << (32-(61-32)))) ^ (th >>> 6);\n l = ((tl >>> 19) | (th << (32-19))) ^ ((th >>> (61-32)) | (tl << (32-(61-32)))) ^ ((tl >>> 6) | (th << (32-6)));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n wh[j] = (c & 0xffff) | (d << 16);\n wl[j] = (a & 0xffff) | (b << 16);\n }\n }\n }\n\n // add\n h = ah0;\n l = al0;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[0];\n l = hl[0];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[0] = ah0 = (c & 0xffff) | (d << 16);\n hl[0] = al0 = (a & 0xffff) | (b << 16);\n\n h = ah1;\n l = al1;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[1];\n l = hl[1];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[1] = ah1 = (c & 0xffff) | (d << 16);\n hl[1] = al1 = (a & 0xffff) | (b << 16);\n\n h = ah2;\n l = al2;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[2];\n l = hl[2];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[2] = ah2 = (c & 0xffff) | (d << 16);\n hl[2] = al2 = (a & 0xffff) | (b << 16);\n\n h = ah3;\n l = al3;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[3];\n l = hl[3];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[3] = ah3 = (c & 0xffff) | (d << 16);\n hl[3] = al3 = (a & 0xffff) | (b << 16);\n\n h = ah4;\n l = al4;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[4];\n l = hl[4];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[4] = ah4 = (c & 0xffff) | (d << 16);\n hl[4] = al4 = (a & 0xffff) | (b << 16);\n\n h = ah5;\n l = al5;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[5];\n l = hl[5];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[5] = ah5 = (c & 0xffff) | (d << 16);\n hl[5] = al5 = (a & 0xffff) | (b << 16);\n\n h = ah6;\n l = al6;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[6];\n l = hl[6];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[6] = ah6 = (c & 0xffff) | (d << 16);\n hl[6] = al6 = (a & 0xffff) | (b << 16);\n\n h = ah7;\n l = al7;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[7];\n l = hl[7];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[7] = ah7 = (c & 0xffff) | (d << 16);\n hl[7] = al7 = (a & 0xffff) | (b << 16);\n\n pos += 128;\n n -= 128;\n }\n\n return n;\n}\n\nfunction crypto_hash(out, m, n) {\n var hh = new Int32Array(8),\n hl = new Int32Array(8),\n x = new Uint8Array(256),\n i, b = n;\n\n hh[0] = 0x6a09e667;\n hh[1] = 0xbb67ae85;\n hh[2] = 0x3c6ef372;\n hh[3] = 0xa54ff53a;\n hh[4] = 0x510e527f;\n hh[5] = 0x9b05688c;\n hh[6] = 0x1f83d9ab;\n hh[7] = 0x5be0cd19;\n\n hl[0] = 0xf3bcc908;\n hl[1] = 0x84caa73b;\n hl[2] = 0xfe94f82b;\n hl[3] = 0x5f1d36f1;\n hl[4] = 0xade682d1;\n hl[5] = 0x2b3e6c1f;\n hl[6] = 0xfb41bd6b;\n hl[7] = 0x137e2179;\n\n crypto_hashblocks_hl(hh, hl, m, n);\n n %= 128;\n\n for (i = 0; i < n; i++) x[i] = m[b-n+i];\n x[n] = 128;\n\n n = 256-128*(n<112?1:0);\n x[n-9] = 0;\n ts64(x, n-8, (b / 0x20000000) | 0, b << 3);\n crypto_hashblocks_hl(hh, hl, x, n);\n\n for (i = 0; i < 8; i++) ts64(out, 8*i, hh[i], hl[i]);\n\n return 0;\n}\n\nfunction add(p, q) {\n var a = gf(), b = gf(), c = gf(),\n d = gf(), e = gf(), f = gf(),\n g = gf(), h = gf(), t = gf();\n\n Z(a, p[1], p[0]);\n Z(t, q[1], q[0]);\n M(a, a, t);\n A(b, p[0], p[1]);\n A(t, q[0], q[1]);\n M(b, b, t);\n M(c, p[3], q[3]);\n M(c, c, D2);\n M(d, p[2], q[2]);\n A(d, d, d);\n Z(e, b, a);\n Z(f, d, c);\n A(g, d, c);\n A(h, b, a);\n\n M(p[0], e, f);\n M(p[1], h, g);\n M(p[2], g, f);\n M(p[3], e, h);\n}\n\nfunction cswap(p, q, b) {\n var i;\n for (i = 0; i < 4; i++) {\n sel25519(p[i], q[i], b);\n }\n}\n\nfunction pack(r, p) {\n var tx = gf(), ty = gf(), zi = gf();\n inv25519(zi, p[2]);\n M(tx, p[0], zi);\n M(ty, p[1], zi);\n pack25519(r, ty);\n r[31] ^= par25519(tx) << 7;\n}\n\nfunction scalarmult(p, q, s) {\n var b, i;\n set25519(p[0], gf0);\n set25519(p[1], gf1);\n set25519(p[2], gf1);\n set25519(p[3], gf0);\n for (i = 255; i >= 0; --i) {\n b = (s[(i/8)|0] >> (i&7)) & 1;\n cswap(p, q, b);\n add(q, p);\n add(p, p);\n cswap(p, q, b);\n }\n}\n\nfunction scalarbase(p, s) {\n var q = [gf(), gf(), gf(), gf()];\n set25519(q[0], X);\n set25519(q[1], Y);\n set25519(q[2], gf1);\n M(q[3], X, Y);\n scalarmult(p, q, s);\n}\n\nfunction crypto_sign_keypair(pk, sk, seeded) {\n var d = new Uint8Array(64);\n var p = [gf(), gf(), gf(), gf()];\n var i;\n\n if (!seeded) randombytes(sk, 32);\n crypto_hash(d, sk, 32);\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n\n scalarbase(p, d);\n pack(pk, p);\n\n for (i = 0; i < 32; i++) sk[i+32] = pk[i];\n return 0;\n}\n\nvar L = new Float64Array([0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10]);\n\nfunction modL(r, x) {\n var carry, i, j, k;\n for (i = 63; i >= 32; --i) {\n carry = 0;\n for (j = i - 32, k = i - 12; j < k; ++j) {\n x[j] += carry - 16 * x[i] * L[j - (i - 32)];\n carry = Math.floor((x[j] + 128) / 256);\n x[j] -= carry * 256;\n }\n x[j] += carry;\n x[i] = 0;\n }\n carry = 0;\n for (j = 0; j < 32; j++) {\n x[j] += carry - (x[31] >> 4) * L[j];\n carry = x[j] >> 8;\n x[j] &= 255;\n }\n for (j = 0; j < 32; j++) x[j] -= carry * L[j];\n for (i = 0; i < 32; i++) {\n x[i+1] += x[i] >> 8;\n r[i] = x[i] & 255;\n }\n}\n\nfunction reduce(r) {\n var x = new Float64Array(64), i;\n for (i = 0; i < 64; i++) x[i] = r[i];\n for (i = 0; i < 64; i++) r[i] = 0;\n modL(r, x);\n}\n\n// Note: difference from C - smlen returned, not passed as argument.\nfunction crypto_sign(sm, m, n, sk) {\n var d = new Uint8Array(64), h = new Uint8Array(64), r = new Uint8Array(64);\n var i, j, x = new Float64Array(64);\n var p = [gf(), gf(), gf(), gf()];\n\n crypto_hash(d, sk, 32);\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n\n var smlen = n + 64;\n for (i = 0; i < n; i++) sm[64 + i] = m[i];\n for (i = 0; i < 32; i++) sm[32 + i] = d[32 + i];\n\n crypto_hash(r, sm.subarray(32), n+32);\n reduce(r);\n scalarbase(p, r);\n pack(sm, p);\n\n for (i = 32; i < 64; i++) sm[i] = sk[i];\n crypto_hash(h, sm, n + 64);\n reduce(h);\n\n for (i = 0; i < 64; i++) x[i] = 0;\n for (i = 0; i < 32; i++) x[i] = r[i];\n for (i = 0; i < 32; i++) {\n for (j = 0; j < 32; j++) {\n x[i+j] += h[i] * d[j];\n }\n }\n\n modL(sm.subarray(32), x);\n return smlen;\n}\n\nfunction unpackneg(r, p) {\n var t = gf(), chk = gf(), num = gf(),\n den = gf(), den2 = gf(), den4 = gf(),\n den6 = gf();\n\n set25519(r[2], gf1);\n unpack25519(r[1], p);\n S(num, r[1]);\n M(den, num, D);\n Z(num, num, r[2]);\n A(den, r[2], den);\n\n S(den2, den);\n S(den4, den2);\n M(den6, den4, den2);\n M(t, den6, num);\n M(t, t, den);\n\n pow2523(t, t);\n M(t, t, num);\n M(t, t, den);\n M(t, t, den);\n M(r[0], t, den);\n\n S(chk, r[0]);\n M(chk, chk, den);\n if (neq25519(chk, num)) M(r[0], r[0], I);\n\n S(chk, r[0]);\n M(chk, chk, den);\n if (neq25519(chk, num)) return -1;\n\n if (par25519(r[0]) === (p[31]>>7)) Z(r[0], gf0, r[0]);\n\n M(r[3], r[0], r[1]);\n return 0;\n}\n\nfunction crypto_sign_open(m, sm, n, pk) {\n var i;\n var t = new Uint8Array(32), h = new Uint8Array(64);\n var p = [gf(), gf(), gf(), gf()],\n q = [gf(), gf(), gf(), gf()];\n\n if (n < 64) return -1;\n\n if (unpackneg(q, pk)) return -1;\n\n for (i = 0; i < n; i++) m[i] = sm[i];\n for (i = 0; i < 32; i++) m[i+32] = pk[i];\n crypto_hash(h, m, n);\n reduce(h);\n scalarmult(p, q, h);\n\n scalarbase(q, sm.subarray(32));\n add(p, q);\n pack(t, p);\n\n n -= 64;\n if (crypto_verify_32(sm, 0, t, 0)) {\n for (i = 0; i < n; i++) m[i] = 0;\n return -1;\n }\n\n for (i = 0; i < n; i++) m[i] = sm[i + 64];\n return n;\n}\n\nvar crypto_secretbox_KEYBYTES = 32,\n crypto_secretbox_NONCEBYTES = 24,\n crypto_secretbox_ZEROBYTES = 32,\n crypto_secretbox_BOXZEROBYTES = 16,\n crypto_scalarmult_BYTES = 32,\n crypto_scalarmult_SCALARBYTES = 32,\n crypto_box_PUBLICKEYBYTES = 32,\n crypto_box_SECRETKEYBYTES = 32,\n crypto_box_BEFORENMBYTES = 32,\n crypto_box_NONCEBYTES = crypto_secretbox_NONCEBYTES,\n crypto_box_ZEROBYTES = crypto_secretbox_ZEROBYTES,\n crypto_box_BOXZEROBYTES = crypto_secretbox_BOXZEROBYTES,\n crypto_sign_BYTES = 64,\n crypto_sign_PUBLICKEYBYTES = 32,\n crypto_sign_SECRETKEYBYTES = 64,\n crypto_sign_SEEDBYTES = 32,\n crypto_hash_BYTES = 64;\n\nnacl.lowlevel = {\n crypto_core_hsalsa20: crypto_core_hsalsa20,\n crypto_stream_xor: crypto_stream_xor,\n crypto_stream: crypto_stream,\n crypto_stream_salsa20_xor: crypto_stream_salsa20_xor,\n crypto_stream_salsa20: crypto_stream_salsa20,\n crypto_onetimeauth: crypto_onetimeauth,\n crypto_onetimeauth_verify: crypto_onetimeauth_verify,\n crypto_verify_16: crypto_verify_16,\n crypto_verify_32: crypto_verify_32,\n crypto_secretbox: crypto_secretbox,\n crypto_secretbox_open: crypto_secretbox_open,\n crypto_scalarmult: crypto_scalarmult,\n crypto_scalarmult_base: crypto_scalarmult_base,\n crypto_box_beforenm: crypto_box_beforenm,\n crypto_box_afternm: crypto_box_afternm,\n crypto_box: crypto_box,\n crypto_box_open: crypto_box_open,\n crypto_box_keypair: crypto_box_keypair,\n crypto_hash: crypto_hash,\n crypto_sign: crypto_sign,\n crypto_sign_keypair: crypto_sign_keypair,\n crypto_sign_open: crypto_sign_open,\n\n crypto_secretbox_KEYBYTES: crypto_secretbox_KEYBYTES,\n crypto_secretbox_NONCEBYTES: crypto_secretbox_NONCEBYTES,\n crypto_secretbox_ZEROBYTES: crypto_secretbox_ZEROBYTES,\n crypto_secretbox_BOXZEROBYTES: crypto_secretbox_BOXZEROBYTES,\n crypto_scalarmult_BYTES: crypto_scalarmult_BYTES,\n crypto_scalarmult_SCALARBYTES: crypto_scalarmult_SCALARBYTES,\n crypto_box_PUBLICKEYBYTES: crypto_box_PUBLICKEYBYTES,\n crypto_box_SECRETKEYBYTES: crypto_box_SECRETKEYBYTES,\n crypto_box_BEFORENMBYTES: crypto_box_BEFORENMBYTES,\n crypto_box_NONCEBYTES: crypto_box_NONCEBYTES,\n crypto_box_ZEROBYTES: crypto_box_ZEROBYTES,\n crypto_box_BOXZEROBYTES: crypto_box_BOXZEROBYTES,\n crypto_sign_BYTES: crypto_sign_BYTES,\n crypto_sign_PUBLICKEYBYTES: crypto_sign_PUBLICKEYBYTES,\n crypto_sign_SECRETKEYBYTES: crypto_sign_SECRETKEYBYTES,\n crypto_sign_SEEDBYTES: crypto_sign_SEEDBYTES,\n crypto_hash_BYTES: crypto_hash_BYTES,\n\n gf: gf,\n D: D,\n L: L,\n pack25519: pack25519,\n unpack25519: unpack25519,\n M: M,\n A: A,\n S: S,\n Z: Z,\n pow2523: pow2523,\n add: add,\n set25519: set25519,\n modL: modL,\n scalarmult: scalarmult,\n scalarbase: scalarbase,\n};\n\n/* High-level API */\n\nfunction checkLengths(k, n) {\n if (k.length !== crypto_secretbox_KEYBYTES) throw new Error('bad key size');\n if (n.length !== crypto_secretbox_NONCEBYTES) throw new Error('bad nonce size');\n}\n\nfunction checkBoxLengths(pk, sk) {\n if (pk.length !== crypto_box_PUBLICKEYBYTES) throw new Error('bad public key size');\n if (sk.length !== crypto_box_SECRETKEYBYTES) throw new Error('bad secret key size');\n}\n\nfunction checkArrayTypes() {\n for (var i = 0; i < arguments.length; i++) {\n if (!(arguments[i] instanceof Uint8Array))\n throw new TypeError('unexpected type, use Uint8Array');\n }\n}\n\nfunction cleanup(arr) {\n for (var i = 0; i < arr.length; i++) arr[i] = 0;\n}\n\nnacl.randomBytes = function(n) {\n var b = new Uint8Array(n);\n randombytes(b, n);\n return b;\n};\n\nnacl.secretbox = function(msg, nonce, key) {\n checkArrayTypes(msg, nonce, key);\n checkLengths(key, nonce);\n var m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.length);\n var c = new Uint8Array(m.length);\n for (var i = 0; i < msg.length; i++) m[i+crypto_secretbox_ZEROBYTES] = msg[i];\n crypto_secretbox(c, m, m.length, nonce, key);\n return c.subarray(crypto_secretbox_BOXZEROBYTES);\n};\n\nnacl.secretbox.open = function(box, nonce, key) {\n checkArrayTypes(box, nonce, key);\n checkLengths(key, nonce);\n var c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.length);\n var m = new Uint8Array(c.length);\n for (var i = 0; i < box.length; i++) c[i+crypto_secretbox_BOXZEROBYTES] = box[i];\n if (c.length < 32) return null;\n if (crypto_secretbox_open(m, c, c.length, nonce, key) !== 0) return null;\n return m.subarray(crypto_secretbox_ZEROBYTES);\n};\n\nnacl.secretbox.keyLength = crypto_secretbox_KEYBYTES;\nnacl.secretbox.nonceLength = crypto_secretbox_NONCEBYTES;\nnacl.secretbox.overheadLength = crypto_secretbox_BOXZEROBYTES;\n\nnacl.scalarMult = function(n, p) {\n checkArrayTypes(n, p);\n if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');\n if (p.length !== crypto_scalarmult_BYTES) throw new Error('bad p size');\n var q = new Uint8Array(crypto_scalarmult_BYTES);\n crypto_scalarmult(q, n, p);\n return q;\n};\n\nnacl.scalarMult.base = function(n) {\n checkArrayTypes(n);\n if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');\n var q = new Uint8Array(crypto_scalarmult_BYTES);\n crypto_scalarmult_base(q, n);\n return q;\n};\n\nnacl.scalarMult.scalarLength = crypto_scalarmult_SCALARBYTES;\nnacl.scalarMult.groupElementLength = crypto_scalarmult_BYTES;\n\nnacl.box = function(msg, nonce, publicKey, secretKey) {\n var k = nacl.box.before(publicKey, secretKey);\n return nacl.secretbox(msg, nonce, k);\n};\n\nnacl.box.before = function(publicKey, secretKey) {\n checkArrayTypes(publicKey, secretKey);\n checkBoxLengths(publicKey, secretKey);\n var k = new Uint8Array(crypto_box_BEFORENMBYTES);\n crypto_box_beforenm(k, publicKey, secretKey);\n return k;\n};\n\nnacl.box.after = nacl.secretbox;\n\nnacl.box.open = function(msg, nonce, publicKey, secretKey) {\n var k = nacl.box.before(publicKey, secretKey);\n return nacl.secretbox.open(msg, nonce, k);\n};\n\nnacl.box.open.after = nacl.secretbox.open;\n\nnacl.box.keyPair = function() {\n var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_box_SECRETKEYBYTES);\n crypto_box_keypair(pk, sk);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.box.keyPair.fromSecretKey = function(secretKey) {\n checkArrayTypes(secretKey);\n if (secretKey.length !== crypto_box_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);\n crypto_scalarmult_base(pk, secretKey);\n return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\n};\n\nnacl.box.publicKeyLength = crypto_box_PUBLICKEYBYTES;\nnacl.box.secretKeyLength = crypto_box_SECRETKEYBYTES;\nnacl.box.sharedKeyLength = crypto_box_BEFORENMBYTES;\nnacl.box.nonceLength = crypto_box_NONCEBYTES;\nnacl.box.overheadLength = nacl.secretbox.overheadLength;\n\nnacl.sign = function(msg, secretKey) {\n checkArrayTypes(msg, secretKey);\n if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var signedMsg = new Uint8Array(crypto_sign_BYTES+msg.length);\n crypto_sign(signedMsg, msg, msg.length, secretKey);\n return signedMsg;\n};\n\nnacl.sign.open = function(signedMsg, publicKey) {\n checkArrayTypes(signedMsg, publicKey);\n if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n throw new Error('bad public key size');\n var tmp = new Uint8Array(signedMsg.length);\n var mlen = crypto_sign_open(tmp, signedMsg, signedMsg.length, publicKey);\n if (mlen < 0) return null;\n var m = new Uint8Array(mlen);\n for (var i = 0; i < m.length; i++) m[i] = tmp[i];\n return m;\n};\n\nnacl.sign.detached = function(msg, secretKey) {\n var signedMsg = nacl.sign(msg, secretKey);\n var sig = new Uint8Array(crypto_sign_BYTES);\n for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i];\n return sig;\n};\n\nnacl.sign.detached.verify = function(msg, sig, publicKey) {\n checkArrayTypes(msg, sig, publicKey);\n if (sig.length !== crypto_sign_BYTES)\n throw new Error('bad signature size');\n if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n throw new Error('bad public key size');\n var sm = new Uint8Array(crypto_sign_BYTES + msg.length);\n var m = new Uint8Array(crypto_sign_BYTES + msg.length);\n var i;\n for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i];\n for (i = 0; i < msg.length; i++) sm[i+crypto_sign_BYTES] = msg[i];\n return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0);\n};\n\nnacl.sign.keyPair = function() {\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\n crypto_sign_keypair(pk, sk);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.sign.keyPair.fromSecretKey = function(secretKey) {\n checkArrayTypes(secretKey);\n if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n for (var i = 0; i < pk.length; i++) pk[i] = secretKey[32+i];\n return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\n};\n\nnacl.sign.keyPair.fromSeed = function(seed) {\n checkArrayTypes(seed);\n if (seed.length !== crypto_sign_SEEDBYTES)\n throw new Error('bad seed size');\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\n for (var i = 0; i < 32; i++) sk[i] = seed[i];\n crypto_sign_keypair(pk, sk, true);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.sign.publicKeyLength = crypto_sign_PUBLICKEYBYTES;\nnacl.sign.secretKeyLength = crypto_sign_SECRETKEYBYTES;\nnacl.sign.seedLength = crypto_sign_SEEDBYTES;\nnacl.sign.signatureLength = crypto_sign_BYTES;\n\nnacl.hash = function(msg) {\n checkArrayTypes(msg);\n var h = new Uint8Array(crypto_hash_BYTES);\n crypto_hash(h, msg, msg.length);\n return h;\n};\n\nnacl.hash.hashLength = crypto_hash_BYTES;\n\nnacl.verify = function(x, y) {\n checkArrayTypes(x, y);\n // Zero length arguments are considered not equal.\n if (x.length === 0 || y.length === 0) return false;\n if (x.length !== y.length) return false;\n return (vn(x, 0, y, 0, x.length) === 0) ? true : false;\n};\n\nnacl.setPRNG = function(fn) {\n randombytes = fn;\n};\n\n(function() {\n // Initialize PRNG if environment provides CSPRNG.\n // If not, methods calling randombytes will throw.\n var crypto = typeof self !== 'undefined' ? (self.crypto || self.msCrypto) : null;\n if (crypto && crypto.getRandomValues) {\n // Browsers.\n var QUOTA = 65536;\n nacl.setPRNG(function(x, n) {\n var i, v = new Uint8Array(n);\n for (i = 0; i < n; i += QUOTA) {\n crypto.getRandomValues(v.subarray(i, i + Math.min(n - i, QUOTA)));\n }\n for (i = 0; i < n; i++) x[i] = v[i];\n cleanup(v);\n });\n } else if (typeof require !== 'undefined') {\n // Node.js.\n crypto = require('crypto');\n if (crypto && crypto.randomBytes) {\n nacl.setPRNG(function(x, n) {\n var i, v = crypto.randomBytes(n);\n for (i = 0; i < n; i++) x[i] = v[i];\n cleanup(v);\n });\n }\n }\n})();\n\n})(typeof module !== 'undefined' && module.exports ? module.exports : (self.nacl = self.nacl || {}));\n", "// Written in 2014-2016 by Dmitry Chestnykh and Devi Mandiri.\n// Public domain.\n(function(root, f) {\n 'use strict';\n if (typeof module !== 'undefined' && module.exports) module.exports = f();\n else if (root.nacl) root.nacl.util = f();\n else {\n root.nacl = {};\n root.nacl.util = f();\n }\n}(this, function() {\n 'use strict';\n\n var util = {};\n\n function validateBase64(s) {\n if (!(/^(?:[A-Za-z0-9+\\/]{2}[A-Za-z0-9+\\/]{2})*(?:[A-Za-z0-9+\\/]{2}==|[A-Za-z0-9+\\/]{3}=)?$/.test(s))) {\n throw new TypeError('invalid encoding');\n }\n }\n\n util.decodeUTF8 = function(s) {\n if (typeof s !== 'string') throw new TypeError('expected string');\n var i, d = unescape(encodeURIComponent(s)), b = new Uint8Array(d.length);\n for (i = 0; i < d.length; i++) b[i] = d.charCodeAt(i);\n return b;\n };\n\n util.encodeUTF8 = function(arr) {\n var i, s = [];\n for (i = 0; i < arr.length; i++) s.push(String.fromCharCode(arr[i]));\n return decodeURIComponent(escape(s.join('')));\n };\n\n if (typeof atob === 'undefined') {\n // Node.js\n\n if (typeof Buffer.from !== 'undefined') {\n // Node v6 and later\n util.encodeBase64 = function (arr) { // v6 and later\n return Buffer.from(arr).toString('base64');\n };\n\n util.decodeBase64 = function (s) {\n validateBase64(s);\n return new Uint8Array(Array.prototype.slice.call(Buffer.from(s, 'base64'), 0));\n };\n\n } else {\n // Node earlier than v6\n util.encodeBase64 = function (arr) { // v6 and later\n return (new Buffer(arr)).toString('base64');\n };\n\n util.decodeBase64 = function(s) {\n validateBase64(s);\n return new Uint8Array(Array.prototype.slice.call(new Buffer(s, 'base64'), 0));\n };\n }\n\n } else {\n // Browsers\n\n util.encodeBase64 = function(arr) {\n var i, s = [], len = arr.length;\n for (i = 0; i < len; i++) s.push(String.fromCharCode(arr[i]));\n return btoa(s.join(''));\n };\n\n util.decodeBase64 = function(s) {\n validateBase64(s);\n var i, d = atob(s), b = new Uint8Array(d.length);\n for (i = 0; i < d.length; i++) b[i] = d.charCodeAt(i);\n return b;\n };\n\n }\n\n return util;\n\n}));\n", "/*\n * Sloth permutation adaptation based on:\n * https://github.com/hyperhyperspace/pulsar/blob/main/src/model/SlothVDF.ts\n */\nclass SlothPermutation {\n static p = BigInt(\n '170082004324204494273811327264862981553264701145937538369570764779791492622392118654022654452947093285873855529044371650895045691292912712699015605832276411308653107069798639938826015099738961427172366594187783204437869906954750443653318078358839409699824714551430573905637228307966826784684174483831608534979'\n );\n\n fastPow(base, exponent, modulus) {\n if (modulus === BigInt(1)) {\n return BigInt(0);\n }\n\n let result = BigInt(1);\n let powBase = base % modulus;\n let powExponent = exponent;\n\n while (powExponent > 0) {\n if (powExponent % BigInt(2) === BigInt(1)) {\n result = (result * powBase) % modulus;\n }\n\n powExponent = powExponent / BigInt(2);\n powBase = (powBase * powBase) % modulus;\n }\n\n return result;\n }\n\n quadRes(x) {\n return this.fastPow(x, (SlothPermutation.p - BigInt(1)) / BigInt(2), SlothPermutation.p) === BigInt(1);\n }\n\n modSqrtOp(x) {\n let y;\n let value = x;\n\n if (this.quadRes(value)) {\n y = this.fastPow(value, (SlothPermutation.p + BigInt(1)) / BigInt(4), SlothPermutation.p);\n } else {\n value = (-value + SlothPermutation.p) % SlothPermutation.p;\n y = this.fastPow(value, (SlothPermutation.p + BigInt(1)) / BigInt(4), SlothPermutation.p);\n }\n\n return y;\n }\n\n modOp(x, t) {\n let value = x % SlothPermutation.p;\n\n for (let i = BigInt(0); i < t; i += BigInt(1)) {\n value = this.modSqrtOp(value);\n }\n\n return value;\n }\n\n modVerif(y, x, t) {\n const input = x % SlothPermutation.p;\n let value = y;\n\n for (let i = BigInt(0); i < t; i += BigInt(1)) {\n value = (value ** BigInt(2)) % SlothPermutation.p;\n }\n\n if (!this.quadRes(value)) {\n value = (-value + SlothPermutation.p) % SlothPermutation.p;\n }\n\n return input === value || ((-input + SlothPermutation.p) % SlothPermutation.p) === value;\n }\n\n generateProofVDF(t, x) {\n return this.modOp(x, t);\n }\n\n verifyProofVDF(t, x, y) {\n return this.modVerif(y, x, t);\n }\n}\n\nmodule.exports = SlothPermutation;\n", "/*\n * VDF wrapper adaptation based on:\n * https://github.com/hyperhyperspace/pulsar/blob/main/src/model/VDF.ts\n */\nconst SlothPermutation = require('./sloth-vdf');\n\nclass VDF {\n static async compute(challengeHex, steps) {\n const vdfInstance = new SlothPermutation();\n const challengeBigInt = BigInt(`0x${challengeHex}`);\n const result = vdfInstance.generateProofVDF(steps, challengeBigInt);\n return result.toString(16);\n }\n\n static async verify(challengeHex, steps, resultHex) {\n const vdfInstance = new SlothPermutation();\n const challengeBigInt = BigInt(`0x${challengeHex}`);\n const resultBigInt = BigInt(`0x${resultHex}`);\n return vdfInstance.verifyProofVDF(steps, challengeBigInt, resultBigInt);\n }\n}\n\nmodule.exports = VDF;\n", "const nacl = require('tweetnacl');\nconst naclUtil = require('tweetnacl-util');\nconst VDF = require('./vdf');\n\nconst DEFAULT_SECURITY_OPTIONS = {\n enabled: true,\n signingEnabled: true,\n encryptionEnabled: true,\n powEnabled: true,\n powTargetMs: 1000,\n appPassword: 'change-this-app-password',\n broadcastPasswords: {},\n resolveBroadcastPassword: null,\n powSteps: 22,\n trustedPeerKeys: {},\n kdfIterations: 100000\n};\n\nfunction stableStringify(value) {\n if (value === null || typeof value !== 'object') {\n return JSON.stringify(value);\n }\n\n if (Array.isArray(value)) {\n return `[${value.map((entry) => stableStringify(entry)).join(',')}]`;\n }\n\n const keys = Object.keys(value).sort();\n return `{${keys.map((key) => `${JSON.stringify(key)}:${stableStringify(value[key])}`).join(',')}}`;\n}\n\nfunction concatBytes(a, b) {\n const result = new Uint8Array(a.length + b.length);\n result.set(a, 0);\n result.set(b, a.length);\n return result;\n}\n\nfunction hash32(bytes) {\n return nacl.hash(bytes).slice(0, 32);\n}\n\nfunction bytesToHex(bytes) {\n return Array.from(bytes, (byte) => byte.toString(16).padStart(2, '0')).join('');\n}\n\nfunction utf8ToBytes(value) {\n return naclUtil.decodeUTF8(value);\n}\n\nasync function deriveBroadcastKey(password, salt, iterations) {\n const subtle = globalThis.crypto && globalThis.crypto.subtle;\n\n if (subtle) {\n const keyMaterial = await subtle.importKey(\n 'raw',\n utf8ToBytes(password),\n 'PBKDF2',\n false,\n ['deriveBits']\n );\n const bits = await subtle.deriveBits(\n { name: 'PBKDF2', salt, iterations, hash: 'SHA-256' },\n keyMaterial,\n 256\n );\n return new Uint8Array(bits);\n }\n\n try {\n const { pbkdf2Sync } = require('crypto');\n return new Uint8Array(pbkdf2Sync(password, Buffer.from(salt), iterations, 32, 'sha256'));\n } catch (_ignored) {\n return hash32(concatBytes(utf8ToBytes(password), salt));\n }\n}\n\nfunction legacyBroadcastKey(password, salt) {\n return hash32(concatBytes(utf8ToBytes(password), salt));\n}\n\nfunction normalizePeerPublicKey(publicKey) {\n if (!publicKey || typeof publicKey !== 'object') {\n throw new Error('Public key must be an object with signingPublicKey and encryptionPublicKey');\n }\n\n if (!publicKey.signingPublicKey || !publicKey.encryptionPublicKey) {\n throw new Error('Public key object is missing signingPublicKey or encryptionPublicKey');\n }\n\n return {\n signingPublicKey: publicKey.signingPublicKey,\n encryptionPublicKey: publicKey.encryptionPublicKey\n };\n}\n\nclass MessageSecurityService {\n constructor({ nodeId, options = {}, now } = {}) {\n if (!nodeId) {\n throw new Error('MessageSecurityService requires nodeId');\n }\n\n this.nodeId = nodeId;\n this.options = {\n ...DEFAULT_SECURITY_OPTIONS,\n ...options\n };\n this.now = now || (() => Date.now());\n\n const keyPair = options.keyPair || {\n signing: nacl.sign.keyPair(),\n encryption: nacl.box.keyPair()\n };\n\n this.signingSecretKey = keyPair.signing.secretKey;\n this.signingPublicKey = keyPair.signing.publicKey;\n this.encryptionSecretKey = keyPair.encryption.secretKey;\n this.encryptionPublicKey = keyPair.encryption.publicKey;\n\n this.publicKeyBundle = {\n signingPublicKey: naclUtil.encodeBase64(this.signingPublicKey),\n encryptionPublicKey: naclUtil.encodeBase64(this.encryptionPublicKey)\n };\n\n this.peerPublicKeys = new Map();\n for (const [peerId, peerKey] of Object.entries(this.options.trustedPeerKeys || {})) {\n this.peerPublicKeys.set(peerId, normalizePeerPublicKey(peerKey));\n }\n\n this.calibratedPowSteps = this.options.powSteps;\n }\n\n getPublicKey() {\n return { ...this.publicKeyBundle };\n }\n\n registerPeerPublicKey(peerId, publicKey) {\n this.peerPublicKeys.set(peerId, normalizePeerPublicKey(publicKey));\n }\n\n resolvePeerPublicKey(peerId, fallbackPublicKey) {\n const trusted = this.peerPublicKeys.get(peerId);\n const fallback = fallbackPublicKey ? normalizePeerPublicKey(fallbackPublicKey) : null;\n\n if (trusted && fallback) {\n const mismatch =\n trusted.signingPublicKey !== fallback.signingPublicKey ||\n trusted.encryptionPublicKey !== fallback.encryptionPublicKey;\n\n if (mismatch) {\n throw new Error(`Public key mismatch for peer ${peerId}`);\n }\n }\n\n return trusted || fallback || null;\n }\n\n buildEnvelopeBase({ messageType, payload, targetId = null }) {\n return {\n version: 1,\n senderId: this.nodeId,\n senderPublicKey: this.getPublicKey(),\n targetId,\n messageType,\n timestamp: this.now(),\n payload\n };\n }\n\n async secureOutgoingMessage({ messageType, payload, targetId = null, securityContext = {} }) {\n if (!this.options.enabled) {\n return this.buildEnvelopeBase({ messageType, payload, targetId });\n }\n\n const envelope = this.buildEnvelopeBase({ messageType, payload, targetId });\n const encryptionInfo = await this.encryptPayload({ payload, targetId, securityContext });\n envelope.payload = encryptionInfo.payload;\n envelope.security = {\n encryption: encryptionInfo.security,\n signing: { enabled: false },\n pow: { enabled: false }\n };\n\n if (this.options.powEnabled) {\n const pow = await this.generatePow(envelope);\n envelope.security.pow = {\n enabled: true,\n messageHash: pow.messageHash,\n challenge: pow.challenge,\n proof: pow.proof,\n steps: pow.steps,\n durationMs: pow.durationMs\n };\n }\n\n if (this.options.signingEnabled) {\n const signatureBase = this.canonicalSigningInput(envelope);\n const signature = nacl.sign.detached(\n naclUtil.decodeUTF8(signatureBase),\n this.signingSecretKey\n );\n\n envelope.security.signing = {\n enabled: true,\n algorithm: 'ed25519',\n signature: naclUtil.encodeBase64(signature)\n };\n }\n\n return envelope;\n }\n\n canonicalSigningInput(envelope) {\n return stableStringify({\n version: envelope.version,\n senderId: envelope.senderId,\n senderPublicKey: envelope.senderPublicKey,\n targetId: envelope.targetId,\n messageType: envelope.messageType,\n timestamp: envelope.timestamp,\n payload: envelope.payload,\n security: {\n encryption: envelope.security ? envelope.security.encryption : { enabled: false },\n pow: envelope.security ? envelope.security.pow : { enabled: false }\n }\n });\n }\n\n canonicalPowInput(envelope) {\n return stableStringify({\n version: envelope.version,\n senderId: envelope.senderId,\n senderPublicKey: envelope.senderPublicKey,\n targetId: envelope.targetId,\n messageType: envelope.messageType,\n timestamp: envelope.timestamp,\n payload: envelope.payload,\n security: {\n encryption: envelope.security ? envelope.security.encryption : { enabled: false }\n }\n });\n }\n\n computePowMessageHash(envelope) {\n return bytesToHex(hash32(utf8ToBytes(this.canonicalPowInput(envelope))));\n }\n\n async decryptIncomingMessage(envelope) {\n if (!this.options.enabled) {\n return {\n ignored: false,\n messageType: envelope.messageType,\n senderId: envelope.senderId,\n targetId: envelope.targetId,\n payload: envelope.payload\n };\n }\n\n if (!envelope || typeof envelope !== 'object') {\n throw new Error('Incoming message is invalid');\n }\n\n if (envelope.targetId && envelope.targetId !== this.nodeId) {\n return { ignored: true };\n }\n\n if (envelope.security && envelope.security.pow && envelope.security.pow.enabled && this.options.powEnabled) {\n await this.verifyPow(envelope);\n }\n\n if (envelope.security && envelope.security.signing && envelope.security.signing.enabled && this.options.signingEnabled) {\n this.verifySignature(envelope);\n }\n\n const payload = await this.decryptPayload(envelope);\n\n return {\n ignored: false,\n messageType: envelope.messageType,\n senderId: envelope.senderId,\n targetId: envelope.targetId,\n payload\n };\n }\n\n resolveBroadcastPassword(scope) {\n const normalizedScope = scope || 'default';\n\n if (typeof this.options.resolveBroadcastPassword === 'function') {\n const resolved = this.options.resolveBroadcastPassword({\n scope: normalizedScope,\n nodeId: this.nodeId,\n defaultPassword: this.options.appPassword,\n broadcastPasswords: this.options.broadcastPasswords || {}\n });\n\n if (typeof resolved === 'string' && resolved.length > 0) {\n return resolved;\n }\n }\n\n const scopePassword = this.options.broadcastPasswords\n ? this.options.broadcastPasswords[normalizedScope]\n : null;\n\n if (typeof scopePassword === 'string' && scopePassword.length > 0) {\n return scopePassword;\n }\n\n return this.options.appPassword;\n }\n\n async encryptPayload({ payload, targetId, securityContext = {} }) {\n if (!this.options.encryptionEnabled) {\n return {\n payload,\n security: {\n enabled: false,\n mode: 'none'\n }\n };\n }\n\n const plainText = naclUtil.decodeUTF8(JSON.stringify(payload));\n\n if (targetId) {\n const recipientPublicKey = this.resolvePeerPublicKey(targetId, null);\n if (!recipientPublicKey) {\n throw new Error(`Missing public key for target peer ${targetId}`);\n }\n\n const nonce = nacl.randomBytes(nacl.box.nonceLength);\n const encrypted = nacl.box(\n plainText,\n nonce,\n naclUtil.decodeBase64(recipientPublicKey.encryptionPublicKey),\n this.encryptionSecretKey\n );\n\n return {\n payload: naclUtil.encodeBase64(encrypted),\n security: {\n enabled: true,\n mode: 'direct',\n nonce: naclUtil.encodeBase64(nonce),\n senderEncryptionPublicKey: this.publicKeyBundle.encryptionPublicKey\n }\n };\n }\n\n const scope = securityContext.broadcastScope || 'default';\n const nonce = nacl.randomBytes(nacl.secretbox.nonceLength);\n const salt = nacl.randomBytes(16);\n const password = this.resolveBroadcastPassword(scope);\n const iterations = this.options.kdfIterations || DEFAULT_SECURITY_OPTIONS.kdfIterations;\n const key = await deriveBroadcastKey(password, salt, iterations);\n const encrypted = nacl.secretbox(plainText, nonce, key);\n\n return {\n payload: naclUtil.encodeBase64(encrypted),\n security: {\n enabled: true,\n mode: 'broadcast',\n scope,\n nonce: naclUtil.encodeBase64(nonce),\n salt: naclUtil.encodeBase64(salt),\n kdf: 'pbkdf2',\n kdfIterations: iterations\n }\n };\n }\n\n async decryptPayload(envelope) {\n const encryption = envelope.security ? envelope.security.encryption : null;\n\n if (!encryption || !encryption.enabled || !this.options.encryptionEnabled) {\n return envelope.payload;\n }\n\n const encryptedBuffer = naclUtil.decodeBase64(envelope.payload);\n\n if (encryption.mode === 'broadcast') {\n const scope = encryption.scope || 'default';\n const password = this.resolveBroadcastPassword(scope);\n const salt = naclUtil.decodeBase64(encryption.salt);\n const nonce = naclUtil.decodeBase64(encryption.nonce);\n\n let key;\n if (encryption.kdf === 'pbkdf2') {\n const iterations = encryption.kdfIterations || DEFAULT_SECURITY_OPTIONS.kdfIterations;\n key = await deriveBroadcastKey(password, salt, iterations);\n } else {\n key = legacyBroadcastKey(password, salt);\n }\n\n const decrypted = nacl.secretbox.open(encryptedBuffer, nonce, key);\n\n if (!decrypted) {\n throw new Error('Unable to decrypt broadcast payload');\n }\n\n return JSON.parse(naclUtil.encodeUTF8(decrypted));\n }\n\n if (encryption.mode === 'direct') {\n const senderPublicKey = naclUtil.decodeBase64(encryption.senderEncryptionPublicKey);\n const nonce = naclUtil.decodeBase64(encryption.nonce);\n const decrypted = nacl.box.open(\n encryptedBuffer,\n nonce,\n senderPublicKey,\n this.encryptionSecretKey\n );\n\n if (!decrypted) {\n throw new Error('Unable to decrypt direct payload');\n }\n\n return JSON.parse(naclUtil.encodeUTF8(decrypted));\n }\n\n throw new Error(`Unsupported encryption mode: ${encryption.mode}`);\n }\n\n verifySignature(envelope) {\n const senderPublicKey = this.resolvePeerPublicKey(envelope.senderId, envelope.senderPublicKey);\n if (!senderPublicKey) {\n throw new Error(`Missing public key for sender ${envelope.senderId}`);\n }\n\n const signatureBase = this.canonicalSigningInput(envelope);\n const isValid = nacl.sign.detached.verify(\n naclUtil.decodeUTF8(signatureBase),\n naclUtil.decodeBase64(envelope.security.signing.signature),\n naclUtil.decodeBase64(senderPublicKey.signingPublicKey)\n );\n\n if (!isValid) {\n const error = new Error(`Invalid signature for sender ${envelope.senderId}`);\n error.code = 'INVALID_SIGNATURE';\n throw error;\n }\n\n return true;\n }\n\n async determinePowSteps() {\n if (typeof this.calibratedPowSteps === 'bigint') {\n return this.calibratedPowSteps;\n }\n\n if (typeof this.options.powSteps === 'number') {\n this.calibratedPowSteps = BigInt(Math.max(1, this.options.powSteps));\n return this.calibratedPowSteps;\n }\n\n const targetMs = Math.max(1, Number(this.options.powTargetMs || 1));\n const probeChallenge = bytesToHex(hash32(utf8ToBytes(`probe:${this.nodeId}:${this.now()}`)));\n const probeSteps = BigInt(2);\n\n const start = this.now();\n await VDF.compute(probeChallenge, probeSteps);\n const elapsedMs = Math.max(1, this.now() - start);\n\n const scaled = Math.max(1, Math.round((targetMs / elapsedMs) * Number(probeSteps)));\n this.calibratedPowSteps = BigInt(scaled);\n return this.calibratedPowSteps;\n }\n\n async generatePow(envelope) {\n const messageHash = this.computePowMessageHash(envelope);\n const challenge = messageHash;\n const steps = await this.determinePowSteps();\n const start = this.now();\n const proof = await VDF.compute(challenge, steps);\n const durationMs = this.now() - start;\n\n return {\n messageHash,\n challenge,\n proof,\n steps: steps.toString(),\n durationMs\n };\n }\n\n async verifyPow(envelope) {\n const expectedMessageHash = this.computePowMessageHash(envelope);\n const pow = envelope.security.pow;\n\n if (\n !pow ||\n !pow.messageHash ||\n pow.messageHash !== expectedMessageHash ||\n pow.challenge !== pow.messageHash\n ) {\n const error = new Error('PoW challenge mismatch');\n error.code = 'INVALID_POW';\n throw error;\n }\n\n const verified = await VDF.verify(pow.messageHash, BigInt(pow.steps), pow.proof);\n if (!verified) {\n const error = new Error('PoW verification failed');\n error.code = 'INVALID_POW';\n throw error;\n }\n\n return true;\n }\n}\n\nmodule.exports = {\n MessageSecurityService,\n stableStringify,\n deriveBroadcastKey,\n legacyBroadcastKey,\n DEFAULT_SECURITY_OPTIONS\n};\n", "const EventEmitter = require('../utils/event-emitter');\nconst { MessageSecurityService } = require('../security/message-security-service');\n\n/**\n * Core node API for replicated object collections.\n *\n * Interface shape is intentionally REST-like:\n * - create(collection, data)\n * - read(collection, id)\n * - list(collection)\n * - update(collection, id, patch)\n * - remove(collection, id)\n *\n * Authorization model:\n * - object creator is the owner\n * - only owner can update or delete\n */\nclass DignityP2P extends EventEmitter {\n constructor({ nodeId, networkAdapter, idGenerator, now, security } = {}) {\n super();\n\n if (!nodeId) {\n throw new Error('DignityP2P requires nodeId');\n }\n\n if (!networkAdapter) {\n throw new Error('DignityP2P requires networkAdapter');\n }\n\n this.nodeId = nodeId;\n this.networkAdapter = networkAdapter;\n this.idGenerator = idGenerator || (() => `${Date.now()}-${Math.random().toString(16).slice(2)}`);\n this.now = now || (() => Date.now());\n this.securityService = new MessageSecurityService({\n nodeId: this.nodeId,\n options: security || {},\n now: this.now\n });\n this.bannedPeers = new Map();\n this.peerBanDurationMs = security && typeof security.banDurationMs === 'number'\n ? security.banDurationMs\n : 48 * 60 * 60 * 1000;\n this.resolveBroadcastScope = security && typeof security.resolveBroadcastScope === 'function'\n ? security.resolveBroadcastScope\n : (() => 'default');\n this.defaultDiscoveryHeartbeatMs = security && typeof security.discoveryHeartbeatMs === 'number'\n ? security.discoveryHeartbeatMs\n : 15000;\n this.defaultPresenceTtlMs = security && typeof security.presenceTtlMs === 'number'\n ? security.presenceTtlMs\n : 45000;\n this.discoveryRooms = new Map(); // scope -> { metadata, heartbeatIntervalMs, ttlMs, timer }\n this.presenceByScope = new Map(); // scope -> Map(peerId -> presence)\n\n this.state = new Map(); // collection -> Map(id -> record)\n this.appliedOperations = new Set();\n this.boundMessageHandler = this.handleIncomingMessage.bind(this);\n }\n\n async start() {\n this.networkAdapter.onMessage(this.boundMessageHandler);\n await this.networkAdapter.start(this.nodeId);\n }\n\n async stop() {\n const joinedScopes = Array.from(this.discoveryRooms.keys());\n for (const scope of joinedScopes) {\n // Best effort leave announce; do not fail node shutdown if network is interrupted.\n try {\n await this.leaveDiscovery(scope);\n } catch (error) {\n this.emit('warning', { type: 'presence-leave-failed', scope, error });\n }\n }\n\n this.networkAdapter.offMessage(this.boundMessageHandler);\n await this.networkAdapter.stop();\n }\n\n getCollection(collectionName) {\n if (!collectionName) {\n throw new Error('collectionName is required');\n }\n\n if (!this.state.has(collectionName)) {\n this.state.set(collectionName, new Map());\n }\n\n return this.state.get(collectionName);\n }\n\n normalizeRecord(record) {\n if (!record || record.deletedAt) {\n return null;\n }\n\n return {\n id: record.id,\n ownerId: record.ownerId,\n createdAt: record.createdAt,\n updatedAt: record.updatedAt,\n version: record.version,\n data: { ...record.data }\n };\n }\n\n async create(collectionName, data, options = {}) {\n const collection = this.getCollection(collectionName);\n const id = options.id || this.idGenerator();\n\n if (collection.has(id) && !collection.get(id).deletedAt) {\n throw new Error(`Object ${id} already exists in ${collectionName}`);\n }\n\n const timestamp = this.now();\n const operation = {\n opId: this.idGenerator(),\n kind: 'create',\n collectionName,\n id,\n actorId: this.nodeId,\n ownerId: this.nodeId,\n timestamp,\n payload: { ...data }\n };\n\n this.applyOperation(operation);\n await this.broadcastMessage('operation', operation, {\n broadcastScope: options.broadcastScope || this.resolveBroadcastScope({\n messageType: 'operation',\n operation,\n collectionName\n })\n });\n\n return this.read(collectionName, id);\n }\n\n read(collectionName, id) {\n const collection = this.getCollection(collectionName);\n return this.normalizeRecord(collection.get(id));\n }\n\n list(collectionName, options = {}) {\n const collection = this.getCollection(collectionName);\n const includeDeleted = options.includeDeleted || false;\n\n const records = [];\n for (const record of collection.values()) {\n if (record.deletedAt && !includeDeleted) {\n continue;\n }\n\n if (record.deletedAt && includeDeleted) {\n records.push({\n id: record.id,\n ownerId: record.ownerId,\n deletedAt: record.deletedAt,\n version: record.version\n });\n continue;\n }\n\n records.push(this.normalizeRecord(record));\n }\n\n return records;\n }\n\n async update(collectionName, id, partialData, options = {}) {\n const existing = this.getCollection(collectionName).get(id);\n\n if (!existing || existing.deletedAt) {\n throw new Error(`Object ${id} does not exist in ${collectionName}`);\n }\n\n if (existing.ownerId !== this.nodeId) {\n throw new Error(`Only owner ${existing.ownerId} can update object ${id}`);\n }\n\n if (typeof options.expectedVersion === 'number' && existing.version !== options.expectedVersion) {\n this.emitConflict({\n kind: 'update',\n collection: collectionName,\n id,\n expectedVersion: options.expectedVersion,\n currentVersion: existing.version,\n phase: 'local'\n });\n\n const error = new Error(\n `Version conflict on ${collectionName}/${id}: expected ${options.expectedVersion}, current ${existing.version}`\n );\n error.code = 'VERSION_CONFLICT';\n throw error;\n }\n\n const operation = {\n opId: this.idGenerator(),\n kind: 'update',\n collectionName,\n id,\n actorId: this.nodeId,\n timestamp: this.now(),\n baseVersion: existing.version,\n payload: { ...partialData }\n };\n\n this.applyOperation(operation);\n await this.broadcastMessage('operation', operation, {\n broadcastScope: options.broadcastScope || this.resolveBroadcastScope({\n messageType: 'operation',\n operation,\n collectionName\n })\n });\n\n return this.read(collectionName, id);\n }\n\n async updateWithRetry(collectionName, id, patchFn, options = {}) {\n const maxAttempts = typeof options.maxAttempts === 'number' ? options.maxAttempts : 5;\n\n for (let attempt = 0; attempt < maxAttempts; attempt += 1) {\n const current = this.read(collectionName, id);\n if (!current) {\n throw new Error(`Object ${id} does not exist in ${collectionName}`);\n }\n\n const patch = await patchFn(current);\n try {\n return await this.update(collectionName, id, patch, {\n ...options,\n expectedVersion: current.version\n });\n } catch (error) {\n if (error.code !== 'VERSION_CONFLICT' || attempt === maxAttempts - 1) {\n throw error;\n }\n }\n }\n\n throw new Error(`Unable to update ${collectionName}/${id} after ${maxAttempts} attempts`);\n }\n\n async remove(collectionName, id, options = {}) {\n const existing = this.getCollection(collectionName).get(id);\n\n if (!existing || existing.deletedAt) {\n throw new Error(`Object ${id} does not exist in ${collectionName}`);\n }\n\n if (existing.ownerId !== this.nodeId) {\n throw new Error(`Only owner ${existing.ownerId} can delete object ${id}`);\n }\n\n const operation = {\n opId: this.idGenerator(),\n kind: 'delete',\n collectionName,\n id,\n actorId: this.nodeId,\n timestamp: this.now(),\n baseVersion: existing.version\n };\n\n this.applyOperation(operation);\n await this.broadcastMessage('operation', operation, {\n broadcastScope: options.broadcastScope || this.resolveBroadcastScope({\n messageType: 'operation',\n operation,\n collectionName\n })\n });\n }\n\n registerPeerPublicKey(peerId, publicKey) {\n this.securityService.registerPeerPublicKey(peerId, publicKey);\n }\n\n getPublicKey() {\n return this.securityService.getPublicKey();\n }\n\n async broadcastMessage(messageType, payload, securityContext = {}) {\n const envelope = await this.securityService.secureOutgoingMessage({\n messageType,\n payload,\n targetId: null,\n securityContext\n });\n await this.networkAdapter.broadcast(envelope);\n }\n\n async sendDirectMessage(targetId, messageType, payload) {\n const envelope = await this.securityService.secureOutgoingMessage({\n messageType,\n payload,\n targetId\n });\n await this.networkAdapter.broadcast(envelope);\n }\n\n getPresenceMap(scope) {\n if (!this.presenceByScope.has(scope)) {\n this.presenceByScope.set(scope, new Map());\n }\n\n return this.presenceByScope.get(scope);\n }\n\n upsertPresence(scope, peerId, metadata, ttlMs, announcedAt) {\n const map = this.getPresenceMap(scope);\n const existing = map.get(peerId);\n const next = {\n peerId,\n scope,\n metadata: metadata ? { ...metadata } : {},\n lastSeenAt: announcedAt,\n expiresAt: announcedAt + ttlMs\n };\n map.set(peerId, next);\n\n if (!existing) {\n this.emit('peerdiscovered', { scope, peerId, metadata: next.metadata });\n }\n\n return next;\n }\n\n prunePresence(scope) {\n const map = this.presenceByScope.get(scope);\n if (!map) {\n return;\n }\n\n const now = this.now();\n for (const [peerId, entry] of map.entries()) {\n if (entry.expiresAt <= now) {\n map.delete(peerId);\n this.emit('peerleft', { scope, peerId, reason: 'timeout' });\n }\n }\n }\n\n async joinDiscovery(scope = 'main', options = {}) {\n const normalizedScope = scope || 'main';\n const heartbeatIntervalMs = options.heartbeatIntervalMs || this.defaultDiscoveryHeartbeatMs;\n const ttlMs = options.ttlMs || this.defaultPresenceTtlMs;\n const metadata = options.metadata || {};\n\n const existing = this.discoveryRooms.get(normalizedScope);\n if (existing && existing.timer) {\n clearInterval(existing.timer);\n }\n\n const timer = setInterval(() => {\n this.announcePresence(normalizedScope).catch((error) => {\n this.emit('warning', { type: 'presence-heartbeat-failed', scope: normalizedScope, error });\n });\n }, heartbeatIntervalMs);\n\n this.discoveryRooms.set(normalizedScope, {\n metadata,\n heartbeatIntervalMs,\n ttlMs,\n timer\n });\n\n this.upsertPresence(normalizedScope, this.nodeId, metadata, ttlMs, this.now());\n await this.announcePresence(normalizedScope);\n }\n\n async announcePresence(scope = 'main', metadataOverride = null) {\n const normalizedScope = scope || 'main';\n const room = this.discoveryRooms.get(normalizedScope);\n if (!room) {\n throw new Error(`Scope ${normalizedScope} has not been joined for discovery`);\n }\n\n const metadata = metadataOverride || room.metadata || {};\n const announcedAt = this.now();\n this.upsertPresence(normalizedScope, this.nodeId, metadata, room.ttlMs, announcedAt);\n\n await this.broadcastMessage(\n 'presence:announce',\n {\n scope: normalizedScope,\n peerId: this.nodeId,\n metadata,\n ttlMs: room.ttlMs,\n announcedAt\n },\n { broadcastScope: normalizedScope }\n );\n }\n\n async leaveDiscovery(scope = 'main') {\n const normalizedScope = scope || 'main';\n const room = this.discoveryRooms.get(normalizedScope);\n if (!room) {\n return;\n }\n\n if (room.timer) {\n clearInterval(room.timer);\n }\n this.discoveryRooms.delete(normalizedScope);\n\n const map = this.presenceByScope.get(normalizedScope);\n if (map) {\n map.delete(this.nodeId);\n }\n\n await this.broadcastMessage(\n 'presence:leave',\n {\n scope: normalizedScope,\n peerId: this.nodeId,\n leftAt: this.now()\n },\n { broadcastScope: normalizedScope }\n );\n }\n\n listPeers(scope = 'main', options = {}) {\n const normalizedScope = scope || 'main';\n const includeSelf = options.includeSelf !== false;\n this.prunePresence(normalizedScope);\n\n const map = this.presenceByScope.get(normalizedScope);\n if (!map) {\n return [];\n }\n\n return Array.from(map.values())\n .filter((entry) => includeSelf || entry.peerId !== this.nodeId)\n .map((entry) => ({\n peerId: entry.peerId,\n scope: entry.scope,\n metadata: { ...entry.metadata },\n lastSeenAt: entry.lastSeenAt,\n expiresAt: entry.expiresAt\n }));\n }\n\n async handleIncomingMessage(message) {\n // Backward compatibility for raw operation payloads\n if (message && message.opId && message.kind) {\n this.applyOperation(message);\n return;\n }\n\n if (message && message.senderId && this.isPeerBanned(message.senderId)) {\n this.emit('messageignored', {\n senderId: message.senderId,\n reason: 'peer-banned'\n });\n return;\n }\n\n let decrypted;\n try {\n decrypted = await this.securityService.decryptIncomingMessage(message);\n } catch (error) {\n const senderId = message ? message.senderId : null;\n if (senderId && (error.code === 'INVALID_SIGNATURE' || error.code === 'INVALID_POW')) {\n this.banPeer(senderId, this.peerBanDurationMs, error.code);\n }\n\n this.emit('securityerror', {\n senderId,\n error\n });\n return;\n }\n\n if (!decrypted || decrypted.ignored) {\n return;\n }\n\n if (decrypted.messageType === 'operation') {\n this.applyOperation(decrypted.payload);\n return;\n }\n\n if (decrypted.messageType === 'presence:announce') {\n const payload = decrypted.payload || {};\n const scope = payload.scope || 'main';\n const peerId = payload.peerId || decrypted.senderId;\n if (!peerId) {\n return;\n }\n\n const presenceMap = this.getPresenceMap(scope);\n const isNewPeerInScope = !presenceMap.has(peerId);\n\n this.upsertPresence(\n scope,\n peerId,\n payload.metadata || {},\n payload.ttlMs || this.defaultPresenceTtlMs,\n payload.announcedAt || this.now()\n );\n\n // Discovery handshake: when a new peer appears in a joined scope,\n // send our current presence so late joiners quickly converge.\n if (isNewPeerInScope && peerId !== this.nodeId && this.discoveryRooms.has(scope)) {\n this.announcePresence(scope).catch((error) => {\n this.emit('warning', { type: 'presence-handshake-failed', scope, error });\n });\n }\n return;\n }\n\n if (decrypted.messageType === 'presence:leave') {\n const payload = decrypted.payload || {};\n const scope = payload.scope || 'main';\n const peerId = payload.peerId || decrypted.senderId;\n const map = this.presenceByScope.get(scope);\n if (map && peerId && map.has(peerId)) {\n map.delete(peerId);\n this.emit('peerleft', { scope, peerId, reason: 'leave' });\n }\n return;\n }\n\n this.emit('message', {\n senderId: decrypted.senderId,\n targetId: decrypted.targetId,\n type: decrypted.messageType,\n payload: decrypted.payload\n });\n }\n\n banPeer(peerId, durationMs = this.peerBanDurationMs, reason = 'manual') {\n if (!peerId) {\n return;\n }\n\n const bannedUntil = this.now() + Math.max(1, durationMs);\n this.bannedPeers.set(peerId, {\n peerId,\n reason,\n bannedAt: this.now(),\n bannedUntil\n });\n\n this.emit('peerbanned', {\n peerId,\n reason,\n bannedUntil\n });\n }\n\n unbanPeer(peerId) {\n this.bannedPeers.delete(peerId);\n this.emit('peerunbanned', { peerId });\n }\n\n getBanInfo(peerId) {\n const info = this.bannedPeers.get(peerId);\n if (!info) {\n return null;\n }\n\n if (info.bannedUntil <= this.now()) {\n this.bannedPeers.delete(peerId);\n return null;\n }\n\n return { ...info };\n }\n\n isPeerBanned(peerId) {\n return this.getBanInfo(peerId) !== null;\n }\n\n emitConflict(details) {\n this.emit('conflict', details);\n }\n\n restoreRecord(collectionName, record) {\n if (!record || !record.id) {\n return false;\n }\n\n const collection = this.getCollection(collectionName);\n const current = collection.get(record.id);\n if (current && current.version >= record.version) {\n return false;\n }\n\n collection.set(record.id, {\n id: record.id,\n ownerId: record.ownerId,\n data: { ...(record.data || {}) },\n createdAt: record.createdAt,\n updatedAt: record.updatedAt,\n deletedAt: record.deletedAt || null,\n version: record.version\n });\n\n return true;\n }\n\n applyOperation(operation) {\n if (!operation || !operation.opId || this.appliedOperations.has(operation.opId)) {\n return false;\n }\n\n const collection = this.getCollection(operation.collectionName);\n const current = collection.get(operation.id);\n\n if (operation.kind === 'create') {\n if (current && !current.deletedAt) {\n return false;\n }\n\n collection.set(operation.id, {\n id: operation.id,\n ownerId: operation.ownerId,\n data: { ...operation.payload },\n createdAt: operation.timestamp,\n updatedAt: operation.timestamp,\n deletedAt: null,\n version: 1\n });\n\n this.appliedOperations.add(operation.opId);\n this.emit('change', { kind: 'create', collection: operation.collectionName, id: operation.id });\n return true;\n }\n\n if (!current || current.deletedAt) {\n return false;\n }\n\n if (operation.actorId !== current.ownerId) {\n return false;\n }\n\n if (typeof operation.baseVersion === 'number' && operation.baseVersion !== current.version) {\n this.emitConflict({\n kind: operation.kind,\n collection: operation.collectionName,\n id: operation.id,\n expectedVersion: operation.baseVersion,\n currentVersion: current.version,\n phase: 'remote',\n operation\n });\n return false;\n }\n\n if (operation.kind === 'update') {\n current.data = {\n ...current.data,\n ...operation.payload\n };\n current.updatedAt = operation.timestamp;\n current.version += 1;\n\n this.appliedOperations.add(operation.opId);\n this.emit('change', { kind: 'update', collection: operation.collectionName, id: operation.id });\n return true;\n }\n\n if (operation.kind === 'delete') {\n current.deletedAt = operation.timestamp;\n current.updatedAt = operation.timestamp;\n current.version += 1;\n\n this.appliedOperations.add(operation.opId);\n this.emit('change', { kind: 'delete', collection: operation.collectionName, id: operation.id });\n return true;\n }\n\n return false;\n }\n}\n\nmodule.exports = DignityP2P;\n", "class SignalingPool {\n constructor(providers = []) {\n this.providers = [...providers];\n this.activeProvider = null;\n }\n\n registerProvider(provider) {\n this.providers.push(provider);\n }\n\n getProvidersByPriority() {\n return [...this.providers].sort((a, b) => (a.priority || 0) - (b.priority || 0));\n }\n\n async connect(excludedProviderIds = new Set()) {\n const providers = this.getProvidersByPriority().filter(\n (provider) => !excludedProviderIds.has(provider.id)\n );\n let lastError;\n\n for (const provider of providers) {\n try {\n await provider.connect();\n this.activeProvider = provider;\n return provider;\n } catch (error) {\n lastError = error;\n }\n }\n\n throw lastError || new Error('No signaling provider could connect');\n }\n\n async send(message) {\n if (!this.activeProvider) {\n await this.connect();\n }\n\n try {\n await this.activeProvider.send(message);\n } catch (error) {\n if (this.activeProvider && typeof this.activeProvider.disconnect === 'function') {\n await this.activeProvider.disconnect();\n }\n\n const failedProviderId = this.activeProvider ? this.activeProvider.id : null;\n this.activeProvider = null;\n const excludedProviderIds = failedProviderId ? new Set([failedProviderId]) : new Set();\n await this.connect(excludedProviderIds);\n await this.activeProvider.send(message);\n return error;\n }\n\n return null;\n }\n\n onMessage(handler) {\n for (const provider of this.providers) {\n if (typeof provider.onMessage === 'function') {\n provider.onMessage(handler);\n }\n }\n }\n\n async disconnect() {\n const disconnections = this.providers\n .filter((provider) => typeof provider.disconnect === 'function')\n .map((provider) => provider.disconnect());\n\n await Promise.all(disconnections);\n this.activeProvider = null;\n }\n}\n\nmodule.exports = SignalingPool;\n", "class WebSocketSignalingProvider {\n constructor({ id, url, WebSocketImpl, priority = 0 }) {\n if (!url) {\n throw new Error('WebSocket signaling provider requires a url');\n }\n\n this.id = id || url;\n this.url = url;\n this.priority = priority;\n this.WebSocketImpl = WebSocketImpl || globalThis.WebSocket;\n this.socket = null;\n this.messageHandlers = new Set();\n }\n\n async connect() {\n if (!this.WebSocketImpl) {\n throw new Error('WebSocket implementation is not available');\n }\n\n await new Promise((resolve, reject) => {\n const socket = new this.WebSocketImpl(this.buildConnectionUrl());\n\n socket.onopen = () => {\n this.socket = socket;\n resolve();\n };\n\n socket.onerror = () => {\n reject(new Error(`Unable to connect to signaling url ${this.url}`));\n };\n\n socket.onmessage = (event) => {\n let payload = event.data;\n try {\n payload = JSON.parse(event.data);\n } catch (error) {\n payload = event.data;\n }\n\n for (const handler of this.messageHandlers) {\n handler(payload);\n }\n };\n });\n }\n\n buildConnectionUrl() {\n const peerJsHostPattern = /^wss:\\/\\/(peerjs\\.92k\\.de|0\\.peerjs\\.com)(\\/|$)/;\n if (!peerJsHostPattern.test(this.url)) {\n return this.url;\n }\n\n const connectionId = `dignityjs_${Math.random().toString(36).slice(2, 12)}`;\n const token = Math.random().toString(36).slice(2, 12);\n const hasQuery = this.url.includes('?');\n const hasId = /[?&]id=/.test(this.url);\n const hasToken = /[?&]token=/.test(this.url);\n\n let url = this.url;\n if (!hasId) {\n url += `${hasQuery ? '&' : '?'}id=${connectionId}`;\n }\n if (!hasToken) {\n url += `${url.includes('?') ? '&' : '?'}token=${token}`;\n }\n\n return url;\n }\n\n onMessage(handler) {\n this.messageHandlers.add(handler);\n }\n\n async send(message) {\n if (!this.socket || this.socket.readyState !== 1) {\n throw new Error(`Signaling socket is not open for ${this.url}`);\n }\n\n this.socket.send(JSON.stringify(message));\n }\n\n async disconnect() {\n if (!this.socket) {\n return;\n }\n\n this.socket.close();\n this.socket = null;\n }\n}\n\nmodule.exports = WebSocketSignalingProvider;\n", "import { BufferBuilder } from \"./bufferbuilder\";\n\nexport type Packable =\n\t| null\n\t| undefined\n\t| string\n\t| number\n\t| boolean\n\t| Date\n\t| ArrayBuffer\n\t| Blob\n\t| Array<Packable>\n\t| { [key: string]: Packable }\n\t| ({ BYTES_PER_ELEMENT: number } & ArrayBufferView);\nexport type Unpackable =\n\t| null\n\t| undefined\n\t| string\n\t| number\n\t| boolean\n\t| ArrayBuffer\n\t| Array<Unpackable>\n\t| { [key: string]: Unpackable };\n\nexport function unpack<T extends Unpackable>(data: ArrayBuffer) {\n\tconst unpacker = new Unpacker(data);\n\treturn unpacker.unpack() as T;\n}\n\nexport function pack(data: Packable) {\n\tconst packer = new Packer();\n\tconst res = packer.pack(data);\n\tif (res instanceof Promise) {\n\t\treturn res.then(() => packer.getBuffer());\n\t}\n\treturn packer.getBuffer();\n}\n\nclass Unpacker {\n\tprivate index: number;\n\tprivate readonly dataBuffer: ArrayBuffer;\n\tprivate readonly dataView: Uint8Array;\n\tprivate readonly length: number;\n\n\tconstructor(data: ArrayBuffer) {\n\t\tthis.index = 0;\n\t\tthis.dataBuffer = data;\n\t\tthis.dataView = new Uint8Array(this.dataBuffer);\n\t\tthis.length = this.dataBuffer.byteLength;\n\t}\n\n\tunpack(): Unpackable {\n\t\tconst type = this.unpack_uint8();\n\t\tif (type < 0x80) {\n\t\t\treturn type;\n\t\t} else if ((type ^ 0xe0) < 0x20) {\n\t\t\treturn (type ^ 0xe0) - 0x20;\n\t\t}\n\n\t\tlet size;\n\t\tif ((size = type ^ 0xa0) <= 0x0f) {\n\t\t\treturn this.unpack_raw(size);\n\t\t} else if ((size = type ^ 0xb0) <= 0x0f) {\n\t\t\treturn this.unpack_string(size);\n\t\t} else if ((size = type ^ 0x90) <= 0x0f) {\n\t\t\treturn this.unpack_array(size);\n\t\t} else if ((size = type ^ 0x80) <= 0x0f) {\n\t\t\treturn this.unpack_map(size);\n\t\t}\n\n\t\tswitch (type) {\n\t\t\tcase 0xc0:\n\t\t\t\treturn null;\n\t\t\tcase 0xc1:\n\t\t\t\treturn undefined;\n\t\t\tcase 0xc2:\n\t\t\t\treturn false;\n\t\t\tcase 0xc3:\n\t\t\t\treturn true;\n\t\t\tcase 0xca:\n\t\t\t\treturn this.unpack_float();\n\t\t\tcase 0xcb:\n\t\t\t\treturn this.unpack_double();\n\t\t\tcase 0xcc:\n\t\t\t\treturn this.unpack_uint8();\n\t\t\tcase 0xcd:\n\t\t\t\treturn this.unpack_uint16();\n\t\t\tcase 0xce:\n\t\t\t\treturn this.unpack_uint32();\n\t\t\tcase 0xcf:\n\t\t\t\treturn this.unpack_uint64();\n\t\t\tcase 0xd0:\n\t\t\t\treturn this.unpack_int8();\n\t\t\tcase 0xd1:\n\t\t\t\treturn this.unpack_int16();\n\t\t\tcase 0xd2:\n\t\t\t\treturn this.unpack_int32();\n\t\t\tcase 0xd3:\n\t\t\t\treturn this.unpack_int64();\n\t\t\tcase 0xd4:\n\t\t\t\treturn undefined;\n\t\t\tcase 0xd5:\n\t\t\t\treturn undefined;\n\t\t\tcase 0xd6:\n\t\t\t\treturn undefined;\n\t\t\tcase 0xd7:\n\t\t\t\treturn undefined;\n\t\t\tcase 0xd8:\n\t\t\t\tsize = this.unpack_uint16();\n\t\t\t\treturn this.unpack_string(size);\n\t\t\tcase 0xd9:\n\t\t\t\tsize = this.unpack_uint32();\n\t\t\t\treturn this.unpack_string(size);\n\t\t\tcase 0xda:\n\t\t\t\tsize = this.unpack_uint16();\n\t\t\t\treturn this.unpack_raw(size);\n\t\t\tcase 0xdb:\n\t\t\t\tsize = this.unpack_uint32();\n\t\t\t\treturn this.unpack_raw(size);\n\t\t\tcase 0xdc:\n\t\t\t\tsize = this.unpack_uint16();\n\t\t\t\treturn this.unpack_array(size);\n\t\t\tcase 0xdd:\n\t\t\t\tsize = this.unpack_uint32();\n\t\t\t\treturn this.unpack_array(size);\n\t\t\tcase 0xde:\n\t\t\t\tsize = this.unpack_uint16();\n\t\t\t\treturn this.unpack_map(size);\n\t\t\tcase 0xdf:\n\t\t\t\tsize = this.unpack_uint32();\n\t\t\t\treturn this.unpack_map(size);\n\t\t}\n\t}\n\n\tunpack_uint8() {\n\t\tconst byte = this.dataView[this.index] & 0xff;\n\t\tthis.index++;\n\t\treturn byte;\n\t}\n\n\tunpack_uint16() {\n\t\tconst bytes = this.read(2);\n\t\tconst uint16 = (bytes[0] & 0xff) * 256 + (bytes[1] & 0xff);\n\t\tthis.index += 2;\n\t\treturn uint16;\n\t}\n\n\tunpack_uint32() {\n\t\tconst bytes = this.read(4);\n\t\tconst uint32 =\n\t\t\t((bytes[0] * 256 + bytes[1]) * 256 + bytes[2]) * 256 + bytes[3];\n\t\tthis.index += 4;\n\t\treturn uint32;\n\t}\n\n\tunpack_uint64() {\n\t\tconst bytes = this.read(8);\n\t\tconst uint64 =\n\t\t\t((((((bytes[0] * 256 + bytes[1]) * 256 + bytes[2]) * 256 + bytes[3]) *\n\t\t\t\t256 +\n\t\t\t\tbytes[4]) *\n\t\t\t\t256 +\n\t\t\t\tbytes[5]) *\n\t\t\t\t256 +\n\t\t\t\tbytes[6]) *\n\t\t\t\t256 +\n\t\t\tbytes[7];\n\t\tthis.index += 8;\n\t\treturn uint64;\n\t}\n\n\tunpack_int8() {\n\t\tconst uint8 = this.unpack_uint8();\n\t\treturn uint8 < 0x80 ? uint8 : uint8 - (1 << 8);\n\t}\n\n\tunpack_int16() {\n\t\tconst uint16 = this.unpack_uint16();\n\t\treturn uint16 < 0x8000 ? uint16 : uint16 - (1 << 16);\n\t}\n\n\tunpack_int32() {\n\t\tconst uint32 = this.unpack_uint32();\n\t\treturn uint32 < 2 ** 31 ? uint32 : uint32 - 2 ** 32;\n\t}\n\n\tunpack_int64() {\n\t\tconst uint64 = this.unpack_uint64();\n\t\treturn uint64 < 2 ** 63 ? uint64 : uint64 - 2 ** 64;\n\t}\n\n\tunpack_raw(size: number) {\n\t\tif (this.length < this.index + size) {\n\t\t\tthrow new Error(\n\t\t\t\t`BinaryPackFailure: index is out of range ${this.index} ${size} ${this.length}`,\n\t\t\t);\n\t\t}\n\t\tconst buf = this.dataBuffer.slice(this.index, this.index + size);\n\t\tthis.index += size;\n\n\t\treturn buf;\n\t}\n\n\tunpack_string(size: number) {\n\t\tconst bytes = this.read(size);\n\t\tlet i = 0;\n\t\tlet str = \"\";\n\t\tlet c;\n\t\tlet code;\n\n\t\twhile (i < size) {\n\t\t\tc = bytes[i];\n\t\t\t// The length of a UTF-8 sequence is specified in the first byte:\n\t\t\t// 0xxxxxxx means length 1,\n\t\t\t// 110xxxxx means length 2,\n\t\t\t// 1110xxxx means length 3,\n\t\t\t// 11110xxx means length 4.\n\t\t\t// 10xxxxxx is for non-initial bytes.\n\t\t\tif (c < 0xa0) {\n\t\t\t\t// One-byte sequence: bits 0xxxxxxx\n\t\t\t\tcode = c;\n\t\t\t\ti++;\n\t\t\t} else if ((c ^ 0xc0) < 0x20) {\n\t\t\t\t// Two-byte sequence: bits 110xxxxx 10xxxxxx\n\t\t\t\tcode = ((c & 0x1f) << 6) | (bytes[i + 1] & 0x3f);\n\t\t\t\ti += 2;\n\t\t\t} else if ((c ^ 0xe0) < 0x10) {\n\t\t\t\t// Three-byte sequence: bits 1110xxxx 10xxxxxx 10xxxxxx\n\t\t\t\tcode =\n\t\t\t\t\t((c & 0x0f) << 12) |\n\t\t\t\t\t((bytes[i + 1] & 0x3f) << 6) |\n\t\t\t\t\t(bytes[i + 2] & 0x3f);\n\t\t\t\ti += 3;\n\t\t\t} else {\n\t\t\t\t// Four-byte sequence: bits 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx\n\t\t\t\tcode =\n\t\t\t\t\t((c & 0x07) << 18) |\n\t\t\t\t\t((bytes[i + 1] & 0x3f) << 12) |\n\t\t\t\t\t((bytes[i + 2] & 0x3f) << 6) |\n\t\t\t\t\t(bytes[i + 3] & 0x3f);\n\t\t\t\ti += 4;\n\t\t\t}\n\t\t\tstr += String.fromCodePoint(code);\n\t\t}\n\n\t\tthis.index += size;\n\t\treturn str;\n\t}\n\n\tunpack_array(size: number) {\n\t\tconst objects = new Array<Unpackable>(size);\n\t\tfor (let i = 0; i < size; i++) {\n\t\t\tobjects[i] = this.unpack();\n\t\t}\n\t\treturn objects;\n\t}\n\n\tunpack_map(size: number) {\n\t\tconst map: { [key: string]: Unpackable } = {};\n\t\tfor (let i = 0; i < size; i++) {\n\t\t\tconst key = this.unpack() as string;\n\t\t\tmap[key] = this.unpack();\n\t\t}\n\t\treturn map;\n\t}\n\n\tunpack_float() {\n\t\tconst uint32 = this.unpack_uint32();\n\t\tconst sign = uint32 >> 31;\n\t\tconst exp = ((uint32 >> 23) & 0xff) - 127;\n\t\tconst fraction = (uint32 & 0x7fffff) | 0x800000;\n\t\treturn (sign === 0 ? 1 : -1) * fraction * 2 ** (exp - 23);\n\t}\n\n\tunpack_double() {\n\t\tconst h32 = this.unpack_uint32();\n\t\tconst l32 = this.unpack_uint32();\n\t\tconst sign = h32 >> 31;\n\t\tconst exp = ((h32 >> 20) & 0x7ff) - 1023;\n\t\tconst hfrac = (h32 & 0xfffff) | 0x100000;\n\t\tconst frac = hfrac * 2 ** (exp - 20) + l32 * 2 ** (exp - 52);\n\t\treturn (sign === 0 ? 1 : -1) * frac;\n\t}\n\n\tread(length: number) {\n\t\tconst j = this.index;\n\t\tif (j + length <= this.length) {\n\t\t\treturn this.dataView.subarray(j, j + length);\n\t\t} else {\n\t\t\tthrow new Error(\"BinaryPackFailure: read index out of range\");\n\t\t}\n\t}\n}\n\nexport class Packer {\n\tprivate _bufferBuilder = new BufferBuilder();\n\tprivate _textEncoder = new TextEncoder();\n\n\tgetBuffer() {\n\t\treturn this._bufferBuilder.toArrayBuffer();\n\t}\n\n\tpack(value: Packable) {\n\t\tif (typeof value === \"string\") {\n\t\t\tthis.pack_string(value);\n\t\t} else if (typeof value === \"number\") {\n\t\t\tif (Math.floor(value) === value) {\n\t\t\t\tthis.pack_integer(value);\n\t\t\t} else {\n\t\t\t\tthis.pack_double(value);\n\t\t\t}\n\t\t} else if (typeof value === \"boolean\") {\n\t\t\tif (value === true) {\n\t\t\t\tthis._bufferBuilder.append(0xc3);\n\t\t\t} else if (value === false) {\n\t\t\t\tthis._bufferBuilder.append(0xc2);\n\t\t\t}\n\t\t} else if (value === undefined) {\n\t\t\tthis._bufferBuilder.append(0xc0);\n\t\t} else if (typeof value === \"object\") {\n\t\t\tif (value === null) {\n\t\t\t\tthis._bufferBuilder.append(0xc0);\n\t\t\t} else {\n\t\t\t\tconst constructor = value.constructor;\n\t\t\t\tif (value instanceof Array) {\n\t\t\t\t\tconst res = this.pack_array(value);\n\t\t\t\t\tif (res instanceof Promise) {\n\t\t\t\t\t\treturn res.then(() => this._bufferBuilder.flush());\n\t\t\t\t\t}\n\t\t\t\t} else if (value instanceof ArrayBuffer) {\n\t\t\t\t\tthis.pack_bin(new Uint8Array(value));\n\t\t\t\t} else if (\"BYTES_PER_ELEMENT\" in value) {\n\t\t\t\t\tconst v = value as unknown as DataView;\n\t\t\t\t\tthis.pack_bin(new Uint8Array(v.buffer, v.byteOffset, v.byteLength));\n\t\t\t\t} else if (value instanceof Date) {\n\t\t\t\t\tthis.pack_string(value.toString());\n\t\t\t\t} else if (value instanceof Blob) {\n\t\t\t\t\treturn value.arrayBuffer().then((buffer) => {\n\t\t\t\t\t\tthis.pack_bin(new Uint8Array(buffer));\n\t\t\t\t\t\tthis._bufferBuilder.flush();\n\t\t\t\t\t});\n\t\t\t\t\t// this.pack_bin(new Uint8Array(await value.arrayBuffer()));\n\t\t\t\t} else if (\n\t\t\t\t\tconstructor == Object ||\n\t\t\t\t\tconstructor.toString().startsWith(\"class\")\n\t\t\t\t) {\n\t\t\t\t\tconst res = this.pack_object(value);\n\t\t\t\t\tif (res instanceof Promise) {\n\t\t\t\t\t\treturn res.then(() => this._bufferBuilder.flush());\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error(`Type \"${constructor.toString()}\" not yet supported`);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tthrow new Error(`Type \"${typeof value}\" not yet supported`);\n\t\t}\n\t\tthis._bufferBuilder.flush();\n\t}\n\n\tpack_bin(blob: Uint8Array) {\n\t\tconst length = blob.length;\n\n\t\tif (length <= 0x0f) {\n\t\t\tthis.pack_uint8(0xa0 + length);\n\t\t} else if (length <= 0xffff) {\n\t\t\tthis._bufferBuilder.append(0xda);\n\t\t\tthis.pack_uint16(length);\n\t\t} else if (length <= 0xffffffff) {\n\t\t\tthis._bufferBuilder.append(0xdb);\n\t\t\tthis.pack_uint32(length);\n\t\t} else {\n\t\t\tthrow new Error(\"Invalid length\");\n\t\t}\n\t\tthis._bufferBuilder.append_buffer(blob);\n\t}\n\n\tpack_string(str: string) {\n\t\tconst encoded = this._textEncoder.encode(str);\n\t\tconst length = encoded.length;\n\n\t\tif (length <= 0x0f) {\n\t\t\tthis.pack_uint8(0xb0 + length);\n\t\t} else if (length <= 0xffff) {\n\t\t\tthis._bufferBuilder.append(0xd8);\n\t\t\tthis.pack_uint16(length);\n\t\t} else if (length <= 0xffffffff) {\n\t\t\tthis._bufferBuilder.append(0xd9);\n\t\t\tthis.pack_uint32(length);\n\t\t} else {\n\t\t\tthrow new Error(\"Invalid length\");\n\t\t}\n\t\tthis._bufferBuilder.append_buffer(encoded);\n\t}\n\n\tpack_array(ary: Packable[]) {\n\t\tconst length = ary.length;\n\t\tif (length <= 0x0f) {\n\t\t\tthis.pack_uint8(0x90 + length);\n\t\t} else if (length <= 0xffff) {\n\t\t\tthis._bufferBuilder.append(0xdc);\n\t\t\tthis.pack_uint16(length);\n\t\t} else if (length <= 0xffffffff) {\n\t\t\tthis._bufferBuilder.append(0xdd);\n\t\t\tthis.pack_uint32(length);\n\t\t} else {\n\t\t\tthrow new Error(\"Invalid length\");\n\t\t}\n\n\t\tconst packNext = (index: number): Promise<void> | void => {\n\t\t\tif (index < length) {\n\t\t\t\tconst res = this.pack(ary[index]);\n\t\t\t\tif (res instanceof Promise) {\n\t\t\t\t\treturn res.then(() => packNext(index + 1));\n\t\t\t\t}\n\t\t\t\treturn packNext(index + 1);\n\t\t\t}\n\t\t};\n\n\t\treturn packNext(0);\n\t}\n\n\tpack_integer(num: number) {\n\t\tif (num >= -0x20 && num <= 0x7f) {\n\t\t\tthis._bufferBuilder.append(num & 0xff);\n\t\t} else if (num >= 0x00 && num <= 0xff) {\n\t\t\tthis._bufferBuilder.append(0xcc);\n\t\t\tthis.pack_uint8(num);\n\t\t} else if (num >= -0x80 && num <= 0x7f) {\n\t\t\tthis._bufferBuilder.append(0xd0);\n\t\t\tthis.pack_int8(num);\n\t\t} else if (num >= 0x0000 && num <= 0xffff) {\n\t\t\tthis._bufferBuilder.append(0xcd);\n\t\t\tthis.pack_uint16(num);\n\t\t} else if (num >= -0x8000 && num <= 0x7fff) {\n\t\t\tthis._bufferBuilder.append(0xd1);\n\t\t\tthis.pack_int16(num);\n\t\t} else if (num >= 0x00000000 && num <= 0xffffffff) {\n\t\t\tthis._bufferBuilder.append(0xce);\n\t\t\tthis.pack_uint32(num);\n\t\t} else if (num >= -0x80000000 && num <= 0x7fffffff) {\n\t\t\tthis._bufferBuilder.append(0xd2);\n\t\t\tthis.pack_int32(num);\n\t\t} else if (num >= -0x8000000000000000 && num <= 0x7fffffffffffffff) {\n\t\t\tthis._bufferBuilder.append(0xd3);\n\t\t\tthis.pack_int64(num);\n\t\t} else if (num >= 0x0000000000000000 && num <= 0xffffffffffffffff) {\n\t\t\tthis._bufferBuilder.append(0xcf);\n\t\t\tthis.pack_uint64(num);\n\t\t} else {\n\t\t\tthrow new Error(\"Invalid integer\");\n\t\t}\n\t}\n\n\tpack_double(num: number) {\n\t\tlet sign = 0;\n\t\tif (num < 0) {\n\t\t\tsign = 1;\n\t\t\tnum = -num;\n\t\t}\n\t\tconst exp = Math.floor(Math.log(num) / Math.LN2);\n\t\tconst frac0 = num / 2 ** exp - 1;\n\t\tconst frac1 = Math.floor(frac0 * 2 ** 52);\n\t\tconst b32 = 2 ** 32;\n\t\tconst h32 =\n\t\t\t(sign << 31) | ((exp + 1023) << 20) | ((frac1 / b32) & 0x0fffff);\n\t\tconst l32 = frac1 % b32;\n\t\tthis._bufferBuilder.append(0xcb);\n\t\tthis.pack_int32(h32);\n\t\tthis.pack_int32(l32);\n\t}\n\n\tpack_object(obj: { [key: string]: Packable }) {\n\t\tconst keys = Object.keys(obj);\n\t\tconst length = keys.length;\n\t\tif (length <= 0x0f) {\n\t\t\tthis.pack_uint8(0x80 + length);\n\t\t} else if (length <= 0xffff) {\n\t\t\tthis._bufferBuilder.append(0xde);\n\t\t\tthis.pack_uint16(length);\n\t\t} else if (length <= 0xffffffff) {\n\t\t\tthis._bufferBuilder.append(0xdf);\n\t\t\tthis.pack_uint32(length);\n\t\t} else {\n\t\t\tthrow new Error(\"Invalid length\");\n\t\t}\n\n\t\tconst packNext = (index: number): Promise<void> | void => {\n\t\t\tif (index < keys.length) {\n\t\t\t\tconst prop = keys[index];\n\t\t\t\t// eslint-disable-next-line no-prototype-builtins\n\t\t\t\tif (obj.hasOwnProperty(prop)) {\n\t\t\t\t\tthis.pack(prop);\n\t\t\t\t\tconst res = this.pack(obj[prop]);\n\t\t\t\t\tif (res instanceof Promise) {\n\t\t\t\t\t\treturn res.then(() => packNext(index + 1));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn packNext(index + 1);\n\t\t\t}\n\t\t};\n\n\t\treturn packNext(0);\n\t}\n\n\tpack_uint8(num: number) {\n\t\tthis._bufferBuilder.append(num);\n\t}\n\n\tpack_uint16(num: number) {\n\t\tthis._bufferBuilder.append(num >> 8);\n\t\tthis._bufferBuilder.append(num & 0xff);\n\t}\n\n\tpack_uint32(num: number) {\n\t\tconst n = num & 0xffffffff;\n\t\tthis._bufferBuilder.append((n & 0xff000000) >>> 24);\n\t\tthis._bufferBuilder.append((n & 0x00ff0000) >>> 16);\n\t\tthis._bufferBuilder.append((n & 0x0000ff00) >>> 8);\n\t\tthis._bufferBuilder.append(n & 0x000000ff);\n\t}\n\n\tpack_uint64(num: number) {\n\t\tconst high = num / 2 ** 32;\n\t\tconst low = num % 2 ** 32;\n\t\tthis._bufferBuilder.append((high & 0xff000000) >>> 24);\n\t\tthis._bufferBuilder.append((high & 0x00ff0000) >>> 16);\n\t\tthis._bufferBuilder.append((high & 0x0000ff00) >>> 8);\n\t\tthis._bufferBuilder.append(high & 0x000000ff);\n\t\tthis._bufferBuilder.append((low & 0xff000000) >>> 24);\n\t\tthis._bufferBuilder.append((low & 0x00ff0000) >>> 16);\n\t\tthis._bufferBuilder.append((low & 0x0000ff00) >>> 8);\n\t\tthis._bufferBuilder.append(low & 0x000000ff);\n\t}\n\n\tpack_int8(num: number) {\n\t\tthis._bufferBuilder.append(num & 0xff);\n\t}\n\n\tpack_int16(num: number) {\n\t\tthis._bufferBuilder.append((num & 0xff00) >> 8);\n\t\tthis._bufferBuilder.append(num & 0xff);\n\t}\n\n\tpack_int32(num: number) {\n\t\tthis._bufferBuilder.append((num >>> 24) & 0xff);\n\t\tthis._bufferBuilder.append((num & 0x00ff0000) >>> 16);\n\t\tthis._bufferBuilder.append((num & 0x0000ff00) >>> 8);\n\t\tthis._bufferBuilder.append(num & 0x000000ff);\n\t}\n\n\tpack_int64(num: number) {\n\t\tconst high = Math.floor(num / 2 ** 32);\n\t\tconst low = num % 2 ** 32;\n\t\tthis._bufferBuilder.append((high & 0xff000000) >>> 24);\n\t\tthis._bufferBuilder.append((high & 0x00ff0000) >>> 16);\n\t\tthis._bufferBuilder.append((high & 0x0000ff00) >>> 8);\n\t\tthis._bufferBuilder.append(high & 0x000000ff);\n\t\tthis._bufferBuilder.append((low & 0xff000000) >>> 24);\n\t\tthis._bufferBuilder.append((low & 0x00ff0000) >>> 16);\n\t\tthis._bufferBuilder.append((low & 0x0000ff00) >>> 8);\n\t\tthis._bufferBuilder.append(low & 0x000000ff);\n\t}\n}\n", "class BufferBuilder {\n\tprivate _pieces: number[];\n\tprivate readonly _parts: ArrayBufferView[];\n\n\tconstructor() {\n\t\tthis._pieces = [];\n\t\tthis._parts = [];\n\t}\n\n\tappend_buffer(data: ArrayBufferView) {\n\t\tthis.flush();\n\t\tthis._parts.push(data);\n\t}\n\n\tappend(data: number) {\n\t\tthis._pieces.push(data);\n\t}\n\n\tflush() {\n\t\tif (this._pieces.length > 0) {\n\t\t\tconst buf = new Uint8Array(this._pieces);\n\t\t\tthis._parts.push(buf);\n\t\t\tthis._pieces = [];\n\t\t}\n\t}\n\n\tprivate encoder = new TextEncoder();\n\n\tpublic toArrayBuffer() {\n\t\tconst buffer = [];\n\t\tfor (const part of this._parts) {\n\t\t\tbuffer.push(part);\n\t\t}\n\t\treturn concatArrayBuffers(buffer).buffer;\n\t}\n}\n\nexport { BufferBuilder };\n\nfunction concatArrayBuffers(bufs: ArrayBufferView[]) {\n\tlet size = 0;\n\tfor (const buf of bufs) {\n\t\tsize += buf.byteLength;\n\t}\n\tconst result = new Uint8Array(size);\n\tlet offset = 0;\n\tfor (const buf of bufs) {\n\t\tconst view = new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);\n\t\tresult.set(view, offset);\n\t\toffset += buf.byteLength;\n\t}\n\treturn result;\n}\n", "/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.compactObject = compactObject;\nexports.deprecated = deprecated;\nexports.detectBrowser = detectBrowser;\nexports.disableLog = disableLog;\nexports.disableWarnings = disableWarnings;\nexports.extractVersion = extractVersion;\nexports.filterStats = filterStats;\nexports.log = log;\nexports.walkStats = walkStats;\nexports.wrapPeerConnectionEvent = wrapPeerConnectionEvent;\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nvar logDisabled_ = true;\nvar deprecationWarnings_ = true;\n\n/**\n * Extract browser version out of the provided user agent string.\n *\n * @param {!string} uastring userAgent string.\n * @param {!string} expr Regular expression used as match criteria.\n * @param {!number} pos position in the version string to be returned.\n * @return {!number} browser version.\n */\nfunction extractVersion(uastring, expr, pos) {\n var match = uastring.match(expr);\n return match && match.length >= pos && parseFloat(match[pos], 10);\n}\n\n// Wraps the peerconnection event eventNameToWrap in a function\n// which returns the modified event object (or false to prevent\n// the event).\nfunction wrapPeerConnectionEvent(window, eventNameToWrap, wrapper) {\n if (!window.RTCPeerConnection) {\n return;\n }\n var proto = window.RTCPeerConnection.prototype;\n var nativeAddEventListener = proto.addEventListener;\n proto.addEventListener = function (nativeEventName, cb) {\n if (nativeEventName !== eventNameToWrap) {\n return nativeAddEventListener.apply(this, arguments);\n }\n var wrappedCallback = function wrappedCallback(e) {\n var modifiedEvent = wrapper(e);\n if (modifiedEvent) {\n if (cb.handleEvent) {\n cb.handleEvent(modifiedEvent);\n } else {\n cb(modifiedEvent);\n }\n }\n };\n this._eventMap = this._eventMap || {};\n if (!this._eventMap[eventNameToWrap]) {\n this._eventMap[eventNameToWrap] = new Map();\n }\n this._eventMap[eventNameToWrap].set(cb, wrappedCallback);\n return nativeAddEventListener.apply(this, [nativeEventName, wrappedCallback]);\n };\n var nativeRemoveEventListener = proto.removeEventListener;\n proto.removeEventListener = function (nativeEventName, cb) {\n if (nativeEventName !== eventNameToWrap || !this._eventMap || !this._eventMap[eventNameToWrap]) {\n return nativeRemoveEventListener.apply(this, arguments);\n }\n if (!this._eventMap[eventNameToWrap].has(cb)) {\n return nativeRemoveEventListener.apply(this, arguments);\n }\n var unwrappedCb = this._eventMap[eventNameToWrap].get(cb);\n this._eventMap[eventNameToWrap][\"delete\"](cb);\n if (this._eventMap[eventNameToWrap].size === 0) {\n delete this._eventMap[eventNameToWrap];\n }\n if (Object.keys(this._eventMap).length === 0) {\n delete this._eventMap;\n }\n return nativeRemoveEventListener.apply(this, [nativeEventName, unwrappedCb]);\n };\n Object.defineProperty(proto, 'on' + eventNameToWrap, {\n get: function get() {\n return this['_on' + eventNameToWrap];\n },\n set: function set(cb) {\n if (this['_on' + eventNameToWrap]) {\n this.removeEventListener(eventNameToWrap, this['_on' + eventNameToWrap]);\n delete this['_on' + eventNameToWrap];\n }\n if (cb) {\n this.addEventListener(eventNameToWrap, this['_on' + eventNameToWrap] = cb);\n }\n },\n enumerable: true,\n configurable: true\n });\n}\nfunction disableLog(bool) {\n if (typeof bool !== 'boolean') {\n return new Error('Argument type: ' + _typeof(bool) + '. Please use a boolean.');\n }\n logDisabled_ = bool;\n return bool ? 'adapter.js logging disabled' : 'adapter.js logging enabled';\n}\n\n/**\n * Disable or enable deprecation warnings\n * @param {!boolean} bool set to true to disable warnings.\n */\nfunction disableWarnings(bool) {\n if (typeof bool !== 'boolean') {\n return new Error('Argument type: ' + _typeof(bool) + '. Please use a boolean.');\n }\n deprecationWarnings_ = !bool;\n return 'adapter.js deprecation warnings ' + (bool ? 'disabled' : 'enabled');\n}\nfunction log() {\n if ((typeof window === \"undefined\" ? \"undefined\" : _typeof(window)) === 'object') {\n if (logDisabled_) {\n return;\n }\n if (typeof console !== 'undefined' && typeof console.log === 'function') {\n console.log.apply(console, arguments);\n }\n }\n}\n\n/**\n * Shows a deprecation warning suggesting the modern and spec-compatible API.\n */\nfunction deprecated(oldMethod, newMethod) {\n if (!deprecationWarnings_) {\n return;\n }\n console.warn(oldMethod + ' is deprecated, please use ' + newMethod + ' instead.');\n}\n\n/**\n * Browser detector.\n *\n * @return {object} result containing browser and version\n * properties.\n */\nfunction detectBrowser(window) {\n // Returned result object.\n var result = {\n browser: null,\n version: null\n };\n\n // Fail early if it's not a browser\n if (typeof window === 'undefined' || !window.navigator || !window.navigator.userAgent) {\n result.browser = 'Not a browser.';\n return result;\n }\n var navigator = window.navigator;\n\n // Prefer navigator.userAgentData.\n if (navigator.userAgentData && navigator.userAgentData.brands) {\n var chromium = navigator.userAgentData.brands.find(function (brand) {\n return brand.brand === 'Chromium';\n });\n if (chromium) {\n return {\n browser: 'chrome',\n version: parseInt(chromium.version, 10)\n };\n }\n }\n if (navigator.mozGetUserMedia) {\n // Firefox.\n result.browser = 'firefox';\n result.version = parseInt(extractVersion(navigator.userAgent, /Firefox\\/(\\d+)\\./, 1));\n } else if (navigator.webkitGetUserMedia || window.isSecureContext === false && window.webkitRTCPeerConnection) {\n // Chrome, Chromium, Webview, Opera.\n // Version matches Chrome/WebRTC version.\n // Chrome 74 removed webkitGetUserMedia on http as well so we need the\n // more complicated fallback to webkitRTCPeerConnection.\n result.browser = 'chrome';\n result.version = parseInt(extractVersion(navigator.userAgent, /Chrom(e|ium)\\/(\\d+)\\./, 2)) || null;\n } else if (window.RTCPeerConnection && navigator.userAgent.match(/AppleWebKit\\/(\\d+)\\./)) {\n // Safari.\n result.browser = 'safari';\n result.version = parseInt(extractVersion(navigator.userAgent, /AppleWebKit\\/(\\d+)\\./, 1));\n result.supportsUnifiedPlan = window.RTCRtpTransceiver && 'currentDirection' in window.RTCRtpTransceiver.prototype;\n // Only for internal usage.\n result._safariVersion = extractVersion(navigator.userAgent, /Version\\/(\\d+(\\.?\\d+))/, 1);\n } else {\n // Default fallthrough: not supported.\n result.browser = 'Not a supported browser.';\n return result;\n }\n return result;\n}\n\n/**\n * Checks if something is an object.\n *\n * @param {*} val The something you want to check.\n * @return true if val is an object, false otherwise.\n */\nfunction isObject(val) {\n return Object.prototype.toString.call(val) === '[object Object]';\n}\n\n/**\n * Remove all empty objects and undefined values\n * from a nested object -- an enhanced and vanilla version\n * of Lodash's `compact`.\n */\nfunction compactObject(data) {\n if (!isObject(data)) {\n return data;\n }\n return Object.keys(data).reduce(function (accumulator, key) {\n var isObj = isObject(data[key]);\n var value = isObj ? compactObject(data[key]) : data[key];\n var isEmptyObject = isObj && !Object.keys(value).length;\n if (value === undefined || isEmptyObject) {\n return accumulator;\n }\n return Object.assign(accumulator, _defineProperty({}, key, value));\n }, {});\n}\n\n/* iterates the stats graph recursively. */\nfunction walkStats(stats, base, resultSet) {\n if (!base || resultSet.has(base.id)) {\n return;\n }\n resultSet.set(base.id, base);\n Object.keys(base).forEach(function (name) {\n if (name.endsWith('Id')) {\n walkStats(stats, stats.get(base[name]), resultSet);\n } else if (name.endsWith('Ids')) {\n base[name].forEach(function (id) {\n walkStats(stats, stats.get(id), resultSet);\n });\n }\n });\n}\n\n/* filter getStats for a sender/receiver track. */\nfunction filterStats(result, track, outbound) {\n var streamStatsType = outbound ? 'outbound-rtp' : 'inbound-rtp';\n var filteredResult = new Map();\n if (track === null) {\n return filteredResult;\n }\n var trackStats = [];\n result.forEach(function (value) {\n if (value.type === 'track' && value.trackIdentifier === track.id) {\n trackStats.push(value);\n }\n });\n trackStats.forEach(function (trackStat) {\n result.forEach(function (stats) {\n if (stats.type === streamStatsType && stats.trackId === trackStat.id) {\n walkStats(result, stats, filteredResult);\n }\n });\n });\n return filteredResult;\n}\n", "/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.shimGetUserMedia = shimGetUserMedia;\nvar utils = _interopRequireWildcard(require(\"../utils.js\"));\nfunction _interopRequireWildcard(e, t) { if (\"function\" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, \"default\": e }; if (null === e || \"object\" != _typeof(e) && \"function\" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) \"default\" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nvar logging = utils.log;\nfunction shimGetUserMedia(window, browserDetails) {\n var navigator = window && window.navigator;\n if (!navigator.mediaDevices) {\n return;\n }\n var constraintsToChrome_ = function constraintsToChrome_(c) {\n if (_typeof(c) !== 'object' || c.mandatory || c.optional) {\n return c;\n }\n var cc = {};\n Object.keys(c).forEach(function (key) {\n if (key === 'require' || key === 'advanced' || key === 'mediaSource') {\n return;\n }\n var r = _typeof(c[key]) === 'object' ? c[key] : {\n ideal: c[key]\n };\n if (r.exact !== undefined && typeof r.exact === 'number') {\n r.min = r.max = r.exact;\n }\n var oldname_ = function oldname_(prefix, name) {\n if (prefix) {\n return prefix + name.charAt(0).toUpperCase() + name.slice(1);\n }\n return name === 'deviceId' ? 'sourceId' : name;\n };\n if (r.ideal !== undefined) {\n cc.optional = cc.optional || [];\n var oc = {};\n if (typeof r.ideal === 'number') {\n oc[oldname_('min', key)] = r.ideal;\n cc.optional.push(oc);\n oc = {};\n oc[oldname_('max', key)] = r.ideal;\n cc.optional.push(oc);\n } else {\n oc[oldname_('', key)] = r.ideal;\n cc.optional.push(oc);\n }\n }\n if (r.exact !== undefined && typeof r.exact !== 'number') {\n cc.mandatory = cc.mandatory || {};\n cc.mandatory[oldname_('', key)] = r.exact;\n } else {\n ['min', 'max'].forEach(function (mix) {\n if (r[mix] !== undefined) {\n cc.mandatory = cc.mandatory || {};\n cc.mandatory[oldname_(mix, key)] = r[mix];\n }\n });\n }\n });\n if (c.advanced) {\n cc.optional = (cc.optional || []).concat(c.advanced);\n }\n return cc;\n };\n var shimConstraints_ = function shimConstraints_(constraints, func) {\n if (browserDetails.version >= 61) {\n return func(constraints);\n }\n constraints = JSON.parse(JSON.stringify(constraints));\n if (constraints && _typeof(constraints.audio) === 'object') {\n var remap = function remap(obj, a, b) {\n if (a in obj && !(b in obj)) {\n obj[b] = obj[a];\n delete obj[a];\n }\n };\n constraints = JSON.parse(JSON.stringify(constraints));\n remap(constraints.audio, 'autoGainControl', 'googAutoGainControl');\n remap(constraints.audio, 'noiseSuppression', 'googNoiseSuppression');\n constraints.audio = constraintsToChrome_(constraints.audio);\n }\n if (constraints && _typeof(constraints.video) === 'object') {\n // Shim facingMode for mobile & surface pro.\n var face = constraints.video.facingMode;\n face = face && (_typeof(face) === 'object' ? face : {\n ideal: face\n });\n var getSupportedFacingModeLies = browserDetails.version < 66;\n if (face && (face.exact === 'user' || face.exact === 'environment' || face.ideal === 'user' || face.ideal === 'environment') && !(navigator.mediaDevices.getSupportedConstraints && navigator.mediaDevices.getSupportedConstraints().facingMode && !getSupportedFacingModeLies)) {\n delete constraints.video.facingMode;\n var matches;\n if (face.exact === 'environment' || face.ideal === 'environment') {\n matches = ['back', 'rear'];\n } else if (face.exact === 'user' || face.ideal === 'user') {\n matches = ['front'];\n }\n if (matches) {\n // Look for matches in label, or use last cam for back (typical).\n return navigator.mediaDevices.enumerateDevices().then(function (devices) {\n devices = devices.filter(function (d) {\n return d.kind === 'videoinput';\n });\n var dev = devices.find(function (d) {\n return matches.some(function (match) {\n return d.label.toLowerCase().includes(match);\n });\n });\n if (!dev && devices.length && matches.includes('back')) {\n dev = devices[devices.length - 1]; // more likely the back cam\n }\n if (dev) {\n constraints.video.deviceId = face.exact ? {\n exact: dev.deviceId\n } : {\n ideal: dev.deviceId\n };\n }\n constraints.video = constraintsToChrome_(constraints.video);\n logging('chrome: ' + JSON.stringify(constraints));\n return func(constraints);\n });\n }\n }\n constraints.video = constraintsToChrome_(constraints.video);\n }\n logging('chrome: ' + JSON.stringify(constraints));\n return func(constraints);\n };\n var shimError_ = function shimError_(e) {\n if (browserDetails.version >= 64) {\n return e;\n }\n return {\n name: {\n PermissionDeniedError: 'NotAllowedError',\n PermissionDismissedError: 'NotAllowedError',\n InvalidStateError: 'NotAllowedError',\n DevicesNotFoundError: 'NotFoundError',\n ConstraintNotSatisfiedError: 'OverconstrainedError',\n TrackStartError: 'NotReadableError',\n MediaDeviceFailedDueToShutdown: 'NotAllowedError',\n MediaDeviceKillSwitchOn: 'NotAllowedError',\n TabCaptureError: 'AbortError',\n ScreenCaptureError: 'AbortError',\n DeviceCaptureError: 'AbortError'\n }[e.name] || e.name,\n message: e.message,\n constraint: e.constraint || e.constraintName,\n toString: function toString() {\n return this.name + (this.message && ': ') + this.message;\n }\n };\n };\n var getUserMedia_ = function getUserMedia_(constraints, onSuccess, onError) {\n shimConstraints_(constraints, function (c) {\n navigator.webkitGetUserMedia(c, onSuccess, function (e) {\n if (onError) {\n onError(shimError_(e));\n }\n });\n });\n };\n navigator.getUserMedia = getUserMedia_.bind(navigator);\n\n // Even though Chrome 45 has navigator.mediaDevices and a getUserMedia\n // function which returns a Promise, it does not accept spec-style\n // constraints.\n if (navigator.mediaDevices.getUserMedia) {\n var origGetUserMedia = navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);\n navigator.mediaDevices.getUserMedia = function (cs) {\n return shimConstraints_(cs, function (c) {\n return origGetUserMedia(c).then(function (stream) {\n if (c.audio && !stream.getAudioTracks().length || c.video && !stream.getVideoTracks().length) {\n stream.getTracks().forEach(function (track) {\n track.stop();\n });\n throw new DOMException('', 'NotFoundError');\n }\n return stream;\n }, function (e) {\n return Promise.reject(shimError_(e));\n });\n });\n };\n }\n}\n", "/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.fixNegotiationNeeded = fixNegotiationNeeded;\nexports.shimAddTrackRemoveTrack = shimAddTrackRemoveTrack;\nexports.shimAddTrackRemoveTrackWithNative = shimAddTrackRemoveTrackWithNative;\nexports.shimGetSendersWithDtmf = shimGetSendersWithDtmf;\nObject.defineProperty(exports, \"shimGetUserMedia\", {\n enumerable: true,\n get: function get() {\n return _getusermedia.shimGetUserMedia;\n }\n});\nexports.shimMediaStream = shimMediaStream;\nexports.shimOnTrack = shimOnTrack;\nexports.shimPeerConnection = shimPeerConnection;\nexports.shimSenderReceiverGetStats = shimSenderReceiverGetStats;\nvar utils = _interopRequireWildcard(require(\"../utils.js\"));\nvar _getusermedia = require(\"./getusermedia\");\nfunction _interopRequireWildcard(e, t) { if (\"function\" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, \"default\": e }; if (null === e || \"object\" != _typeof(e) && \"function\" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) \"default\" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction shimMediaStream(window) {\n window.MediaStream = window.MediaStream || window.webkitMediaStream;\n}\nfunction shimOnTrack(window) {\n if (_typeof(window) === 'object' && window.RTCPeerConnection && !('ontrack' in window.RTCPeerConnection.prototype)) {\n Object.defineProperty(window.RTCPeerConnection.prototype, 'ontrack', {\n get: function get() {\n return this._ontrack;\n },\n set: function set(f) {\n if (this._ontrack) {\n this.removeEventListener('track', this._ontrack);\n }\n this.addEventListener('track', this._ontrack = f);\n },\n enumerable: true,\n configurable: true\n });\n var origSetRemoteDescription = window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription() {\n var _this = this;\n if (!this._ontrackpoly) {\n this._ontrackpoly = function (e) {\n // onaddstream does not fire when a track is added to an existing\n // stream. But stream.onaddtrack is implemented so we use that.\n e.stream.addEventListener('addtrack', function (te) {\n var receiver;\n if (window.RTCPeerConnection.prototype.getReceivers) {\n receiver = _this.getReceivers().find(function (r) {\n return r.track && r.track.id === te.track.id;\n });\n } else {\n receiver = {\n track: te.track\n };\n }\n var event = new Event('track');\n event.track = te.track;\n event.receiver = receiver;\n event.transceiver = {\n receiver: receiver\n };\n event.streams = [e.stream];\n _this.dispatchEvent(event);\n });\n e.stream.getTracks().forEach(function (track) {\n var receiver;\n if (window.RTCPeerConnection.prototype.getReceivers) {\n receiver = _this.getReceivers().find(function (r) {\n return r.track && r.track.id === track.id;\n });\n } else {\n receiver = {\n track: track\n };\n }\n var event = new Event('track');\n event.track = track;\n event.receiver = receiver;\n event.transceiver = {\n receiver: receiver\n };\n event.streams = [e.stream];\n _this.dispatchEvent(event);\n });\n };\n this.addEventListener('addstream', this._ontrackpoly);\n }\n return origSetRemoteDescription.apply(this, arguments);\n };\n } else {\n // even if RTCRtpTransceiver is in window, it is only used and\n // emitted in unified-plan. Unfortunately this means we need\n // to unconditionally wrap the event.\n utils.wrapPeerConnectionEvent(window, 'track', function (e) {\n if (!e.transceiver) {\n Object.defineProperty(e, 'transceiver', {\n value: {\n receiver: e.receiver\n }\n });\n }\n return e;\n });\n }\n}\nfunction shimGetSendersWithDtmf(window) {\n // Overrides addTrack/removeTrack, depends on shimAddTrackRemoveTrack.\n if (_typeof(window) === 'object' && window.RTCPeerConnection && !('getSenders' in window.RTCPeerConnection.prototype) && 'createDTMFSender' in window.RTCPeerConnection.prototype) {\n var shimSenderWithDtmf = function shimSenderWithDtmf(pc, track) {\n return {\n track: track,\n get dtmf() {\n if (this._dtmf === undefined) {\n if (track.kind === 'audio') {\n this._dtmf = pc.createDTMFSender(track);\n } else {\n this._dtmf = null;\n }\n }\n return this._dtmf;\n },\n _pc: pc\n };\n };\n\n // augment addTrack when getSenders is not available.\n if (!window.RTCPeerConnection.prototype.getSenders) {\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n this._senders = this._senders || [];\n return this._senders.slice(); // return a copy of the internal state.\n };\n var origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n window.RTCPeerConnection.prototype.addTrack = function addTrack(track, stream) {\n var sender = origAddTrack.apply(this, arguments);\n if (!sender) {\n sender = shimSenderWithDtmf(this, track);\n this._senders.push(sender);\n }\n return sender;\n };\n var origRemoveTrack = window.RTCPeerConnection.prototype.removeTrack;\n window.RTCPeerConnection.prototype.removeTrack = function removeTrack(sender) {\n origRemoveTrack.apply(this, arguments);\n var idx = this._senders.indexOf(sender);\n if (idx !== -1) {\n this._senders.splice(idx, 1);\n }\n };\n }\n var origAddStream = window.RTCPeerConnection.prototype.addStream;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n var _this2 = this;\n this._senders = this._senders || [];\n origAddStream.apply(this, [stream]);\n stream.getTracks().forEach(function (track) {\n _this2._senders.push(shimSenderWithDtmf(_this2, track));\n });\n };\n var origRemoveStream = window.RTCPeerConnection.prototype.removeStream;\n window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) {\n var _this3 = this;\n this._senders = this._senders || [];\n origRemoveStream.apply(this, [stream]);\n stream.getTracks().forEach(function (track) {\n var sender = _this3._senders.find(function (s) {\n return s.track === track;\n });\n if (sender) {\n // remove sender\n _this3._senders.splice(_this3._senders.indexOf(sender), 1);\n }\n });\n };\n } else if (_typeof(window) === 'object' && window.RTCPeerConnection && 'getSenders' in window.RTCPeerConnection.prototype && 'createDTMFSender' in window.RTCPeerConnection.prototype && window.RTCRtpSender && !('dtmf' in window.RTCRtpSender.prototype)) {\n var origGetSenders = window.RTCPeerConnection.prototype.getSenders;\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n var _this4 = this;\n var senders = origGetSenders.apply(this, []);\n senders.forEach(function (sender) {\n return sender._pc = _this4;\n });\n return senders;\n };\n Object.defineProperty(window.RTCRtpSender.prototype, 'dtmf', {\n get: function get() {\n if (this._dtmf === undefined) {\n if (this.track.kind === 'audio') {\n this._dtmf = this._pc.createDTMFSender(this.track);\n } else {\n this._dtmf = null;\n }\n }\n return this._dtmf;\n }\n });\n }\n}\nfunction shimSenderReceiverGetStats(window) {\n if (!(_typeof(window) === 'object' && window.RTCPeerConnection && window.RTCRtpSender && window.RTCRtpReceiver)) {\n return;\n }\n\n // shim sender stats.\n if (!('getStats' in window.RTCRtpSender.prototype)) {\n var origGetSenders = window.RTCPeerConnection.prototype.getSenders;\n if (origGetSenders) {\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n var _this5 = this;\n var senders = origGetSenders.apply(this, []);\n senders.forEach(function (sender) {\n return sender._pc = _this5;\n });\n return senders;\n };\n }\n var origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n if (origAddTrack) {\n window.RTCPeerConnection.prototype.addTrack = function addTrack() {\n var sender = origAddTrack.apply(this, arguments);\n sender._pc = this;\n return sender;\n };\n }\n window.RTCRtpSender.prototype.getStats = function getStats() {\n var sender = this;\n return this._pc.getStats().then(function (result) {\n return (\n /* Note: this will include stats of all senders that\n * send a track with the same id as sender.track as\n * it is not possible to identify the RTCRtpSender.\n */\n utils.filterStats(result, sender.track, true)\n );\n });\n };\n }\n\n // shim receiver stats.\n if (!('getStats' in window.RTCRtpReceiver.prototype)) {\n var origGetReceivers = window.RTCPeerConnection.prototype.getReceivers;\n if (origGetReceivers) {\n window.RTCPeerConnection.prototype.getReceivers = function getReceivers() {\n var _this6 = this;\n var receivers = origGetReceivers.apply(this, []);\n receivers.forEach(function (receiver) {\n return receiver._pc = _this6;\n });\n return receivers;\n };\n }\n utils.wrapPeerConnectionEvent(window, 'track', function (e) {\n e.receiver._pc = e.srcElement;\n return e;\n });\n window.RTCRtpReceiver.prototype.getStats = function getStats() {\n var receiver = this;\n return this._pc.getStats().then(function (result) {\n return utils.filterStats(result, receiver.track, false);\n });\n };\n }\n if (!('getStats' in window.RTCRtpSender.prototype && 'getStats' in window.RTCRtpReceiver.prototype)) {\n return;\n }\n\n // shim RTCPeerConnection.getStats(track).\n var origGetStats = window.RTCPeerConnection.prototype.getStats;\n window.RTCPeerConnection.prototype.getStats = function getStats() {\n if (arguments.length > 0 && arguments[0] instanceof window.MediaStreamTrack) {\n var track = arguments[0];\n var sender;\n var receiver;\n var err;\n this.getSenders().forEach(function (s) {\n if (s.track === track) {\n if (sender) {\n err = true;\n } else {\n sender = s;\n }\n }\n });\n this.getReceivers().forEach(function (r) {\n if (r.track === track) {\n if (receiver) {\n err = true;\n } else {\n receiver = r;\n }\n }\n return r.track === track;\n });\n if (err || sender && receiver) {\n return Promise.reject(new DOMException('There are more than one sender or receiver for the track.', 'InvalidAccessError'));\n } else if (sender) {\n return sender.getStats();\n } else if (receiver) {\n return receiver.getStats();\n }\n return Promise.reject(new DOMException('There is no sender or receiver for the track.', 'InvalidAccessError'));\n }\n return origGetStats.apply(this, arguments);\n };\n}\nfunction shimAddTrackRemoveTrackWithNative(window) {\n // shim addTrack/removeTrack with native variants in order to make\n // the interactions with legacy getLocalStreams behave as in other browsers.\n // Keeps a mapping stream.id => [stream, rtpsenders...]\n window.RTCPeerConnection.prototype.getLocalStreams = function getLocalStreams() {\n var _this7 = this;\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n return Object.keys(this._shimmedLocalStreams).map(function (streamId) {\n return _this7._shimmedLocalStreams[streamId][0];\n });\n };\n var origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n window.RTCPeerConnection.prototype.addTrack = function addTrack(track, stream) {\n if (!stream) {\n return origAddTrack.apply(this, arguments);\n }\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n var sender = origAddTrack.apply(this, arguments);\n if (!this._shimmedLocalStreams[stream.id]) {\n this._shimmedLocalStreams[stream.id] = [stream, sender];\n } else if (this._shimmedLocalStreams[stream.id].indexOf(sender) === -1) {\n this._shimmedLocalStreams[stream.id].push(sender);\n }\n return sender;\n };\n var origAddStream = window.RTCPeerConnection.prototype.addStream;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n var _this8 = this;\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n stream.getTracks().forEach(function (track) {\n var alreadyExists = _this8.getSenders().find(function (s) {\n return s.track === track;\n });\n if (alreadyExists) {\n throw new DOMException('Track already exists.', 'InvalidAccessError');\n }\n });\n var existingSenders = this.getSenders();\n origAddStream.apply(this, arguments);\n var newSenders = this.getSenders().filter(function (newSender) {\n return existingSenders.indexOf(newSender) === -1;\n });\n this._shimmedLocalStreams[stream.id] = [stream].concat(newSenders);\n };\n var origRemoveStream = window.RTCPeerConnection.prototype.removeStream;\n window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) {\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n delete this._shimmedLocalStreams[stream.id];\n return origRemoveStream.apply(this, arguments);\n };\n var origRemoveTrack = window.RTCPeerConnection.prototype.removeTrack;\n window.RTCPeerConnection.prototype.removeTrack = function removeTrack(sender) {\n var _this9 = this;\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n if (sender) {\n Object.keys(this._shimmedLocalStreams).forEach(function (streamId) {\n var idx = _this9._shimmedLocalStreams[streamId].indexOf(sender);\n if (idx !== -1) {\n _this9._shimmedLocalStreams[streamId].splice(idx, 1);\n }\n if (_this9._shimmedLocalStreams[streamId].length === 1) {\n delete _this9._shimmedLocalStreams[streamId];\n }\n });\n }\n return origRemoveTrack.apply(this, arguments);\n };\n}\nfunction shimAddTrackRemoveTrack(window, browserDetails) {\n if (!window.RTCPeerConnection) {\n return;\n }\n // shim addTrack and removeTrack.\n if (window.RTCPeerConnection.prototype.addTrack && browserDetails.version >= 65) {\n return shimAddTrackRemoveTrackWithNative(window);\n }\n\n // also shim pc.getLocalStreams when addTrack is shimmed\n // to return the original streams.\n var origGetLocalStreams = window.RTCPeerConnection.prototype.getLocalStreams;\n window.RTCPeerConnection.prototype.getLocalStreams = function getLocalStreams() {\n var _this0 = this;\n var nativeStreams = origGetLocalStreams.apply(this);\n this._reverseStreams = this._reverseStreams || {};\n return nativeStreams.map(function (stream) {\n return _this0._reverseStreams[stream.id];\n });\n };\n var origAddStream = window.RTCPeerConnection.prototype.addStream;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n var _this1 = this;\n this._streams = this._streams || {};\n this._reverseStreams = this._reverseStreams || {};\n stream.getTracks().forEach(function (track) {\n var alreadyExists = _this1.getSenders().find(function (s) {\n return s.track === track;\n });\n if (alreadyExists) {\n throw new DOMException('Track already exists.', 'InvalidAccessError');\n }\n });\n // Add identity mapping for consistency with addTrack.\n // Unless this is being used with a stream from addTrack.\n if (!this._reverseStreams[stream.id]) {\n var newStream = new window.MediaStream(stream.getTracks());\n this._streams[stream.id] = newStream;\n this._reverseStreams[newStream.id] = stream;\n stream = newStream;\n }\n origAddStream.apply(this, [stream]);\n };\n var origRemoveStream = window.RTCPeerConnection.prototype.removeStream;\n window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) {\n this._streams = this._streams || {};\n this._reverseStreams = this._reverseStreams || {};\n origRemoveStream.apply(this, [this._streams[stream.id] || stream]);\n delete this._reverseStreams[this._streams[stream.id] ? this._streams[stream.id].id : stream.id];\n delete this._streams[stream.id];\n };\n window.RTCPeerConnection.prototype.addTrack = function addTrack(track, stream) {\n var _this10 = this;\n if (this.signalingState === 'closed') {\n throw new DOMException('The RTCPeerConnection\\'s signalingState is \\'closed\\'.', 'InvalidStateError');\n }\n var streams = [].slice.call(arguments, 1);\n if (streams.length !== 1 || !streams[0].getTracks().find(function (t) {\n return t === track;\n })) {\n // this is not fully correct but all we can manage without\n // [[associated MediaStreams]] internal slot.\n throw new DOMException('The adapter.js addTrack polyfill only supports a single ' + ' stream which is associated with the specified track.', 'NotSupportedError');\n }\n var alreadyExists = this.getSenders().find(function (s) {\n return s.track === track;\n });\n if (alreadyExists) {\n throw new DOMException('Track already exists.', 'InvalidAccessError');\n }\n this._streams = this._streams || {};\n this._reverseStreams = this._reverseStreams || {};\n var oldStream = this._streams[stream.id];\n if (oldStream) {\n // this is using odd Chrome behaviour, use with caution:\n // https://bugs.chromium.org/p/webrtc/issues/detail?id=7815\n // Note: we rely on the high-level addTrack/dtmf shim to\n // create the sender with a dtmf sender.\n oldStream.addTrack(track);\n\n // Trigger ONN async.\n Promise.resolve().then(function () {\n _this10.dispatchEvent(new Event('negotiationneeded'));\n });\n } else {\n var newStream = new window.MediaStream([track]);\n this._streams[stream.id] = newStream;\n this._reverseStreams[newStream.id] = stream;\n this.addStream(newStream);\n }\n return this.getSenders().find(function (s) {\n return s.track === track;\n });\n };\n\n // replace the internal stream id with the external one and\n // vice versa.\n function replaceInternalStreamId(pc, description) {\n var sdp = description.sdp;\n Object.keys(pc._reverseStreams || []).forEach(function (internalId) {\n var externalStream = pc._reverseStreams[internalId];\n var internalStream = pc._streams[externalStream.id];\n sdp = sdp.replace(new RegExp(internalStream.id, 'g'), externalStream.id);\n });\n return new RTCSessionDescription({\n type: description.type,\n sdp: sdp\n });\n }\n function replaceExternalStreamId(pc, description) {\n var sdp = description.sdp;\n Object.keys(pc._reverseStreams || []).forEach(function (internalId) {\n var externalStream = pc._reverseStreams[internalId];\n var internalStream = pc._streams[externalStream.id];\n sdp = sdp.replace(new RegExp(externalStream.id, 'g'), internalStream.id);\n });\n return new RTCSessionDescription({\n type: description.type,\n sdp: sdp\n });\n }\n ['createOffer', 'createAnswer'].forEach(function (method) {\n var nativeMethod = window.RTCPeerConnection.prototype[method];\n var methodObj = _defineProperty({}, method, function () {\n var _this11 = this;\n var args = arguments;\n var isLegacyCall = arguments.length && typeof arguments[0] === 'function';\n if (isLegacyCall) {\n return nativeMethod.apply(this, [function (description) {\n var desc = replaceInternalStreamId(_this11, description);\n args[0].apply(null, [desc]);\n }, function (err) {\n if (args[1]) {\n args[1].apply(null, err);\n }\n }, arguments[2]]);\n }\n return nativeMethod.apply(this, arguments).then(function (description) {\n return replaceInternalStreamId(_this11, description);\n });\n });\n window.RTCPeerConnection.prototype[method] = methodObj[method];\n });\n var origSetLocalDescription = window.RTCPeerConnection.prototype.setLocalDescription;\n window.RTCPeerConnection.prototype.setLocalDescription = function setLocalDescription() {\n if (!arguments.length || !arguments[0].type) {\n return origSetLocalDescription.apply(this, arguments);\n }\n arguments[0] = replaceExternalStreamId(this, arguments[0]);\n return origSetLocalDescription.apply(this, arguments);\n };\n\n // TODO: mangle getStats: https://w3c.github.io/webrtc-stats/#dom-rtcmediastreamstats-streamidentifier\n\n var origLocalDescription = Object.getOwnPropertyDescriptor(window.RTCPeerConnection.prototype, 'localDescription');\n Object.defineProperty(window.RTCPeerConnection.prototype, 'localDescription', {\n get: function get() {\n var description = origLocalDescription.get.apply(this);\n if (description.type === '') {\n return description;\n }\n return replaceInternalStreamId(this, description);\n }\n });\n window.RTCPeerConnection.prototype.removeTrack = function removeTrack(sender) {\n var _this12 = this;\n if (this.signalingState === 'closed') {\n throw new DOMException('The RTCPeerConnection\\'s signalingState is \\'closed\\'.', 'InvalidStateError');\n }\n // We can not yet check for sender instanceof RTCRtpSender\n // since we shim RTPSender. So we check if sender._pc is set.\n if (!sender._pc) {\n throw new DOMException('Argument 1 of RTCPeerConnection.removeTrack ' + 'does not implement interface RTCRtpSender.', 'TypeError');\n }\n var isLocal = sender._pc === this;\n if (!isLocal) {\n throw new DOMException('Sender was not created by this connection.', 'InvalidAccessError');\n }\n\n // Search for the native stream the senders track belongs to.\n this._streams = this._streams || {};\n var stream;\n Object.keys(this._streams).forEach(function (streamid) {\n var hasTrack = _this12._streams[streamid].getTracks().find(function (track) {\n return sender.track === track;\n });\n if (hasTrack) {\n stream = _this12._streams[streamid];\n }\n });\n if (stream) {\n if (stream.getTracks().length === 1) {\n // if this is the last track of the stream, remove the stream. This\n // takes care of any shimmed _senders.\n this.removeStream(this._reverseStreams[stream.id]);\n } else {\n // relying on the same odd chrome behaviour as above.\n stream.removeTrack(sender.track);\n }\n this.dispatchEvent(new Event('negotiationneeded'));\n }\n };\n}\nfunction shimPeerConnection(window, browserDetails) {\n if (!window.RTCPeerConnection && window.webkitRTCPeerConnection) {\n // very basic support for old versions.\n window.RTCPeerConnection = window.webkitRTCPeerConnection;\n }\n if (!window.RTCPeerConnection) {\n return;\n }\n\n // shim implicit creation of RTCSessionDescription/RTCIceCandidate\n if (browserDetails.version < 53) {\n ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate'].forEach(function (method) {\n var nativeMethod = window.RTCPeerConnection.prototype[method];\n var methodObj = _defineProperty({}, method, function () {\n arguments[0] = new (method === 'addIceCandidate' ? window.RTCIceCandidate : window.RTCSessionDescription)(arguments[0]);\n return nativeMethod.apply(this, arguments);\n });\n window.RTCPeerConnection.prototype[method] = methodObj[method];\n });\n }\n}\n\n// Attempt to fix ONN in plan-b mode.\nfunction fixNegotiationNeeded(window, browserDetails) {\n utils.wrapPeerConnectionEvent(window, 'negotiationneeded', function (e) {\n var pc = e.target;\n if (browserDetails.version < 72 || pc.getConfiguration && pc.getConfiguration().sdpSemantics === 'plan-b') {\n if (pc.signalingState !== 'stable') {\n return;\n }\n }\n return e;\n });\n}\n", "/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.shimGetUserMedia = shimGetUserMedia;\nvar utils = _interopRequireWildcard(require(\"../utils\"));\nfunction _interopRequireWildcard(e, t) { if (\"function\" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, \"default\": e }; if (null === e || \"object\" != _typeof(e) && \"function\" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) \"default\" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction shimGetUserMedia(window, browserDetails) {\n var navigator = window && window.navigator;\n var MediaStreamTrack = window && window.MediaStreamTrack;\n navigator.getUserMedia = function (constraints, onSuccess, onError) {\n // Replace Firefox 44+'s deprecation warning with unprefixed version.\n utils.deprecated('navigator.getUserMedia', 'navigator.mediaDevices.getUserMedia');\n navigator.mediaDevices.getUserMedia(constraints).then(onSuccess, onError);\n };\n if (!(browserDetails.version > 55 && 'autoGainControl' in navigator.mediaDevices.getSupportedConstraints())) {\n var remap = function remap(obj, a, b) {\n if (a in obj && !(b in obj)) {\n obj[b] = obj[a];\n delete obj[a];\n }\n };\n var nativeGetUserMedia = navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);\n navigator.mediaDevices.getUserMedia = function (c) {\n if (_typeof(c) === 'object' && _typeof(c.audio) === 'object') {\n c = JSON.parse(JSON.stringify(c));\n remap(c.audio, 'autoGainControl', 'mozAutoGainControl');\n remap(c.audio, 'noiseSuppression', 'mozNoiseSuppression');\n }\n return nativeGetUserMedia(c);\n };\n if (MediaStreamTrack && MediaStreamTrack.prototype.getSettings) {\n var nativeGetSettings = MediaStreamTrack.prototype.getSettings;\n MediaStreamTrack.prototype.getSettings = function () {\n var obj = nativeGetSettings.apply(this, arguments);\n remap(obj, 'mozAutoGainControl', 'autoGainControl');\n remap(obj, 'mozNoiseSuppression', 'noiseSuppression');\n return obj;\n };\n }\n if (MediaStreamTrack && MediaStreamTrack.prototype.applyConstraints) {\n var nativeApplyConstraints = MediaStreamTrack.prototype.applyConstraints;\n MediaStreamTrack.prototype.applyConstraints = function (c) {\n if (this.kind === 'audio' && _typeof(c) === 'object') {\n c = JSON.parse(JSON.stringify(c));\n remap(c, 'autoGainControl', 'mozAutoGainControl');\n remap(c, 'noiseSuppression', 'mozNoiseSuppression');\n }\n return nativeApplyConstraints.apply(this, [c]);\n };\n }\n }\n}\n", "/*\n * Copyright (c) 2018 The adapter.js project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.shimGetDisplayMedia = shimGetDisplayMedia;\nfunction shimGetDisplayMedia(window, preferredMediaSource) {\n if (window.navigator.mediaDevices && 'getDisplayMedia' in window.navigator.mediaDevices) {\n return;\n }\n if (!window.navigator.mediaDevices) {\n return;\n }\n window.navigator.mediaDevices.getDisplayMedia = function getDisplayMedia(constraints) {\n if (!(constraints && constraints.video)) {\n var err = new DOMException('getDisplayMedia without video ' + 'constraints is undefined');\n err.name = 'NotFoundError';\n // from https://heycam.github.io/webidl/#idl-DOMException-error-names\n err.code = 8;\n return Promise.reject(err);\n }\n if (constraints.video === true) {\n constraints.video = {\n mediaSource: preferredMediaSource\n };\n } else {\n constraints.video.mediaSource = preferredMediaSource;\n }\n return window.navigator.mediaDevices.getUserMedia(constraints);\n };\n}\n", "/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.shimAddTransceiver = shimAddTransceiver;\nexports.shimCreateAnswer = shimCreateAnswer;\nexports.shimCreateOffer = shimCreateOffer;\nObject.defineProperty(exports, \"shimGetDisplayMedia\", {\n enumerable: true,\n get: function get() {\n return _getdisplaymedia.shimGetDisplayMedia;\n }\n});\nexports.shimGetParameters = shimGetParameters;\nObject.defineProperty(exports, \"shimGetUserMedia\", {\n enumerable: true,\n get: function get() {\n return _getusermedia.shimGetUserMedia;\n }\n});\nexports.shimOnTrack = shimOnTrack;\nexports.shimPeerConnection = shimPeerConnection;\nexports.shimRTCDataChannel = shimRTCDataChannel;\nexports.shimReceiverGetStats = shimReceiverGetStats;\nexports.shimRemoveStream = shimRemoveStream;\nexports.shimSenderGetStats = shimSenderGetStats;\nvar utils = _interopRequireWildcard(require(\"../utils\"));\nvar _getusermedia = require(\"./getusermedia\");\nvar _getdisplaymedia = require(\"./getdisplaymedia\");\nfunction _interopRequireWildcard(e, t) { if (\"function\" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, \"default\": e }; if (null === e || \"object\" != _typeof(e) && \"function\" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) \"default\" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }\nfunction _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _iterableToArray(r) { if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r); }\nfunction _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction shimOnTrack(window) {\n if (_typeof(window) === 'object' && window.RTCTrackEvent && 'receiver' in window.RTCTrackEvent.prototype && !('transceiver' in window.RTCTrackEvent.prototype)) {\n Object.defineProperty(window.RTCTrackEvent.prototype, 'transceiver', {\n get: function get() {\n return {\n receiver: this.receiver\n };\n }\n });\n }\n}\nfunction shimPeerConnection(window, browserDetails) {\n if (_typeof(window) !== 'object' || !(window.RTCPeerConnection || window.mozRTCPeerConnection)) {\n return; // probably media.peerconnection.enabled=false in about:config\n }\n if (!window.RTCPeerConnection && window.mozRTCPeerConnection) {\n // very basic support for old versions.\n window.RTCPeerConnection = window.mozRTCPeerConnection;\n }\n if (browserDetails.version < 53) {\n // shim away need for obsolete RTCIceCandidate/RTCSessionDescription.\n ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate'].forEach(function (method) {\n var nativeMethod = window.RTCPeerConnection.prototype[method];\n var methodObj = _defineProperty({}, method, function () {\n arguments[0] = new (method === 'addIceCandidate' ? window.RTCIceCandidate : window.RTCSessionDescription)(arguments[0]);\n return nativeMethod.apply(this, arguments);\n });\n window.RTCPeerConnection.prototype[method] = methodObj[method];\n });\n }\n var modernStatsTypes = {\n inboundrtp: 'inbound-rtp',\n outboundrtp: 'outbound-rtp',\n candidatepair: 'candidate-pair',\n localcandidate: 'local-candidate',\n remotecandidate: 'remote-candidate'\n };\n var nativeGetStats = window.RTCPeerConnection.prototype.getStats;\n window.RTCPeerConnection.prototype.getStats = function getStats() {\n var _arguments = Array.prototype.slice.call(arguments),\n selector = _arguments[0],\n onSucc = _arguments[1],\n onErr = _arguments[2];\n return nativeGetStats.apply(this, [selector || null]).then(function (stats) {\n if (browserDetails.version < 53 && !onSucc) {\n // Shim only promise getStats with spec-hyphens in type names\n // Leave callback version alone; misc old uses of forEach before Map\n try {\n stats.forEach(function (stat) {\n stat.type = modernStatsTypes[stat.type] || stat.type;\n });\n } catch (e) {\n if (e.name !== 'TypeError') {\n throw e;\n }\n // Avoid TypeError: \"type\" is read-only, in old versions. 34-43ish\n stats.forEach(function (stat, i) {\n stats.set(i, Object.assign({}, stat, {\n type: modernStatsTypes[stat.type] || stat.type\n }));\n });\n }\n }\n return stats;\n }).then(onSucc, onErr);\n };\n}\nfunction shimSenderGetStats(window) {\n if (!(_typeof(window) === 'object' && window.RTCPeerConnection && window.RTCRtpSender)) {\n return;\n }\n if (window.RTCRtpSender && 'getStats' in window.RTCRtpSender.prototype) {\n return;\n }\n var origGetSenders = window.RTCPeerConnection.prototype.getSenders;\n if (origGetSenders) {\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n var _this = this;\n var senders = origGetSenders.apply(this, []);\n senders.forEach(function (sender) {\n return sender._pc = _this;\n });\n return senders;\n };\n }\n var origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n if (origAddTrack) {\n window.RTCPeerConnection.prototype.addTrack = function addTrack() {\n var sender = origAddTrack.apply(this, arguments);\n sender._pc = this;\n return sender;\n };\n }\n window.RTCRtpSender.prototype.getStats = function getStats() {\n return this.track ? this._pc.getStats(this.track) : Promise.resolve(new Map());\n };\n}\nfunction shimReceiverGetStats(window) {\n if (!(_typeof(window) === 'object' && window.RTCPeerConnection && window.RTCRtpSender)) {\n return;\n }\n if (window.RTCRtpSender && 'getStats' in window.RTCRtpReceiver.prototype) {\n return;\n }\n var origGetReceivers = window.RTCPeerConnection.prototype.getReceivers;\n if (origGetReceivers) {\n window.RTCPeerConnection.prototype.getReceivers = function getReceivers() {\n var _this2 = this;\n var receivers = origGetReceivers.apply(this, []);\n receivers.forEach(function (receiver) {\n return receiver._pc = _this2;\n });\n return receivers;\n };\n }\n utils.wrapPeerConnectionEvent(window, 'track', function (e) {\n e.receiver._pc = e.srcElement;\n return e;\n });\n window.RTCRtpReceiver.prototype.getStats = function getStats() {\n return this._pc.getStats(this.track);\n };\n}\nfunction shimRemoveStream(window) {\n if (!window.RTCPeerConnection || 'removeStream' in window.RTCPeerConnection.prototype) {\n return;\n }\n window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) {\n var _this3 = this;\n utils.deprecated('removeStream', 'removeTrack');\n this.getSenders().forEach(function (sender) {\n if (sender.track && stream.getTracks().includes(sender.track)) {\n _this3.removeTrack(sender);\n }\n });\n };\n}\nfunction shimRTCDataChannel(window) {\n // rename DataChannel to RTCDataChannel (native fix in FF60):\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1173851\n if (window.DataChannel && !window.RTCDataChannel) {\n window.RTCDataChannel = window.DataChannel;\n }\n}\nfunction shimAddTransceiver(window) {\n // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647\n // Firefox ignores the init sendEncodings options passed to addTransceiver\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918\n if (!(_typeof(window) === 'object' && window.RTCPeerConnection)) {\n return;\n }\n var origAddTransceiver = window.RTCPeerConnection.prototype.addTransceiver;\n if (origAddTransceiver) {\n window.RTCPeerConnection.prototype.addTransceiver = function addTransceiver() {\n this.setParametersPromises = [];\n // WebIDL input coercion and validation\n var sendEncodings = arguments[1] && arguments[1].sendEncodings;\n if (sendEncodings === undefined) {\n sendEncodings = [];\n }\n sendEncodings = _toConsumableArray(sendEncodings);\n var shouldPerformCheck = sendEncodings.length > 0;\n if (shouldPerformCheck) {\n // If sendEncodings params are provided, validate grammar\n sendEncodings.forEach(function (encodingParam) {\n if ('rid' in encodingParam) {\n var ridRegex = /^[a-z0-9]{0,16}$/i;\n if (!ridRegex.test(encodingParam.rid)) {\n throw new TypeError('Invalid RID value provided.');\n }\n }\n if ('scaleResolutionDownBy' in encodingParam) {\n if (!(parseFloat(encodingParam.scaleResolutionDownBy) >= 1.0)) {\n throw new RangeError('scale_resolution_down_by must be >= 1.0');\n }\n }\n if ('maxFramerate' in encodingParam) {\n if (!(parseFloat(encodingParam.maxFramerate) >= 0)) {\n throw new RangeError('max_framerate must be >= 0.0');\n }\n }\n });\n }\n var transceiver = origAddTransceiver.apply(this, arguments);\n if (shouldPerformCheck) {\n // Check if the init options were applied. If not we do this in an\n // asynchronous way and save the promise reference in a global object.\n // This is an ugly hack, but at the same time is way more robust than\n // checking the sender parameters before and after the createOffer\n // Also note that after the createoffer we are not 100% sure that\n // the params were asynchronously applied so we might miss the\n // opportunity to recreate offer.\n var sender = transceiver.sender;\n var params = sender.getParameters();\n if (!('encodings' in params) ||\n // Avoid being fooled by patched getParameters() below.\n params.encodings.length === 1 && Object.keys(params.encodings[0]).length === 0) {\n params.encodings = sendEncodings;\n sender.sendEncodings = sendEncodings;\n this.setParametersPromises.push(sender.setParameters(params).then(function () {\n delete sender.sendEncodings;\n })[\"catch\"](function () {\n delete sender.sendEncodings;\n }));\n }\n }\n return transceiver;\n };\n }\n}\nfunction shimGetParameters(window) {\n if (!(_typeof(window) === 'object' && window.RTCRtpSender)) {\n return;\n }\n var origGetParameters = window.RTCRtpSender.prototype.getParameters;\n if (origGetParameters) {\n window.RTCRtpSender.prototype.getParameters = function getParameters() {\n var params = origGetParameters.apply(this, arguments);\n if (!('encodings' in params)) {\n params.encodings = [].concat(this.sendEncodings || [{}]);\n }\n return params;\n };\n }\n}\nfunction shimCreateOffer(window) {\n // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647\n // Firefox ignores the init sendEncodings options passed to addTransceiver\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918\n if (!(_typeof(window) === 'object' && window.RTCPeerConnection)) {\n return;\n }\n var origCreateOffer = window.RTCPeerConnection.prototype.createOffer;\n window.RTCPeerConnection.prototype.createOffer = function createOffer() {\n var _arguments2 = arguments,\n _this4 = this;\n if (this.setParametersPromises && this.setParametersPromises.length) {\n return Promise.all(this.setParametersPromises).then(function () {\n return origCreateOffer.apply(_this4, _arguments2);\n })[\"finally\"](function () {\n _this4.setParametersPromises = [];\n });\n }\n return origCreateOffer.apply(this, arguments);\n };\n}\nfunction shimCreateAnswer(window) {\n // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647\n // Firefox ignores the init sendEncodings options passed to addTransceiver\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918\n if (!(_typeof(window) === 'object' && window.RTCPeerConnection)) {\n return;\n }\n var origCreateAnswer = window.RTCPeerConnection.prototype.createAnswer;\n window.RTCPeerConnection.prototype.createAnswer = function createAnswer() {\n var _arguments3 = arguments,\n _this5 = this;\n if (this.setParametersPromises && this.setParametersPromises.length) {\n return Promise.all(this.setParametersPromises).then(function () {\n return origCreateAnswer.apply(_this5, _arguments3);\n })[\"finally\"](function () {\n _this5.setParametersPromises = [];\n });\n }\n return origCreateAnswer.apply(this, arguments);\n };\n}\n", "/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.shimAudioContext = shimAudioContext;\nexports.shimCallbacksAPI = shimCallbacksAPI;\nexports.shimConstraints = shimConstraints;\nexports.shimCreateOfferLegacy = shimCreateOfferLegacy;\nexports.shimGetUserMedia = shimGetUserMedia;\nexports.shimLocalStreamsAPI = shimLocalStreamsAPI;\nexports.shimRTCIceServerUrls = shimRTCIceServerUrls;\nexports.shimRemoteStreamsAPI = shimRemoteStreamsAPI;\nexports.shimTrackEventTransceiver = shimTrackEventTransceiver;\nvar utils = _interopRequireWildcard(require(\"../utils\"));\nfunction _interopRequireWildcard(e, t) { if (\"function\" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, \"default\": e }; if (null === e || \"object\" != _typeof(e) && \"function\" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) \"default\" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction shimLocalStreamsAPI(window) {\n if (_typeof(window) !== 'object' || !window.RTCPeerConnection) {\n return;\n }\n if (!('getLocalStreams' in window.RTCPeerConnection.prototype)) {\n window.RTCPeerConnection.prototype.getLocalStreams = function getLocalStreams() {\n if (!this._localStreams) {\n this._localStreams = [];\n }\n return this._localStreams;\n };\n }\n if (!('addStream' in window.RTCPeerConnection.prototype)) {\n var _addTrack = window.RTCPeerConnection.prototype.addTrack;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n var _this = this;\n if (!this._localStreams) {\n this._localStreams = [];\n }\n if (!this._localStreams.includes(stream)) {\n this._localStreams.push(stream);\n }\n // Try to emulate Chrome's behaviour of adding in audio-video order.\n // Safari orders by track id.\n stream.getAudioTracks().forEach(function (track) {\n return _addTrack.call(_this, track, stream);\n });\n stream.getVideoTracks().forEach(function (track) {\n return _addTrack.call(_this, track, stream);\n });\n };\n window.RTCPeerConnection.prototype.addTrack = function addTrack(track) {\n var _this2 = this;\n for (var _len = arguments.length, streams = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n streams[_key - 1] = arguments[_key];\n }\n if (streams) {\n streams.forEach(function (stream) {\n if (!_this2._localStreams) {\n _this2._localStreams = [stream];\n } else if (!_this2._localStreams.includes(stream)) {\n _this2._localStreams.push(stream);\n }\n });\n }\n return _addTrack.apply(this, arguments);\n };\n }\n if (!('removeStream' in window.RTCPeerConnection.prototype)) {\n window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) {\n var _this3 = this;\n if (!this._localStreams) {\n this._localStreams = [];\n }\n var index = this._localStreams.indexOf(stream);\n if (index === -1) {\n return;\n }\n this._localStreams.splice(index, 1);\n var tracks = stream.getTracks();\n this.getSenders().forEach(function (sender) {\n if (tracks.includes(sender.track)) {\n _this3.removeTrack(sender);\n }\n });\n };\n }\n}\nfunction shimRemoteStreamsAPI(window) {\n if (_typeof(window) !== 'object' || !window.RTCPeerConnection) {\n return;\n }\n if (!('getRemoteStreams' in window.RTCPeerConnection.prototype)) {\n window.RTCPeerConnection.prototype.getRemoteStreams = function getRemoteStreams() {\n return this._remoteStreams ? this._remoteStreams : [];\n };\n }\n if (!('onaddstream' in window.RTCPeerConnection.prototype)) {\n Object.defineProperty(window.RTCPeerConnection.prototype, 'onaddstream', {\n get: function get() {\n return this._onaddstream;\n },\n set: function set(f) {\n var _this4 = this;\n if (this._onaddstream) {\n this.removeEventListener('addstream', this._onaddstream);\n this.removeEventListener('track', this._onaddstreampoly);\n }\n this.addEventListener('addstream', this._onaddstream = f);\n this.addEventListener('track', this._onaddstreampoly = function (e) {\n e.streams.forEach(function (stream) {\n if (!_this4._remoteStreams) {\n _this4._remoteStreams = [];\n }\n if (_this4._remoteStreams.includes(stream)) {\n return;\n }\n _this4._remoteStreams.push(stream);\n var event = new Event('addstream');\n event.stream = stream;\n _this4.dispatchEvent(event);\n });\n });\n }\n });\n var origSetRemoteDescription = window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription() {\n var pc = this;\n if (!this._onaddstreampoly) {\n this.addEventListener('track', this._onaddstreampoly = function (e) {\n e.streams.forEach(function (stream) {\n if (!pc._remoteStreams) {\n pc._remoteStreams = [];\n }\n if (pc._remoteStreams.indexOf(stream) >= 0) {\n return;\n }\n pc._remoteStreams.push(stream);\n var event = new Event('addstream');\n event.stream = stream;\n pc.dispatchEvent(event);\n });\n });\n }\n return origSetRemoteDescription.apply(pc, arguments);\n };\n }\n}\nfunction shimCallbacksAPI(window) {\n if (_typeof(window) !== 'object' || !window.RTCPeerConnection) {\n return;\n }\n var prototype = window.RTCPeerConnection.prototype;\n var origCreateOffer = prototype.createOffer;\n var origCreateAnswer = prototype.createAnswer;\n var setLocalDescription = prototype.setLocalDescription;\n var setRemoteDescription = prototype.setRemoteDescription;\n var addIceCandidate = prototype.addIceCandidate;\n prototype.createOffer = function createOffer(successCallback, failureCallback) {\n var options = arguments.length >= 2 ? arguments[2] : arguments[0];\n var promise = origCreateOffer.apply(this, [options]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n prototype.createAnswer = function createAnswer(successCallback, failureCallback) {\n var options = arguments.length >= 2 ? arguments[2] : arguments[0];\n var promise = origCreateAnswer.apply(this, [options]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n var withCallback = function withCallback(description, successCallback, failureCallback) {\n var promise = setLocalDescription.apply(this, [description]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n prototype.setLocalDescription = withCallback;\n withCallback = function withCallback(description, successCallback, failureCallback) {\n var promise = setRemoteDescription.apply(this, [description]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n prototype.setRemoteDescription = withCallback;\n withCallback = function withCallback(candidate, successCallback, failureCallback) {\n var promise = addIceCandidate.apply(this, [candidate]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n prototype.addIceCandidate = withCallback;\n}\nfunction shimGetUserMedia(window) {\n var navigator = window && window.navigator;\n if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {\n // shim not needed in Safari 12.1\n var mediaDevices = navigator.mediaDevices;\n var _getUserMedia = mediaDevices.getUserMedia.bind(mediaDevices);\n navigator.mediaDevices.getUserMedia = function (constraints) {\n return _getUserMedia(shimConstraints(constraints));\n };\n }\n if (!navigator.getUserMedia && navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {\n navigator.getUserMedia = function getUserMedia(constraints, cb, errcb) {\n navigator.mediaDevices.getUserMedia(constraints).then(cb, errcb);\n }.bind(navigator);\n }\n}\nfunction shimConstraints(constraints) {\n if (constraints && constraints.video !== undefined) {\n return Object.assign({}, constraints, {\n video: utils.compactObject(constraints.video)\n });\n }\n return constraints;\n}\nfunction shimRTCIceServerUrls(window) {\n if (!window.RTCPeerConnection) {\n return;\n }\n // migrate from non-spec RTCIceServer.url to RTCIceServer.urls\n var OrigPeerConnection = window.RTCPeerConnection;\n window.RTCPeerConnection = function RTCPeerConnection(pcConfig, pcConstraints) {\n if (pcConfig && pcConfig.iceServers) {\n var newIceServers = [];\n for (var i = 0; i < pcConfig.iceServers.length; i++) {\n var server = pcConfig.iceServers[i];\n if (server.urls === undefined && server.url) {\n utils.deprecated('RTCIceServer.url', 'RTCIceServer.urls');\n server = JSON.parse(JSON.stringify(server));\n server.urls = server.url;\n delete server.url;\n newIceServers.push(server);\n } else {\n newIceServers.push(pcConfig.iceServers[i]);\n }\n }\n pcConfig.iceServers = newIceServers;\n }\n return new OrigPeerConnection(pcConfig, pcConstraints);\n };\n window.RTCPeerConnection.prototype = OrigPeerConnection.prototype;\n // wrap static methods. Currently just generateCertificate.\n if ('generateCertificate' in OrigPeerConnection) {\n Object.defineProperty(window.RTCPeerConnection, 'generateCertificate', {\n get: function get() {\n return OrigPeerConnection.generateCertificate;\n }\n });\n }\n}\nfunction shimTrackEventTransceiver(window) {\n // Add event.transceiver member over deprecated event.receiver\n if (_typeof(window) === 'object' && window.RTCTrackEvent && 'receiver' in window.RTCTrackEvent.prototype && !('transceiver' in window.RTCTrackEvent.prototype)) {\n Object.defineProperty(window.RTCTrackEvent.prototype, 'transceiver', {\n get: function get() {\n return {\n receiver: this.receiver\n };\n }\n });\n }\n}\nfunction shimCreateOfferLegacy(window) {\n var origCreateOffer = window.RTCPeerConnection.prototype.createOffer;\n window.RTCPeerConnection.prototype.createOffer = function createOffer(offerOptions) {\n if (offerOptions) {\n if (typeof offerOptions.offerToReceiveAudio !== 'undefined') {\n // support bit values\n offerOptions.offerToReceiveAudio = !!offerOptions.offerToReceiveAudio;\n }\n var audioTransceiver = this.getTransceivers().find(function (transceiver) {\n return transceiver.receiver.track.kind === 'audio';\n });\n if (offerOptions.offerToReceiveAudio === false && audioTransceiver) {\n if (audioTransceiver.direction === 'sendrecv') {\n if (audioTransceiver.setDirection) {\n audioTransceiver.setDirection('sendonly');\n } else {\n audioTransceiver.direction = 'sendonly';\n }\n } else if (audioTransceiver.direction === 'recvonly') {\n if (audioTransceiver.setDirection) {\n audioTransceiver.setDirection('inactive');\n } else {\n audioTransceiver.direction = 'inactive';\n }\n }\n } else if (offerOptions.offerToReceiveAudio === true && !audioTransceiver) {\n this.addTransceiver('audio', {\n direction: 'recvonly'\n });\n }\n if (typeof offerOptions.offerToReceiveVideo !== 'undefined') {\n // support bit values\n offerOptions.offerToReceiveVideo = !!offerOptions.offerToReceiveVideo;\n }\n var videoTransceiver = this.getTransceivers().find(function (transceiver) {\n return transceiver.receiver.track.kind === 'video';\n });\n if (offerOptions.offerToReceiveVideo === false && videoTransceiver) {\n if (videoTransceiver.direction === 'sendrecv') {\n if (videoTransceiver.setDirection) {\n videoTransceiver.setDirection('sendonly');\n } else {\n videoTransceiver.direction = 'sendonly';\n }\n } else if (videoTransceiver.direction === 'recvonly') {\n if (videoTransceiver.setDirection) {\n videoTransceiver.setDirection('inactive');\n } else {\n videoTransceiver.direction = 'inactive';\n }\n }\n } else if (offerOptions.offerToReceiveVideo === true && !videoTransceiver) {\n this.addTransceiver('video', {\n direction: 'recvonly'\n });\n }\n }\n return origCreateOffer.apply(this, arguments);\n };\n}\nfunction shimAudioContext(window) {\n if (_typeof(window) !== 'object' || window.AudioContext) {\n return;\n }\n window.AudioContext = window.webkitAudioContext;\n}\n", "/* eslint-env node */\n'use strict';\n\n// SDP helpers.\n\nconst SDPUtils = {};\n\n// Generate an alphanumeric identifier for cname or mids.\n// TODO: use UUIDs instead? https://gist.github.com/jed/982883\nSDPUtils.generateIdentifier = function () {\n return Math.random().toString(36).substring(2, 12);\n};\n\n// The RTCP CNAME used by all peerconnections from the same JS.\nSDPUtils.localCName = SDPUtils.generateIdentifier();\n\n// Splits SDP into lines, dealing with both CRLF and LF.\nSDPUtils.splitLines = function (blob) {\n return blob.trim().split('\\n').map(line => line.trim());\n};\n// Splits SDP into sessionpart and mediasections. Ensures CRLF.\nSDPUtils.splitSections = function (blob) {\n const parts = blob.split('\\nm=');\n return parts.map((part, index) => (index > 0 ? 'm=' + part : part).trim() + '\\r\\n');\n};\n\n// Returns the session description.\nSDPUtils.getDescription = function (blob) {\n const sections = SDPUtils.splitSections(blob);\n return sections && sections[0];\n};\n\n// Returns the individual media sections.\nSDPUtils.getMediaSections = function (blob) {\n const sections = SDPUtils.splitSections(blob);\n sections.shift();\n return sections;\n};\n\n// Returns lines that start with a certain prefix.\nSDPUtils.matchPrefix = function (blob, prefix) {\n return SDPUtils.splitLines(blob).filter(line => line.indexOf(prefix) === 0);\n};\n\n// Parses an ICE candidate line. Sample input:\n// candidate:702786350 2 udp 41819902 8.8.8.8 60769 typ relay raddr 8.8.8.8\n// rport 55996\"\n// Input can be prefixed with a=.\nSDPUtils.parseCandidate = function (line) {\n let parts;\n // Parse both variants.\n if (line.indexOf('a=candidate:') === 0) {\n parts = line.substring(12).split(' ');\n } else {\n parts = line.substring(10).split(' ');\n }\n\n const candidate = {\n foundation: parts[0],\n component: { 1: 'rtp', 2: 'rtcp' }[parts[1]] || parts[1],\n protocol: parts[2].toLowerCase(),\n priority: parseInt(parts[3], 10),\n ip: parts[4],\n address: parts[4], // address is an alias for ip.\n port: parseInt(parts[5], 10),\n // skip parts[6] == 'typ'\n type: parts[7]\n };\n\n for (let i = 8; i < parts.length; i += 2) {\n switch (parts[i]) {\n case 'raddr':\n candidate.relatedAddress = parts[i + 1];\n break;\n case 'rport':\n candidate.relatedPort = parseInt(parts[i + 1], 10);\n break;\n case 'tcptype':\n candidate.tcpType = parts[i + 1];\n break;\n case 'ufrag':\n candidate.ufrag = parts[i + 1]; // for backward compatibility.\n candidate.usernameFragment = parts[i + 1];\n break;\n default:\n // extension handling, in particular ufrag. Don't overwrite.\n if (candidate[parts[i]] === undefined) {\n candidate[parts[i]] = parts[i + 1];\n }\n break;\n }\n }\n return candidate;\n};\n\n// Translates a candidate object into SDP candidate attribute.\n// This does not include the a= prefix!\nSDPUtils.writeCandidate = function (candidate) {\n const sdp = [];\n sdp.push(candidate.foundation);\n\n const component = candidate.component;\n if (component === 'rtp') {\n sdp.push(1);\n } else if (component === 'rtcp') {\n sdp.push(2);\n } else {\n sdp.push(component);\n }\n sdp.push(candidate.protocol.toUpperCase());\n sdp.push(candidate.priority);\n sdp.push(candidate.address || candidate.ip);\n sdp.push(candidate.port);\n\n const type = candidate.type;\n sdp.push('typ');\n sdp.push(type);\n if (type !== 'host' && candidate.relatedAddress && candidate.relatedPort !== undefined) {\n sdp.push('raddr');\n sdp.push(candidate.relatedAddress);\n sdp.push('rport');\n sdp.push(candidate.relatedPort);\n }\n if (candidate.tcpType && candidate.protocol.toLowerCase() === 'tcp') {\n sdp.push('tcptype');\n sdp.push(candidate.tcpType);\n }\n if (candidate.usernameFragment || candidate.ufrag) {\n sdp.push('ufrag');\n sdp.push(candidate.usernameFragment || candidate.ufrag);\n }\n return 'candidate:' + sdp.join(' ');\n};\n\n// Parses an ice-options line, returns an array of option tags.\n// Sample input:\n// a=ice-options:foo bar\nSDPUtils.parseIceOptions = function (line) {\n return line.substring(14).split(' ');\n};\n\n// Parses a rtpmap line, returns RTCRtpCoddecParameters. Sample input:\n// a=rtpmap:111 opus/48000/2\nSDPUtils.parseRtpMap = function (line) {\n let parts = line.substring(9).split(' ');\n const parsed = {\n payloadType: parseInt(parts.shift(), 10) // was: id\n };\n\n parts = parts[0].split('/');\n\n parsed.name = parts[0];\n parsed.clockRate = parseInt(parts[1], 10); // was: clockrate\n parsed.channels = parts.length === 3 ? parseInt(parts[2], 10) : 1;\n // legacy alias, got renamed back to channels in ORTC.\n parsed.numChannels = parsed.channels;\n return parsed;\n};\n\n// Generates a rtpmap line from RTCRtpCodecCapability or\n// RTCRtpCodecParameters.\nSDPUtils.writeRtpMap = function (codec) {\n let pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) {\n pt = codec.preferredPayloadType;\n }\n const channels = codec.channels || codec.numChannels || 1;\n return 'a=rtpmap:' + pt + ' ' + codec.name + '/' + codec.clockRate + (channels !== 1 ? '/' + channels : '') + '\\r\\n';\n};\n\n// Parses a extmap line (headerextension from RFC 5285). Sample input:\n// a=extmap:2 urn:ietf:params:rtp-hdrext:toffset\n// a=extmap:2/sendonly urn:ietf:params:rtp-hdrext:toffset\nSDPUtils.parseExtmap = function (line) {\n const parts = line.substring(9).split(' ');\n return {\n id: parseInt(parts[0], 10),\n direction: parts[0].indexOf('/') > 0 ? parts[0].split('/')[1] : 'sendrecv',\n uri: parts[1],\n attributes: parts.slice(2).join(' ')\n };\n};\n\n// Generates an extmap line from RTCRtpHeaderExtensionParameters or\n// RTCRtpHeaderExtension.\nSDPUtils.writeExtmap = function (headerExtension) {\n return 'a=extmap:' + (headerExtension.id || headerExtension.preferredId) + (headerExtension.direction && headerExtension.direction !== 'sendrecv' ? '/' + headerExtension.direction : '') + ' ' + headerExtension.uri + (headerExtension.attributes ? ' ' + headerExtension.attributes : '') + '\\r\\n';\n};\n\n// Parses a fmtp line, returns dictionary. Sample input:\n// a=fmtp:96 vbr=on;cng=on\n// Also deals with vbr=on; cng=on\n// Non-key-value such as telephone-events `0-15` get parsed as\n// {`0-15`:undefined}\nSDPUtils.parseFmtp = function (line) {\n const parsed = {};\n let kv;\n const parts = line.substring(line.indexOf(' ') + 1).split(';');\n for (let j = 0; j < parts.length; j++) {\n kv = parts[j].trim().split('=');\n parsed[kv[0].trim()] = kv[1];\n }\n return parsed;\n};\n\n// Generates a fmtp line from RTCRtpCodecCapability or RTCRtpCodecParameters.\nSDPUtils.writeFmtp = function (codec) {\n let line = '';\n let pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) {\n pt = codec.preferredPayloadType;\n }\n if (codec.parameters && Object.keys(codec.parameters).length) {\n const params = [];\n Object.keys(codec.parameters).forEach(param => {\n if (codec.parameters[param] !== undefined) {\n params.push(param + '=' + codec.parameters[param]);\n } else {\n params.push(param);\n }\n });\n line += 'a=fmtp:' + pt + ' ' + params.join(';') + '\\r\\n';\n }\n return line;\n};\n\n// Parses a rtcp-fb line, returns RTCPRtcpFeedback object. Sample input:\n// a=rtcp-fb:98 nack rpsi\nSDPUtils.parseRtcpFb = function (line) {\n const parts = line.substring(line.indexOf(' ') + 1).split(' ');\n return {\n type: parts.shift(),\n parameter: parts.join(' ')\n };\n};\n\n// Generate a=rtcp-fb lines from RTCRtpCodecCapability or RTCRtpCodecParameters.\nSDPUtils.writeRtcpFb = function (codec) {\n let lines = '';\n let pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) {\n pt = codec.preferredPayloadType;\n }\n if (codec.rtcpFeedback && codec.rtcpFeedback.length) {\n // FIXME: special handling for trr-int?\n codec.rtcpFeedback.forEach(fb => {\n lines += 'a=rtcp-fb:' + pt + ' ' + fb.type + (fb.parameter && fb.parameter.length ? ' ' + fb.parameter : '') + '\\r\\n';\n });\n }\n return lines;\n};\n\n// Parses a RFC 5576 ssrc media attribute. Sample input:\n// a=ssrc:3735928559 cname:something\nSDPUtils.parseSsrcMedia = function (line) {\n const sp = line.indexOf(' ');\n const parts = {\n ssrc: parseInt(line.substring(7, sp), 10)\n };\n const colon = line.indexOf(':', sp);\n if (colon > -1) {\n parts.attribute = line.substring(sp + 1, colon);\n parts.value = line.substring(colon + 1);\n } else {\n parts.attribute = line.substring(sp + 1);\n }\n return parts;\n};\n\n// Parse a ssrc-group line (see RFC 5576). Sample input:\n// a=ssrc-group:semantics 12 34\nSDPUtils.parseSsrcGroup = function (line) {\n const parts = line.substring(13).split(' ');\n return {\n semantics: parts.shift(),\n ssrcs: parts.map(ssrc => parseInt(ssrc, 10))\n };\n};\n\n// Extracts the MID (RFC 5888) from a media section.\n// Returns the MID or undefined if no mid line was found.\nSDPUtils.getMid = function (mediaSection) {\n const mid = SDPUtils.matchPrefix(mediaSection, 'a=mid:')[0];\n if (mid) {\n return mid.substring(6);\n }\n};\n\n// Parses a fingerprint line for DTLS-SRTP.\nSDPUtils.parseFingerprint = function (line) {\n const parts = line.substring(14).split(' ');\n return {\n algorithm: parts[0].toLowerCase(), // algorithm is case-sensitive in Edge.\n value: parts[1].toUpperCase() // the definition is upper-case in RFC 4572.\n };\n};\n\n// Extracts DTLS parameters from SDP media section or sessionpart.\n// FIXME: for consistency with other functions this should only\n// get the fingerprint line as input. See also getIceParameters.\nSDPUtils.getDtlsParameters = function (mediaSection, sessionpart) {\n const lines = SDPUtils.matchPrefix(mediaSection + sessionpart, 'a=fingerprint:');\n // Note: a=setup line is ignored since we use the 'auto' role in Edge.\n return {\n role: 'auto',\n fingerprints: lines.map(SDPUtils.parseFingerprint)\n };\n};\n\n// Serializes DTLS parameters to SDP.\nSDPUtils.writeDtlsParameters = function (params, setupType) {\n let sdp = 'a=setup:' + setupType + '\\r\\n';\n params.fingerprints.forEach(fp => {\n sdp += 'a=fingerprint:' + fp.algorithm + ' ' + fp.value + '\\r\\n';\n });\n return sdp;\n};\n\n// Parses a=crypto lines into\n// https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#dictionary-rtcsrtpsdesparameters-members\nSDPUtils.parseCryptoLine = function (line) {\n const parts = line.substring(9).split(' ');\n return {\n tag: parseInt(parts[0], 10),\n cryptoSuite: parts[1],\n keyParams: parts[2],\n sessionParams: parts.slice(3)\n };\n};\n\nSDPUtils.writeCryptoLine = function (parameters) {\n return 'a=crypto:' + parameters.tag + ' ' + parameters.cryptoSuite + ' ' + (typeof parameters.keyParams === 'object' ? SDPUtils.writeCryptoKeyParams(parameters.keyParams) : parameters.keyParams) + (parameters.sessionParams ? ' ' + parameters.sessionParams.join(' ') : '') + '\\r\\n';\n};\n\n// Parses the crypto key parameters into\n// https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#rtcsrtpkeyparam*\nSDPUtils.parseCryptoKeyParams = function (keyParams) {\n if (keyParams.indexOf('inline:') !== 0) {\n return null;\n }\n const parts = keyParams.substring(7).split('|');\n return {\n keyMethod: 'inline',\n keySalt: parts[0],\n lifeTime: parts[1],\n mkiValue: parts[2] ? parts[2].split(':')[0] : undefined,\n mkiLength: parts[2] ? parts[2].split(':')[1] : undefined\n };\n};\n\nSDPUtils.writeCryptoKeyParams = function (keyParams) {\n return keyParams.keyMethod + ':' + keyParams.keySalt + (keyParams.lifeTime ? '|' + keyParams.lifeTime : '') + (keyParams.mkiValue && keyParams.mkiLength ? '|' + keyParams.mkiValue + ':' + keyParams.mkiLength : '');\n};\n\n// Extracts all SDES parameters.\nSDPUtils.getCryptoParameters = function (mediaSection, sessionpart) {\n const lines = SDPUtils.matchPrefix(mediaSection + sessionpart, 'a=crypto:');\n return lines.map(SDPUtils.parseCryptoLine);\n};\n\n// Parses ICE information from SDP media section or sessionpart.\n// FIXME: for consistency with other functions this should only\n// get the ice-ufrag and ice-pwd lines as input.\nSDPUtils.getIceParameters = function (mediaSection, sessionpart) {\n const ufrag = SDPUtils.matchPrefix(mediaSection + sessionpart, 'a=ice-ufrag:')[0];\n const pwd = SDPUtils.matchPrefix(mediaSection + sessionpart, 'a=ice-pwd:')[0];\n if (!(ufrag && pwd)) {\n return null;\n }\n return {\n usernameFragment: ufrag.substring(12),\n password: pwd.substring(10)\n };\n};\n\n// Serializes ICE parameters to SDP.\nSDPUtils.writeIceParameters = function (params) {\n let sdp = 'a=ice-ufrag:' + params.usernameFragment + '\\r\\n' + 'a=ice-pwd:' + params.password + '\\r\\n';\n if (params.iceLite) {\n sdp += 'a=ice-lite\\r\\n';\n }\n return sdp;\n};\n\n// Parses the SDP media section and returns RTCRtpParameters.\nSDPUtils.parseRtpParameters = function (mediaSection) {\n const description = {\n codecs: [],\n headerExtensions: [],\n fecMechanisms: [],\n rtcp: []\n };\n const lines = SDPUtils.splitLines(mediaSection);\n const mline = lines[0].split(' ');\n description.profile = mline[2];\n for (let i = 3; i < mline.length; i++) {\n // find all codecs from mline[3..]\n const pt = mline[i];\n const rtpmapline = SDPUtils.matchPrefix(mediaSection, 'a=rtpmap:' + pt + ' ')[0];\n if (rtpmapline) {\n const codec = SDPUtils.parseRtpMap(rtpmapline);\n const fmtps = SDPUtils.matchPrefix(mediaSection, 'a=fmtp:' + pt + ' ');\n // Only the first a=fmtp:<pt> is considered.\n codec.parameters = fmtps.length ? SDPUtils.parseFmtp(fmtps[0]) : {};\n codec.rtcpFeedback = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-fb:' + pt + ' ').map(SDPUtils.parseRtcpFb);\n description.codecs.push(codec);\n // parse FEC mechanisms from rtpmap lines.\n switch (codec.name.toUpperCase()) {\n case 'RED':\n case 'ULPFEC':\n description.fecMechanisms.push(codec.name.toUpperCase());\n break;\n default:\n // only RED and ULPFEC are recognized as FEC mechanisms.\n break;\n }\n }\n }\n SDPUtils.matchPrefix(mediaSection, 'a=extmap:').forEach(line => {\n description.headerExtensions.push(SDPUtils.parseExtmap(line));\n });\n const wildcardRtcpFb = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-fb:* ').map(SDPUtils.parseRtcpFb);\n description.codecs.forEach(codec => {\n wildcardRtcpFb.forEach(fb => {\n const duplicate = codec.rtcpFeedback.find(existingFeedback => {\n return existingFeedback.type === fb.type && existingFeedback.parameter === fb.parameter;\n });\n if (!duplicate) {\n codec.rtcpFeedback.push(fb);\n }\n });\n });\n // FIXME: parse rtcp.\n return description;\n};\n\n// Generates parts of the SDP media section describing the capabilities /\n// parameters.\nSDPUtils.writeRtpDescription = function (kind, caps) {\n let sdp = '';\n\n // Build the mline.\n sdp += 'm=' + kind + ' ';\n sdp += caps.codecs.length > 0 ? '9' : '0'; // reject if no codecs.\n sdp += ' ' + (caps.profile || 'UDP/TLS/RTP/SAVPF') + ' ';\n sdp += caps.codecs.map(codec => {\n if (codec.preferredPayloadType !== undefined) {\n return codec.preferredPayloadType;\n }\n return codec.payloadType;\n }).join(' ') + '\\r\\n';\n\n sdp += 'c=IN IP4 0.0.0.0\\r\\n';\n sdp += 'a=rtcp:9 IN IP4 0.0.0.0\\r\\n';\n\n // Add a=rtpmap lines for each codec. Also fmtp and rtcp-fb.\n caps.codecs.forEach(codec => {\n sdp += SDPUtils.writeRtpMap(codec);\n sdp += SDPUtils.writeFmtp(codec);\n sdp += SDPUtils.writeRtcpFb(codec);\n });\n let maxptime = 0;\n caps.codecs.forEach(codec => {\n if (codec.maxptime > maxptime) {\n maxptime = codec.maxptime;\n }\n });\n if (maxptime > 0) {\n sdp += 'a=maxptime:' + maxptime + '\\r\\n';\n }\n\n if (caps.headerExtensions) {\n caps.headerExtensions.forEach(extension => {\n sdp += SDPUtils.writeExtmap(extension);\n });\n }\n // FIXME: write fecMechanisms.\n return sdp;\n};\n\n// Parses the SDP media section and returns an array of\n// RTCRtpEncodingParameters.\nSDPUtils.parseRtpEncodingParameters = function (mediaSection) {\n const encodingParameters = [];\n const description = SDPUtils.parseRtpParameters(mediaSection);\n const hasRed = description.fecMechanisms.indexOf('RED') !== -1;\n const hasUlpfec = description.fecMechanisms.indexOf('ULPFEC') !== -1;\n\n // filter a=ssrc:... cname:, ignore PlanB-msid\n const ssrcs = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:').map(line => SDPUtils.parseSsrcMedia(line)).filter(parts => parts.attribute === 'cname');\n const primarySsrc = ssrcs.length > 0 && ssrcs[0].ssrc;\n let secondarySsrc;\n\n const flows = SDPUtils.matchPrefix(mediaSection, 'a=ssrc-group:FID').map(line => {\n const parts = line.substring(17).split(' ');\n return parts.map(part => parseInt(part, 10));\n });\n if (flows.length > 0 && flows[0].length > 1 && flows[0][0] === primarySsrc) {\n secondarySsrc = flows[0][1];\n }\n\n description.codecs.forEach(codec => {\n if (codec.name.toUpperCase() === 'RTX' && codec.parameters.apt) {\n let encParam = {\n ssrc: primarySsrc,\n codecPayloadType: parseInt(codec.parameters.apt, 10)\n };\n if (primarySsrc && secondarySsrc) {\n encParam.rtx = { ssrc: secondarySsrc };\n }\n encodingParameters.push(encParam);\n if (hasRed) {\n encParam = JSON.parse(JSON.stringify(encParam));\n encParam.fec = {\n ssrc: primarySsrc,\n mechanism: hasUlpfec ? 'red+ulpfec' : 'red'\n };\n encodingParameters.push(encParam);\n }\n }\n });\n if (encodingParameters.length === 0 && primarySsrc) {\n encodingParameters.push({\n ssrc: primarySsrc\n });\n }\n\n // we support both b=AS and b=TIAS but interpret AS as TIAS.\n let bandwidth = SDPUtils.matchPrefix(mediaSection, 'b=');\n if (bandwidth.length) {\n if (bandwidth[0].indexOf('b=TIAS:') === 0) {\n bandwidth = parseInt(bandwidth[0].substring(7), 10);\n } else if (bandwidth[0].indexOf('b=AS:') === 0) {\n // use formula from JSEP to convert b=AS to TIAS value.\n bandwidth = parseInt(bandwidth[0].substring(5), 10) * 1000 * 0.95 - 50 * 40 * 8;\n } else {\n bandwidth = undefined;\n }\n encodingParameters.forEach(params => {\n params.maxBitrate = bandwidth;\n });\n }\n return encodingParameters;\n};\n\n// parses http://draft.ortc.org/#rtcrtcpparameters*\nSDPUtils.parseRtcpParameters = function (mediaSection) {\n const rtcpParameters = {};\n\n // Gets the first SSRC. Note that with RTX there might be multiple\n // SSRCs.\n const remoteSsrc = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:').map(line => SDPUtils.parseSsrcMedia(line)).filter(obj => obj.attribute === 'cname')[0];\n if (remoteSsrc) {\n rtcpParameters.cname = remoteSsrc.value;\n rtcpParameters.ssrc = remoteSsrc.ssrc;\n }\n\n // Edge uses the compound attribute instead of reducedSize\n // compound is !reducedSize\n const rsize = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-rsize');\n rtcpParameters.reducedSize = rsize.length > 0;\n rtcpParameters.compound = rsize.length === 0;\n\n // parses the rtcp-mux attr\u0456bute.\n // Note that Edge does not support unmuxed RTCP.\n const mux = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-mux');\n rtcpParameters.mux = mux.length > 0;\n\n return rtcpParameters;\n};\n\nSDPUtils.writeRtcpParameters = function (rtcpParameters) {\n let sdp = '';\n if (rtcpParameters.reducedSize) {\n sdp += 'a=rtcp-rsize\\r\\n';\n }\n if (rtcpParameters.mux) {\n sdp += 'a=rtcp-mux\\r\\n';\n }\n if (rtcpParameters.ssrc !== undefined && rtcpParameters.cname) {\n sdp += 'a=ssrc:' + rtcpParameters.ssrc + ' cname:' + rtcpParameters.cname + '\\r\\n';\n }\n return sdp;\n};\n\n// parses either a=msid: or a=ssrc:... msid lines and returns\n// the id of the MediaStream and MediaStreamTrack.\nSDPUtils.parseMsid = function (mediaSection) {\n let parts;\n const spec = SDPUtils.matchPrefix(mediaSection, 'a=msid:');\n if (spec.length === 1) {\n parts = spec[0].substring(7).split(' ');\n return { stream: parts[0], track: parts[1] };\n }\n const planB = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:').map(line => SDPUtils.parseSsrcMedia(line)).filter(msidParts => msidParts.attribute === 'msid');\n if (planB.length > 0) {\n parts = planB[0].value.split(' ');\n return { stream: parts[0], track: parts[1] };\n }\n};\n\n// SCTP\n// parses draft-ietf-mmusic-sctp-sdp-26 first and falls back\n// to draft-ietf-mmusic-sctp-sdp-05\nSDPUtils.parseSctpDescription = function (mediaSection) {\n const mline = SDPUtils.parseMLine(mediaSection);\n const maxSizeLine = SDPUtils.matchPrefix(mediaSection, 'a=max-message-size:');\n let maxMessageSize;\n if (maxSizeLine.length > 0) {\n maxMessageSize = parseInt(maxSizeLine[0].substring(19), 10);\n }\n if (isNaN(maxMessageSize)) {\n maxMessageSize = 65536;\n }\n const sctpPort = SDPUtils.matchPrefix(mediaSection, 'a=sctp-port:');\n if (sctpPort.length > 0) {\n return {\n port: parseInt(sctpPort[0].substring(12), 10),\n protocol: mline.fmt,\n maxMessageSize\n };\n }\n const sctpMapLines = SDPUtils.matchPrefix(mediaSection, 'a=sctpmap:');\n if (sctpMapLines.length > 0) {\n const parts = sctpMapLines[0].substring(10).split(' ');\n return {\n port: parseInt(parts[0], 10),\n protocol: parts[1],\n maxMessageSize\n };\n }\n};\n\n// SCTP\n// outputs the draft-ietf-mmusic-sctp-sdp-26 version that all browsers\n// support by now receiving in this format, unless we originally parsed\n// as the draft-ietf-mmusic-sctp-sdp-05 format (indicated by the m-line\n// protocol of DTLS/SCTP -- without UDP/ or TCP/)\nSDPUtils.writeSctpDescription = function (media, sctp) {\n let output = [];\n if (media.protocol !== 'DTLS/SCTP') {\n output = ['m=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.protocol + '\\r\\n', 'c=IN IP4 0.0.0.0\\r\\n', 'a=sctp-port:' + sctp.port + '\\r\\n'];\n } else {\n output = ['m=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.port + '\\r\\n', 'c=IN IP4 0.0.0.0\\r\\n', 'a=sctpmap:' + sctp.port + ' ' + sctp.protocol + ' 65535\\r\\n'];\n }\n if (sctp.maxMessageSize !== undefined) {\n output.push('a=max-message-size:' + sctp.maxMessageSize + '\\r\\n');\n }\n return output.join('');\n};\n\n// Generate a session ID for SDP.\n// https://tools.ietf.org/html/draft-ietf-rtcweb-jsep-20#section-5.2.1\n// recommends using a cryptographically random +ve 64-bit value\n// but right now this should be acceptable and within the right range\nSDPUtils.generateSessionId = function () {\n return Math.random().toString().substr(2, 22);\n};\n\n// Write boiler plate for start of SDP\n// sessId argument is optional - if not supplied it will\n// be generated randomly\n// sessVersion is optional and defaults to 2\n// sessUser is optional and defaults to 'thisisadapterortc'\nSDPUtils.writeSessionBoilerplate = function (sessId, sessVer, sessUser) {\n let sessionId;\n const version = sessVer !== undefined ? sessVer : 2;\n if (sessId) {\n sessionId = sessId;\n } else {\n sessionId = SDPUtils.generateSessionId();\n }\n const user = sessUser || 'thisisadapterortc';\n // FIXME: sess-id should be an NTP timestamp.\n return 'v=0\\r\\n' + 'o=' + user + ' ' + sessionId + ' ' + version + ' IN IP4 127.0.0.1\\r\\n' + 's=-\\r\\n' + 't=0 0\\r\\n';\n};\n\n// Gets the direction from the mediaSection or the sessionpart.\nSDPUtils.getDirection = function (mediaSection, sessionpart) {\n // Look for sendrecv, sendonly, recvonly, inactive, default to sendrecv.\n const lines = SDPUtils.splitLines(mediaSection);\n for (let i = 0; i < lines.length; i++) {\n switch (lines[i]) {\n case 'a=sendrecv':\n case 'a=sendonly':\n case 'a=recvonly':\n case 'a=inactive':\n return lines[i].substring(2);\n default:\n // FIXME: What should happen here?\n }\n }\n if (sessionpart) {\n return SDPUtils.getDirection(sessionpart);\n }\n return 'sendrecv';\n};\n\nSDPUtils.getKind = function (mediaSection) {\n const lines = SDPUtils.splitLines(mediaSection);\n const mline = lines[0].split(' ');\n return mline[0].substring(2);\n};\n\nSDPUtils.isRejected = function (mediaSection) {\n return mediaSection.split(' ', 2)[1] === '0';\n};\n\nSDPUtils.parseMLine = function (mediaSection) {\n const lines = SDPUtils.splitLines(mediaSection);\n const parts = lines[0].substring(2).split(' ');\n return {\n kind: parts[0],\n port: parseInt(parts[1], 10),\n protocol: parts[2],\n fmt: parts.slice(3).join(' ')\n };\n};\n\nSDPUtils.parseOLine = function (mediaSection) {\n const line = SDPUtils.matchPrefix(mediaSection, 'o=')[0];\n const parts = line.substring(2).split(' ');\n return {\n username: parts[0],\n sessionId: parts[1],\n sessionVersion: parseInt(parts[2], 10),\n netType: parts[3],\n addressType: parts[4],\n address: parts[5]\n };\n};\n\n// a very naive interpretation of a valid SDP.\nSDPUtils.isValidSDP = function (blob) {\n if (typeof blob !== 'string' || blob.length === 0) {\n return false;\n }\n const lines = SDPUtils.splitLines(blob);\n for (let i = 0; i < lines.length; i++) {\n if (lines[i].length < 2 || lines[i].charAt(1) !== '=') {\n return false;\n }\n // TODO: check the modifier a bit more.\n }\n return true;\n};\n\n// Expose public methods.\nif (typeof module === 'object') {\n module.exports = SDPUtils;\n}", "/*\n * Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.removeExtmapAllowMixed = removeExtmapAllowMixed;\nexports.shimAddIceCandidateNullOrEmpty = shimAddIceCandidateNullOrEmpty;\nexports.shimConnectionState = shimConnectionState;\nexports.shimMaxMessageSize = shimMaxMessageSize;\nexports.shimParameterlessSetLocalDescription = shimParameterlessSetLocalDescription;\nexports.shimRTCIceCandidate = shimRTCIceCandidate;\nexports.shimRTCIceCandidateRelayProtocol = shimRTCIceCandidateRelayProtocol;\nexports.shimSendThrowTypeError = shimSendThrowTypeError;\nvar _sdp = _interopRequireDefault(require(\"sdp\"));\nvar utils = _interopRequireWildcard(require(\"./utils\"));\nfunction _interopRequireWildcard(e, t) { if (\"function\" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, \"default\": e }; if (null === e || \"object\" != _typeof(e) && \"function\" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) \"default\" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }\nfunction _interopRequireDefault(e) { return e && e.__esModule ? e : { \"default\": e }; }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction shimRTCIceCandidate(window) {\n // foundation is arbitrarily chosen as an indicator for full support for\n // https://w3c.github.io/webrtc-pc/#rtcicecandidate-interface\n if (!window.RTCIceCandidate || window.RTCIceCandidate && 'foundation' in window.RTCIceCandidate.prototype) {\n return;\n }\n var NativeRTCIceCandidate = window.RTCIceCandidate;\n window.RTCIceCandidate = function RTCIceCandidate(args) {\n // Remove the a= which shouldn't be part of the candidate string.\n if (_typeof(args) === 'object' && args.candidate && args.candidate.indexOf('a=') === 0) {\n args = JSON.parse(JSON.stringify(args));\n args.candidate = args.candidate.substring(2);\n }\n if (args.candidate && args.candidate.length) {\n // Augment the native candidate with the parsed fields.\n var nativeCandidate = new NativeRTCIceCandidate(args);\n var parsedCandidate = _sdp[\"default\"].parseCandidate(args.candidate);\n for (var key in parsedCandidate) {\n if (!(key in nativeCandidate)) {\n Object.defineProperty(nativeCandidate, key, {\n value: parsedCandidate[key]\n });\n }\n }\n\n // Override serializer to not serialize the extra attributes.\n nativeCandidate.toJSON = function toJSON() {\n return {\n candidate: nativeCandidate.candidate,\n sdpMid: nativeCandidate.sdpMid,\n sdpMLineIndex: nativeCandidate.sdpMLineIndex,\n usernameFragment: nativeCandidate.usernameFragment\n };\n };\n return nativeCandidate;\n }\n return new NativeRTCIceCandidate(args);\n };\n window.RTCIceCandidate.prototype = NativeRTCIceCandidate.prototype;\n\n // Hook up the augmented candidate in onicecandidate and\n // addEventListener('icecandidate', ...)\n utils.wrapPeerConnectionEvent(window, 'icecandidate', function (e) {\n if (e.candidate) {\n Object.defineProperty(e, 'candidate', {\n value: new window.RTCIceCandidate(e.candidate),\n writable: 'false'\n });\n }\n return e;\n });\n}\nfunction shimRTCIceCandidateRelayProtocol(window) {\n if (!window.RTCIceCandidate || window.RTCIceCandidate && 'relayProtocol' in window.RTCIceCandidate.prototype) {\n return;\n }\n\n // Hook up the augmented candidate in onicecandidate and\n // addEventListener('icecandidate', ...)\n utils.wrapPeerConnectionEvent(window, 'icecandidate', function (e) {\n if (e.candidate) {\n var parsedCandidate = _sdp[\"default\"].parseCandidate(e.candidate.candidate);\n if (parsedCandidate.type === 'relay') {\n // This is a libwebrtc-specific mapping of local type preference\n // to relayProtocol.\n e.candidate.relayProtocol = {\n 0: 'tls',\n 1: 'tcp',\n 2: 'udp'\n }[parsedCandidate.priority >> 24];\n }\n }\n return e;\n });\n}\nfunction shimMaxMessageSize(window, browserDetails) {\n if (!window.RTCPeerConnection) {\n return;\n }\n if (!('sctp' in window.RTCPeerConnection.prototype)) {\n Object.defineProperty(window.RTCPeerConnection.prototype, 'sctp', {\n get: function get() {\n return typeof this._sctp === 'undefined' ? null : this._sctp;\n }\n });\n }\n var sctpInDescription = function sctpInDescription(description) {\n if (!description || !description.sdp) {\n return false;\n }\n var sections = _sdp[\"default\"].splitSections(description.sdp);\n sections.shift();\n return sections.some(function (mediaSection) {\n var mLine = _sdp[\"default\"].parseMLine(mediaSection);\n return mLine && mLine.kind === 'application' && mLine.protocol.indexOf('SCTP') !== -1;\n });\n };\n var getRemoteFirefoxVersion = function getRemoteFirefoxVersion(description) {\n // TODO: Is there a better solution for detecting Firefox?\n var match = description.sdp.match(/mozilla...THIS_IS_SDPARTA-(\\d+)/);\n if (match === null || match.length < 2) {\n return -1;\n }\n var version = parseInt(match[1], 10);\n // Test for NaN (yes, this is ugly)\n return version !== version ? -1 : version;\n };\n var getCanSendMaxMessageSize = function getCanSendMaxMessageSize(remoteIsFirefox) {\n // Every implementation we know can send at least 64 KiB.\n // Note: Although Chrome is technically able to send up to 256 KiB, the\n // data does not reach the other peer reliably.\n // See: https://bugs.chromium.org/p/webrtc/issues/detail?id=8419\n var canSendMaxMessageSize = 65536;\n if (browserDetails.browser === 'firefox') {\n if (browserDetails.version < 57) {\n if (remoteIsFirefox === -1) {\n // FF < 57 will send in 16 KiB chunks using the deprecated PPID\n // fragmentation.\n canSendMaxMessageSize = 16384;\n } else {\n // However, other FF (and RAWRTC) can reassemble PPID-fragmented\n // messages. Thus, supporting ~2 GiB when sending.\n canSendMaxMessageSize = 2147483637;\n }\n } else if (browserDetails.version < 60) {\n // Currently, all FF >= 57 will reset the remote maximum message size\n // to the default value when a data channel is created at a later\n // stage. :(\n // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1426831\n canSendMaxMessageSize = browserDetails.version === 57 ? 65535 : 65536;\n } else {\n // FF >= 60 supports sending ~2 GiB\n canSendMaxMessageSize = 2147483637;\n }\n }\n return canSendMaxMessageSize;\n };\n var getMaxMessageSize = function getMaxMessageSize(description, remoteIsFirefox) {\n // Note: 65536 bytes is the default value from the SDP spec. Also,\n // every implementation we know supports receiving 65536 bytes.\n var maxMessageSize = 65536;\n\n // FF 57 has a slightly incorrect default remote max message size, so\n // we need to adjust it here to avoid a failure when sending.\n // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1425697\n if (browserDetails.browser === 'firefox' && browserDetails.version === 57) {\n maxMessageSize = 65535;\n }\n var match = _sdp[\"default\"].matchPrefix(description.sdp, 'a=max-message-size:');\n if (match.length > 0) {\n maxMessageSize = parseInt(match[0].substring(19), 10);\n } else if (browserDetails.browser === 'firefox' && remoteIsFirefox !== -1) {\n // If the maximum message size is not present in the remote SDP and\n // both local and remote are Firefox, the remote peer can receive\n // ~2 GiB.\n maxMessageSize = 2147483637;\n }\n return maxMessageSize;\n };\n var origSetRemoteDescription = window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription() {\n this._sctp = null;\n // Chrome decided to not expose .sctp in plan-b mode.\n // As usual, adapter.js has to do an 'ugly worakaround'\n // to cover up the mess.\n if (browserDetails.browser === 'chrome' && browserDetails.version >= 76) {\n var _this$getConfiguratio = this.getConfiguration(),\n sdpSemantics = _this$getConfiguratio.sdpSemantics;\n if (sdpSemantics === 'plan-b') {\n Object.defineProperty(this, 'sctp', {\n get: function get() {\n return typeof this._sctp === 'undefined' ? null : this._sctp;\n },\n enumerable: true,\n configurable: true\n });\n }\n }\n if (sctpInDescription(arguments[0])) {\n // Check if the remote is FF.\n var isFirefox = getRemoteFirefoxVersion(arguments[0]);\n\n // Get the maximum message size the local peer is capable of sending\n var canSendMMS = getCanSendMaxMessageSize(isFirefox);\n\n // Get the maximum message size of the remote peer.\n var remoteMMS = getMaxMessageSize(arguments[0], isFirefox);\n\n // Determine final maximum message size\n var maxMessageSize;\n if (canSendMMS === 0 && remoteMMS === 0) {\n maxMessageSize = Number.POSITIVE_INFINITY;\n } else if (canSendMMS === 0 || remoteMMS === 0) {\n maxMessageSize = Math.max(canSendMMS, remoteMMS);\n } else {\n maxMessageSize = Math.min(canSendMMS, remoteMMS);\n }\n\n // Create a dummy RTCSctpTransport object and the 'maxMessageSize'\n // attribute.\n var sctp = {};\n Object.defineProperty(sctp, 'maxMessageSize', {\n get: function get() {\n return maxMessageSize;\n }\n });\n this._sctp = sctp;\n }\n return origSetRemoteDescription.apply(this, arguments);\n };\n}\nfunction shimSendThrowTypeError(window) {\n if (!(window.RTCPeerConnection && 'createDataChannel' in window.RTCPeerConnection.prototype)) {\n return;\n }\n\n // Note: Although Firefox >= 57 has a native implementation, the maximum\n // message size can be reset for all data channels at a later stage.\n // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1426831\n\n function wrapDcSend(dc, pc) {\n var origDataChannelSend = dc.send;\n dc.send = function send() {\n var data = arguments[0];\n var length = data.length || data.size || data.byteLength;\n if (dc.readyState === 'open' && pc.sctp && length > pc.sctp.maxMessageSize) {\n throw new TypeError('Message too large (can send a maximum of ' + pc.sctp.maxMessageSize + ' bytes)');\n }\n return origDataChannelSend.apply(dc, arguments);\n };\n }\n var origCreateDataChannel = window.RTCPeerConnection.prototype.createDataChannel;\n window.RTCPeerConnection.prototype.createDataChannel = function createDataChannel() {\n var dataChannel = origCreateDataChannel.apply(this, arguments);\n wrapDcSend(dataChannel, this);\n return dataChannel;\n };\n utils.wrapPeerConnectionEvent(window, 'datachannel', function (e) {\n wrapDcSend(e.channel, e.target);\n return e;\n });\n}\n\n/* shims RTCConnectionState by pretending it is the same as iceConnectionState.\n * See https://bugs.chromium.org/p/webrtc/issues/detail?id=6145#c12\n * for why this is a valid hack in Chrome. In Firefox it is slightly incorrect\n * since DTLS failures would be hidden. See\n * https://bugzilla.mozilla.org/show_bug.cgi?id=1265827\n * for the Firefox tracking bug.\n */\nfunction shimConnectionState(window) {\n if (!window.RTCPeerConnection || 'connectionState' in window.RTCPeerConnection.prototype) {\n return;\n }\n var proto = window.RTCPeerConnection.prototype;\n Object.defineProperty(proto, 'connectionState', {\n get: function get() {\n return {\n completed: 'connected',\n checking: 'connecting'\n }[this.iceConnectionState] || this.iceConnectionState;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(proto, 'onconnectionstatechange', {\n get: function get() {\n return this._onconnectionstatechange || null;\n },\n set: function set(cb) {\n if (this._onconnectionstatechange) {\n this.removeEventListener('connectionstatechange', this._onconnectionstatechange);\n delete this._onconnectionstatechange;\n }\n if (cb) {\n this.addEventListener('connectionstatechange', this._onconnectionstatechange = cb);\n }\n },\n enumerable: true,\n configurable: true\n });\n ['setLocalDescription', 'setRemoteDescription'].forEach(function (method) {\n var origMethod = proto[method];\n proto[method] = function () {\n if (!this._connectionstatechangepoly) {\n this._connectionstatechangepoly = function (e) {\n var pc = e.target;\n if (pc._lastConnectionState !== pc.connectionState) {\n pc._lastConnectionState = pc.connectionState;\n var newEvent = new Event('connectionstatechange', e);\n pc.dispatchEvent(newEvent);\n }\n return e;\n };\n this.addEventListener('iceconnectionstatechange', this._connectionstatechangepoly);\n }\n return origMethod.apply(this, arguments);\n };\n });\n}\nfunction removeExtmapAllowMixed(window, browserDetails) {\n /* remove a=extmap-allow-mixed for webrtc.org < M71 */\n if (!window.RTCPeerConnection) {\n return;\n }\n if (browserDetails.browser === 'chrome' && browserDetails.version >= 71) {\n return;\n }\n if (browserDetails.browser === 'safari' && browserDetails._safariVersion >= 13.1) {\n return;\n }\n var nativeSRD = window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription(desc) {\n if (desc && desc.sdp && desc.sdp.indexOf('\\na=extmap-allow-mixed') !== -1) {\n var sdp = desc.sdp.split('\\n').filter(function (line) {\n return line.trim() !== 'a=extmap-allow-mixed';\n }).join('\\n');\n // Safari enforces read-only-ness of RTCSessionDescription fields.\n if (window.RTCSessionDescription && desc instanceof window.RTCSessionDescription) {\n arguments[0] = new window.RTCSessionDescription({\n type: desc.type,\n sdp: sdp\n });\n } else {\n desc.sdp = sdp;\n }\n }\n return nativeSRD.apply(this, arguments);\n };\n}\nfunction shimAddIceCandidateNullOrEmpty(window, browserDetails) {\n // Support for addIceCandidate(null or undefined)\n // as well as addIceCandidate({candidate: \"\", ...})\n // https://bugs.chromium.org/p/chromium/issues/detail?id=978582\n // Note: must be called before other polyfills which change the signature.\n if (!(window.RTCPeerConnection && window.RTCPeerConnection.prototype)) {\n return;\n }\n var nativeAddIceCandidate = window.RTCPeerConnection.prototype.addIceCandidate;\n if (!nativeAddIceCandidate || nativeAddIceCandidate.length === 0) {\n return;\n }\n window.RTCPeerConnection.prototype.addIceCandidate = function addIceCandidate() {\n if (!arguments[0]) {\n if (arguments[1]) {\n arguments[1].apply(null);\n }\n return Promise.resolve();\n }\n // Firefox 68+ emits and processes {candidate: \"\", ...}, ignore\n // in older versions.\n // Native support for ignoring exists for Chrome M77+.\n // Safari ignores as well, exact version unknown but works in the same\n // version that also ignores addIceCandidate(null).\n if ((browserDetails.browser === 'chrome' && browserDetails.version < 78 || browserDetails.browser === 'firefox' && browserDetails.version < 68 || browserDetails.browser === 'safari') && arguments[0] && arguments[0].candidate === '') {\n return Promise.resolve();\n }\n return nativeAddIceCandidate.apply(this, arguments);\n };\n}\n\n// Note: Make sure to call this ahead of APIs that modify\n// setLocalDescription.length\nfunction shimParameterlessSetLocalDescription(window, browserDetails) {\n if (!(window.RTCPeerConnection && window.RTCPeerConnection.prototype)) {\n return;\n }\n var nativeSetLocalDescription = window.RTCPeerConnection.prototype.setLocalDescription;\n if (!nativeSetLocalDescription || nativeSetLocalDescription.length === 0) {\n return;\n }\n window.RTCPeerConnection.prototype.setLocalDescription = function setLocalDescription() {\n var _this = this;\n var desc = arguments[0] || {};\n if (_typeof(desc) !== 'object' || desc.type && desc.sdp) {\n return nativeSetLocalDescription.apply(this, arguments);\n }\n // The remaining steps should technically happen when SLD comes off the\n // RTCPeerConnection's operations chain (not ahead of going on it), but\n // this is too difficult to shim. Instead, this shim only covers the\n // common case where the operations chain is empty. This is imperfect, but\n // should cover many cases. Rationale: Even if we can't reduce the glare\n // window to zero on imperfect implementations, there's value in tapping\n // into the perfect negotiation pattern that several browsers support.\n desc = {\n type: desc.type,\n sdp: desc.sdp\n };\n if (!desc.type) {\n switch (this.signalingState) {\n case 'stable':\n case 'have-local-offer':\n case 'have-remote-pranswer':\n desc.type = 'offer';\n break;\n default:\n desc.type = 'answer';\n break;\n }\n }\n if (desc.sdp || desc.type !== 'offer' && desc.type !== 'answer') {\n return nativeSetLocalDescription.apply(this, [desc]);\n }\n var func = desc.type === 'offer' ? this.createOffer : this.createAnswer;\n return func.apply(this).then(function (d) {\n return nativeSetLocalDescription.apply(_this, [d]);\n });\n };\n}\n", "\"use strict\";\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.adapterFactory = adapterFactory;\nvar utils = _interopRequireWildcard(require(\"./utils\"));\nvar chromeShim = _interopRequireWildcard(require(\"./chrome/chrome_shim\"));\nvar firefoxShim = _interopRequireWildcard(require(\"./firefox/firefox_shim\"));\nvar safariShim = _interopRequireWildcard(require(\"./safari/safari_shim\"));\nvar commonShim = _interopRequireWildcard(require(\"./common_shim\"));\nvar sdp = _interopRequireWildcard(require(\"sdp\"));\nfunction _interopRequireWildcard(e, t) { if (\"function\" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, \"default\": e }; if (null === e || \"object\" != _typeof(e) && \"function\" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) \"default\" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }\n/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n\n// Browser shims.\n\n// Shimming starts here.\nfunction adapterFactory() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n window = _ref.window;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n shimChrome: true,\n shimFirefox: true,\n shimSafari: true\n };\n // Utils.\n var logging = utils.log;\n var browserDetails = utils.detectBrowser(window);\n var adapter = {\n browserDetails: browserDetails,\n commonShim: commonShim,\n extractVersion: utils.extractVersion,\n disableLog: utils.disableLog,\n disableWarnings: utils.disableWarnings,\n // Expose sdp as a convenience. For production apps include directly.\n sdp: sdp\n };\n\n // Shim browser if found.\n switch (browserDetails.browser) {\n case 'chrome':\n if (!chromeShim || !chromeShim.shimPeerConnection || !options.shimChrome) {\n logging('Chrome shim is not included in this adapter release.');\n return adapter;\n }\n if (browserDetails.version === null) {\n logging('Chrome shim can not determine version, not shimming.');\n return adapter;\n }\n logging('adapter.js shimming chrome.');\n // Export to the adapter global object visible in the browser.\n adapter.browserShim = chromeShim;\n\n // Must be called before shimPeerConnection.\n commonShim.shimAddIceCandidateNullOrEmpty(window, browserDetails);\n commonShim.shimParameterlessSetLocalDescription(window, browserDetails);\n chromeShim.shimGetUserMedia(window, browserDetails);\n chromeShim.shimMediaStream(window, browserDetails);\n chromeShim.shimPeerConnection(window, browserDetails);\n chromeShim.shimOnTrack(window, browserDetails);\n chromeShim.shimAddTrackRemoveTrack(window, browserDetails);\n chromeShim.shimGetSendersWithDtmf(window, browserDetails);\n chromeShim.shimSenderReceiverGetStats(window, browserDetails);\n chromeShim.fixNegotiationNeeded(window, browserDetails);\n commonShim.shimRTCIceCandidate(window, browserDetails);\n commonShim.shimRTCIceCandidateRelayProtocol(window, browserDetails);\n commonShim.shimConnectionState(window, browserDetails);\n commonShim.shimMaxMessageSize(window, browserDetails);\n commonShim.shimSendThrowTypeError(window, browserDetails);\n commonShim.removeExtmapAllowMixed(window, browserDetails);\n break;\n case 'firefox':\n if (!firefoxShim || !firefoxShim.shimPeerConnection || !options.shimFirefox) {\n logging('Firefox shim is not included in this adapter release.');\n return adapter;\n }\n logging('adapter.js shimming firefox.');\n // Export to the adapter global object visible in the browser.\n adapter.browserShim = firefoxShim;\n\n // Must be called before shimPeerConnection.\n commonShim.shimAddIceCandidateNullOrEmpty(window, browserDetails);\n commonShim.shimParameterlessSetLocalDescription(window, browserDetails);\n firefoxShim.shimGetUserMedia(window, browserDetails);\n firefoxShim.shimPeerConnection(window, browserDetails);\n firefoxShim.shimOnTrack(window, browserDetails);\n firefoxShim.shimRemoveStream(window, browserDetails);\n firefoxShim.shimSenderGetStats(window, browserDetails);\n firefoxShim.shimReceiverGetStats(window, browserDetails);\n firefoxShim.shimRTCDataChannel(window, browserDetails);\n firefoxShim.shimAddTransceiver(window, browserDetails);\n firefoxShim.shimGetParameters(window, browserDetails);\n firefoxShim.shimCreateOffer(window, browserDetails);\n firefoxShim.shimCreateAnswer(window, browserDetails);\n commonShim.shimRTCIceCandidate(window, browserDetails);\n commonShim.shimConnectionState(window, browserDetails);\n commonShim.shimMaxMessageSize(window, browserDetails);\n commonShim.shimSendThrowTypeError(window, browserDetails);\n break;\n case 'safari':\n if (!safariShim || !options.shimSafari) {\n logging('Safari shim is not included in this adapter release.');\n return adapter;\n }\n logging('adapter.js shimming safari.');\n // Export to the adapter global object visible in the browser.\n adapter.browserShim = safariShim;\n\n // Must be called before shimCallbackAPI.\n commonShim.shimAddIceCandidateNullOrEmpty(window, browserDetails);\n commonShim.shimParameterlessSetLocalDescription(window, browserDetails);\n safariShim.shimRTCIceServerUrls(window, browserDetails);\n safariShim.shimCreateOfferLegacy(window, browserDetails);\n safariShim.shimCallbacksAPI(window, browserDetails);\n safariShim.shimLocalStreamsAPI(window, browserDetails);\n safariShim.shimRemoteStreamsAPI(window, browserDetails);\n safariShim.shimTrackEventTransceiver(window, browserDetails);\n safariShim.shimGetUserMedia(window, browserDetails);\n safariShim.shimAudioContext(window, browserDetails);\n commonShim.shimRTCIceCandidate(window, browserDetails);\n commonShim.shimRTCIceCandidateRelayProtocol(window, browserDetails);\n commonShim.shimMaxMessageSize(window, browserDetails);\n commonShim.shimSendThrowTypeError(window, browserDetails);\n commonShim.removeExtmapAllowMixed(window, browserDetails);\n break;\n default:\n logging('Unsupported browser!');\n break;\n }\n return adapter;\n}\n", "/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\nvar _adapter_factory = require(\"./adapter_factory.js\");\nvar adapter = (0, _adapter_factory.adapterFactory)({\n window: typeof window === 'undefined' ? undefined : window\n});\nvar _default = exports[\"default\"] = adapter;\n", "'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n", "// Integer Utility\n\nexport const UINT32_MAX = 0xffff_ffff;\n\n// DataView extension to handle int64 / uint64,\n// where the actual range is 53-bits integer (a.k.a. safe integer)\n\nexport function setUint64(view: DataView, offset: number, value: number): void {\n const high = value / 0x1_0000_0000;\n const low = value; // high bits are truncated by DataView\n view.setUint32(offset, high);\n view.setUint32(offset + 4, low);\n}\n\nexport function setInt64(view: DataView, offset: number, value: number): void {\n const high = Math.floor(value / 0x1_0000_0000);\n const low = value; // high bits are truncated by DataView\n view.setUint32(offset, high);\n view.setUint32(offset + 4, low);\n}\n\nexport function getInt64(view: DataView, offset: number): number {\n const high = view.getInt32(offset);\n const low = view.getUint32(offset + 4);\n return high * 0x1_0000_0000 + low;\n}\n\nexport function getUint64(view: DataView, offset: number): number {\n const high = view.getUint32(offset);\n const low = view.getUint32(offset + 4);\n return high * 0x1_0000_0000 + low;\n}\n", "/* eslint-disable @typescript-eslint/no-unnecessary-condition */\nimport { UINT32_MAX } from \"./int\";\n\nconst TEXT_ENCODING_AVAILABLE =\n (typeof process === \"undefined\" || process?.env?.[\"TEXT_ENCODING\"] !== \"never\") &&\n typeof TextEncoder !== \"undefined\" &&\n typeof TextDecoder !== \"undefined\";\n\nexport function utf8Count(str: string): number {\n const strLength = str.length;\n\n let byteLength = 0;\n let pos = 0;\n while (pos < strLength) {\n let value = str.charCodeAt(pos++);\n\n if ((value & 0xffffff80) === 0) {\n // 1-byte\n byteLength++;\n continue;\n } else if ((value & 0xfffff800) === 0) {\n // 2-bytes\n byteLength += 2;\n } else {\n // handle surrogate pair\n if (value >= 0xd800 && value <= 0xdbff) {\n // high surrogate\n if (pos < strLength) {\n const extra = str.charCodeAt(pos);\n if ((extra & 0xfc00) === 0xdc00) {\n ++pos;\n value = ((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000;\n }\n }\n }\n\n if ((value & 0xffff0000) === 0) {\n // 3-byte\n byteLength += 3;\n } else {\n // 4-byte\n byteLength += 4;\n }\n }\n }\n return byteLength;\n}\n\nexport function utf8EncodeJs(str: string, output: Uint8Array, outputOffset: number): void {\n const strLength = str.length;\n let offset = outputOffset;\n let pos = 0;\n while (pos < strLength) {\n let value = str.charCodeAt(pos++);\n\n if ((value & 0xffffff80) === 0) {\n // 1-byte\n output[offset++] = value;\n continue;\n } else if ((value & 0xfffff800) === 0) {\n // 2-bytes\n output[offset++] = ((value >> 6) & 0x1f) | 0xc0;\n } else {\n // handle surrogate pair\n if (value >= 0xd800 && value <= 0xdbff) {\n // high surrogate\n if (pos < strLength) {\n const extra = str.charCodeAt(pos);\n if ((extra & 0xfc00) === 0xdc00) {\n ++pos;\n value = ((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000;\n }\n }\n }\n\n if ((value & 0xffff0000) === 0) {\n // 3-byte\n output[offset++] = ((value >> 12) & 0x0f) | 0xe0;\n output[offset++] = ((value >> 6) & 0x3f) | 0x80;\n } else {\n // 4-byte\n output[offset++] = ((value >> 18) & 0x07) | 0xf0;\n output[offset++] = ((value >> 12) & 0x3f) | 0x80;\n output[offset++] = ((value >> 6) & 0x3f) | 0x80;\n }\n }\n\n output[offset++] = (value & 0x3f) | 0x80;\n }\n}\n\nconst sharedTextEncoder = TEXT_ENCODING_AVAILABLE ? new TextEncoder() : undefined;\nexport const TEXT_ENCODER_THRESHOLD = !TEXT_ENCODING_AVAILABLE\n ? UINT32_MAX\n : typeof process !== \"undefined\" && process?.env?.[\"TEXT_ENCODING\"] !== \"force\"\n ? 200\n : 0;\n\nfunction utf8EncodeTEencode(str: string, output: Uint8Array, outputOffset: number): void {\n output.set(sharedTextEncoder!.encode(str), outputOffset);\n}\n\nfunction utf8EncodeTEencodeInto(str: string, output: Uint8Array, outputOffset: number): void {\n sharedTextEncoder!.encodeInto(str, output.subarray(outputOffset));\n}\n\nexport const utf8EncodeTE = sharedTextEncoder?.encodeInto ? utf8EncodeTEencodeInto : utf8EncodeTEencode;\n\nconst CHUNK_SIZE = 0x1_000;\n\nexport function utf8DecodeJs(bytes: Uint8Array, inputOffset: number, byteLength: number): string {\n let offset = inputOffset;\n const end = offset + byteLength;\n\n const units: Array<number> = [];\n let result = \"\";\n while (offset < end) {\n const byte1 = bytes[offset++]!;\n if ((byte1 & 0x80) === 0) {\n // 1 byte\n units.push(byte1);\n } else if ((byte1 & 0xe0) === 0xc0) {\n // 2 bytes\n const byte2 = bytes[offset++]! & 0x3f;\n units.push(((byte1 & 0x1f) << 6) | byte2);\n } else if ((byte1 & 0xf0) === 0xe0) {\n // 3 bytes\n const byte2 = bytes[offset++]! & 0x3f;\n const byte3 = bytes[offset++]! & 0x3f;\n units.push(((byte1 & 0x1f) << 12) | (byte2 << 6) | byte3);\n } else if ((byte1 & 0xf8) === 0xf0) {\n // 4 bytes\n const byte2 = bytes[offset++]! & 0x3f;\n const byte3 = bytes[offset++]! & 0x3f;\n const byte4 = bytes[offset++]! & 0x3f;\n let unit = ((byte1 & 0x07) << 0x12) | (byte2 << 0x0c) | (byte3 << 0x06) | byte4;\n if (unit > 0xffff) {\n unit -= 0x10000;\n units.push(((unit >>> 10) & 0x3ff) | 0xd800);\n unit = 0xdc00 | (unit & 0x3ff);\n }\n units.push(unit);\n } else {\n units.push(byte1);\n }\n\n if (units.length >= CHUNK_SIZE) {\n result += String.fromCharCode(...units);\n units.length = 0;\n }\n }\n\n if (units.length > 0) {\n result += String.fromCharCode(...units);\n }\n\n return result;\n}\n\nconst sharedTextDecoder = TEXT_ENCODING_AVAILABLE ? new TextDecoder() : null;\nexport const TEXT_DECODER_THRESHOLD = !TEXT_ENCODING_AVAILABLE\n ? UINT32_MAX\n : typeof process !== \"undefined\" && process?.env?.[\"TEXT_DECODER\"] !== \"force\"\n ? 200\n : 0;\n\nexport function utf8DecodeTD(bytes: Uint8Array, inputOffset: number, byteLength: number): string {\n const stringBytes = bytes.subarray(inputOffset, inputOffset + byteLength);\n return sharedTextDecoder!.decode(stringBytes);\n}\n", "/**\n * ExtData is used to handle Extension Types that are not registered to ExtensionCodec.\n */\nexport class ExtData {\n constructor(readonly type: number, readonly data: Uint8Array) {}\n}\n", "export class DecodeError extends Error {\n constructor(message: string) {\n super(message);\n\n // fix the prototype chain in a cross-platform way\n const proto: typeof DecodeError.prototype = Object.create(DecodeError.prototype);\n Object.setPrototypeOf(this, proto);\n\n Object.defineProperty(this, \"name\", {\n configurable: true,\n enumerable: false,\n value: DecodeError.name,\n });\n }\n}\n", "// https://github.com/msgpack/msgpack/blob/master/spec.md#timestamp-extension-type\nimport { DecodeError } from \"./DecodeError\";\nimport { getInt64, setInt64 } from \"./utils/int\";\n\nexport const EXT_TIMESTAMP = -1;\n\nexport type TimeSpec = {\n sec: number;\n nsec: number;\n};\n\nconst TIMESTAMP32_MAX_SEC = 0x100000000 - 1; // 32-bit unsigned int\nconst TIMESTAMP64_MAX_SEC = 0x400000000 - 1; // 34-bit unsigned int\n\nexport function encodeTimeSpecToTimestamp({ sec, nsec }: TimeSpec): Uint8Array {\n if (sec >= 0 && nsec >= 0 && sec <= TIMESTAMP64_MAX_SEC) {\n // Here sec >= 0 && nsec >= 0\n if (nsec === 0 && sec <= TIMESTAMP32_MAX_SEC) {\n // timestamp 32 = { sec32 (unsigned) }\n const rv = new Uint8Array(4);\n const view = new DataView(rv.buffer);\n view.setUint32(0, sec);\n return rv;\n } else {\n // timestamp 64 = { nsec30 (unsigned), sec34 (unsigned) }\n const secHigh = sec / 0x100000000;\n const secLow = sec & 0xffffffff;\n const rv = new Uint8Array(8);\n const view = new DataView(rv.buffer);\n // nsec30 | secHigh2\n view.setUint32(0, (nsec << 2) | (secHigh & 0x3));\n // secLow32\n view.setUint32(4, secLow);\n return rv;\n }\n } else {\n // timestamp 96 = { nsec32 (unsigned), sec64 (signed) }\n const rv = new Uint8Array(12);\n const view = new DataView(rv.buffer);\n view.setUint32(0, nsec);\n setInt64(view, 4, sec);\n return rv;\n }\n}\n\nexport function encodeDateToTimeSpec(date: Date): TimeSpec {\n const msec = date.getTime();\n const sec = Math.floor(msec / 1e3);\n const nsec = (msec - sec * 1e3) * 1e6;\n\n // Normalizes { sec, nsec } to ensure nsec is unsigned.\n const nsecInSec = Math.floor(nsec / 1e9);\n return {\n sec: sec + nsecInSec,\n nsec: nsec - nsecInSec * 1e9,\n };\n}\n\nexport function encodeTimestampExtension(object: unknown): Uint8Array | null {\n if (object instanceof Date) {\n const timeSpec = encodeDateToTimeSpec(object);\n return encodeTimeSpecToTimestamp(timeSpec);\n } else {\n return null;\n }\n}\n\nexport function decodeTimestampToTimeSpec(data: Uint8Array): TimeSpec {\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n // data may be 32, 64, or 96 bits\n switch (data.byteLength) {\n case 4: {\n // timestamp 32 = { sec32 }\n const sec = view.getUint32(0);\n const nsec = 0;\n return { sec, nsec };\n }\n case 8: {\n // timestamp 64 = { nsec30, sec34 }\n const nsec30AndSecHigh2 = view.getUint32(0);\n const secLow32 = view.getUint32(4);\n const sec = (nsec30AndSecHigh2 & 0x3) * 0x100000000 + secLow32;\n const nsec = nsec30AndSecHigh2 >>> 2;\n return { sec, nsec };\n }\n case 12: {\n // timestamp 96 = { nsec32 (unsigned), sec64 (signed) }\n\n const sec = getInt64(view, 4);\n const nsec = view.getUint32(0);\n return { sec, nsec };\n }\n default:\n throw new DecodeError(`Unrecognized data size for timestamp (expected 4, 8, or 12): ${data.length}`);\n }\n}\n\nexport function decodeTimestampExtension(data: Uint8Array): Date {\n const timeSpec = decodeTimestampToTimeSpec(data);\n return new Date(timeSpec.sec * 1e3 + timeSpec.nsec / 1e6);\n}\n\nexport const timestampExtension = {\n type: EXT_TIMESTAMP,\n encode: encodeTimestampExtension,\n decode: decodeTimestampExtension,\n};\n", "// ExtensionCodec to handle MessagePack extensions\n\nimport { ExtData } from \"./ExtData\";\nimport { timestampExtension } from \"./timestamp\";\n\nexport type ExtensionDecoderType<ContextType> = (\n data: Uint8Array,\n extensionType: number,\n context: ContextType,\n) => unknown;\n\nexport type ExtensionEncoderType<ContextType> = (input: unknown, context: ContextType) => Uint8Array | null;\n\n// immutable interface to ExtensionCodec\nexport type ExtensionCodecType<ContextType> = {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n __brand?: ContextType;\n tryToEncode(object: unknown, context: ContextType): ExtData | null;\n decode(data: Uint8Array, extType: number, context: ContextType): unknown;\n};\n\nexport class ExtensionCodec<ContextType = undefined> implements ExtensionCodecType<ContextType> {\n public static readonly defaultCodec: ExtensionCodecType<undefined> = new ExtensionCodec();\n\n // ensures ExtensionCodecType<X> matches ExtensionCodec<X>\n // this will make type errors a lot more clear\n // eslint-disable-next-line @typescript-eslint/naming-convention\n __brand?: ContextType;\n\n // built-in extensions\n private readonly builtInEncoders: Array<ExtensionEncoderType<ContextType> | undefined | null> = [];\n private readonly builtInDecoders: Array<ExtensionDecoderType<ContextType> | undefined | null> = [];\n\n // custom extensions\n private readonly encoders: Array<ExtensionEncoderType<ContextType> | undefined | null> = [];\n private readonly decoders: Array<ExtensionDecoderType<ContextType> | undefined | null> = [];\n\n public constructor() {\n this.register(timestampExtension);\n }\n\n public register({\n type,\n encode,\n decode,\n }: {\n type: number;\n encode: ExtensionEncoderType<ContextType>;\n decode: ExtensionDecoderType<ContextType>;\n }): void {\n if (type >= 0) {\n // custom extensions\n this.encoders[type] = encode;\n this.decoders[type] = decode;\n } else {\n // built-in extensions\n const index = 1 + type;\n this.builtInEncoders[index] = encode;\n this.builtInDecoders[index] = decode;\n }\n }\n\n public tryToEncode(object: unknown, context: ContextType): ExtData | null {\n // built-in extensions\n for (let i = 0; i < this.builtInEncoders.length; i++) {\n const encodeExt = this.builtInEncoders[i];\n if (encodeExt != null) {\n const data = encodeExt(object, context);\n if (data != null) {\n const type = -1 - i;\n return new ExtData(type, data);\n }\n }\n }\n\n // custom extensions\n for (let i = 0; i < this.encoders.length; i++) {\n const encodeExt = this.encoders[i];\n if (encodeExt != null) {\n const data = encodeExt(object, context);\n if (data != null) {\n const type = i;\n return new ExtData(type, data);\n }\n }\n }\n\n if (object instanceof ExtData) {\n // to keep ExtData as is\n return object;\n }\n return null;\n }\n\n public decode(data: Uint8Array, type: number, context: ContextType): unknown {\n const decodeExt = type < 0 ? this.builtInDecoders[-1 - type] : this.decoders[type];\n if (decodeExt) {\n return decodeExt(data, type, context);\n } else {\n // decode() does not fail, returns ExtData instead.\n return new ExtData(type, data);\n }\n }\n}\n", "export function ensureUint8Array(buffer: ArrayLike<number> | Uint8Array | ArrayBufferView | ArrayBuffer): Uint8Array {\n if (buffer instanceof Uint8Array) {\n return buffer;\n } else if (ArrayBuffer.isView(buffer)) {\n return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n } else if (buffer instanceof ArrayBuffer) {\n return new Uint8Array(buffer);\n } else {\n // ArrayLike<number>\n return Uint8Array.from(buffer);\n }\n}\n\nexport function createDataView(buffer: ArrayLike<number> | ArrayBufferView | ArrayBuffer): DataView {\n if (buffer instanceof ArrayBuffer) {\n return new DataView(buffer);\n }\n\n const bufferView = ensureUint8Array(buffer);\n return new DataView(bufferView.buffer, bufferView.byteOffset, bufferView.byteLength);\n}\n", "import { utf8EncodeJs, utf8Count, TEXT_ENCODER_THRESHOLD, utf8EncodeTE } from \"./utils/utf8\";\nimport { ExtensionCodec, ExtensionCodecType } from \"./ExtensionCodec\";\nimport { setInt64, setUint64 } from \"./utils/int\";\nimport { ensureUint8Array } from \"./utils/typedArrays\";\nimport type { ExtData } from \"./ExtData\";\n\nexport const DEFAULT_MAX_DEPTH = 100;\nexport const DEFAULT_INITIAL_BUFFER_SIZE = 2048;\n\nexport class Encoder<ContextType = undefined> {\n private pos = 0;\n private view = new DataView(new ArrayBuffer(this.initialBufferSize));\n private bytes = new Uint8Array(this.view.buffer);\n\n public constructor(\n private readonly extensionCodec: ExtensionCodecType<ContextType> = ExtensionCodec.defaultCodec as any,\n private readonly context: ContextType = undefined as any,\n private readonly maxDepth = DEFAULT_MAX_DEPTH,\n private readonly initialBufferSize = DEFAULT_INITIAL_BUFFER_SIZE,\n private readonly sortKeys = false,\n private readonly forceFloat32 = false,\n private readonly ignoreUndefined = false,\n private readonly forceIntegerToFloat = false,\n ) {}\n\n private reinitializeState() {\n this.pos = 0;\n }\n\n /**\n * This is almost equivalent to {@link Encoder#encode}, but it returns an reference of the encoder's internal buffer and thus much faster than {@link Encoder#encode}.\n *\n * @returns Encodes the object and returns a shared reference the encoder's internal buffer.\n */\n public encodeSharedRef(object: unknown): Uint8Array {\n this.reinitializeState();\n this.doEncode(object, 1);\n return this.bytes.subarray(0, this.pos);\n }\n\n /**\n * @returns Encodes the object and returns a copy of the encoder's internal buffer.\n */\n public encode(object: unknown): Uint8Array {\n this.reinitializeState();\n this.doEncode(object, 1);\n return this.bytes.slice(0, this.pos);\n }\n\n private doEncode(object: unknown, depth: number): void {\n if (depth > this.maxDepth) {\n throw new Error(`Too deep objects in depth ${depth}`);\n }\n\n if (object == null) {\n this.encodeNil();\n } else if (typeof object === \"boolean\") {\n this.encodeBoolean(object);\n } else if (typeof object === \"number\") {\n this.encodeNumber(object);\n } else if (typeof object === \"string\") {\n this.encodeString(object);\n } else {\n this.encodeObject(object, depth);\n }\n }\n\n private ensureBufferSizeToWrite(sizeToWrite: number) {\n const requiredSize = this.pos + sizeToWrite;\n\n if (this.view.byteLength < requiredSize) {\n this.resizeBuffer(requiredSize * 2);\n }\n }\n\n private resizeBuffer(newSize: number) {\n const newBuffer = new ArrayBuffer(newSize);\n const newBytes = new Uint8Array(newBuffer);\n const newView = new DataView(newBuffer);\n\n newBytes.set(this.bytes);\n\n this.view = newView;\n this.bytes = newBytes;\n }\n\n private encodeNil() {\n this.writeU8(0xc0);\n }\n\n private encodeBoolean(object: boolean) {\n if (object === false) {\n this.writeU8(0xc2);\n } else {\n this.writeU8(0xc3);\n }\n }\n private encodeNumber(object: number) {\n if (Number.isSafeInteger(object) && !this.forceIntegerToFloat) {\n if (object >= 0) {\n if (object < 0x80) {\n // positive fixint\n this.writeU8(object);\n } else if (object < 0x100) {\n // uint 8\n this.writeU8(0xcc);\n this.writeU8(object);\n } else if (object < 0x10000) {\n // uint 16\n this.writeU8(0xcd);\n this.writeU16(object);\n } else if (object < 0x100000000) {\n // uint 32\n this.writeU8(0xce);\n this.writeU32(object);\n } else {\n // uint 64\n this.writeU8(0xcf);\n this.writeU64(object);\n }\n } else {\n if (object >= -0x20) {\n // negative fixint\n this.writeU8(0xe0 | (object + 0x20));\n } else if (object >= -0x80) {\n // int 8\n this.writeU8(0xd0);\n this.writeI8(object);\n } else if (object >= -0x8000) {\n // int 16\n this.writeU8(0xd1);\n this.writeI16(object);\n } else if (object >= -0x80000000) {\n // int 32\n this.writeU8(0xd2);\n this.writeI32(object);\n } else {\n // int 64\n this.writeU8(0xd3);\n this.writeI64(object);\n }\n }\n } else {\n // non-integer numbers\n if (this.forceFloat32) {\n // float 32\n this.writeU8(0xca);\n this.writeF32(object);\n } else {\n // float 64\n this.writeU8(0xcb);\n this.writeF64(object);\n }\n }\n }\n\n private writeStringHeader(byteLength: number) {\n if (byteLength < 32) {\n // fixstr\n this.writeU8(0xa0 + byteLength);\n } else if (byteLength < 0x100) {\n // str 8\n this.writeU8(0xd9);\n this.writeU8(byteLength);\n } else if (byteLength < 0x10000) {\n // str 16\n this.writeU8(0xda);\n this.writeU16(byteLength);\n } else if (byteLength < 0x100000000) {\n // str 32\n this.writeU8(0xdb);\n this.writeU32(byteLength);\n } else {\n throw new Error(`Too long string: ${byteLength} bytes in UTF-8`);\n }\n }\n\n private encodeString(object: string) {\n const maxHeaderSize = 1 + 4;\n const strLength = object.length;\n\n if (strLength > TEXT_ENCODER_THRESHOLD) {\n const byteLength = utf8Count(object);\n this.ensureBufferSizeToWrite(maxHeaderSize + byteLength);\n this.writeStringHeader(byteLength);\n utf8EncodeTE(object, this.bytes, this.pos);\n this.pos += byteLength;\n } else {\n const byteLength = utf8Count(object);\n this.ensureBufferSizeToWrite(maxHeaderSize + byteLength);\n this.writeStringHeader(byteLength);\n utf8EncodeJs(object, this.bytes, this.pos);\n this.pos += byteLength;\n }\n }\n\n private encodeObject(object: unknown, depth: number) {\n // try to encode objects with custom codec first of non-primitives\n const ext = this.extensionCodec.tryToEncode(object, this.context);\n if (ext != null) {\n this.encodeExtension(ext);\n } else if (Array.isArray(object)) {\n this.encodeArray(object, depth);\n } else if (ArrayBuffer.isView(object)) {\n this.encodeBinary(object);\n } else if (typeof object === \"object\") {\n this.encodeMap(object as Record<string, unknown>, depth);\n } else {\n // symbol, function and other special object come here unless extensionCodec handles them.\n throw new Error(`Unrecognized object: ${Object.prototype.toString.apply(object)}`);\n }\n }\n\n private encodeBinary(object: ArrayBufferView) {\n const size = object.byteLength;\n if (size < 0x100) {\n // bin 8\n this.writeU8(0xc4);\n this.writeU8(size);\n } else if (size < 0x10000) {\n // bin 16\n this.writeU8(0xc5);\n this.writeU16(size);\n } else if (size < 0x100000000) {\n // bin 32\n this.writeU8(0xc6);\n this.writeU32(size);\n } else {\n throw new Error(`Too large binary: ${size}`);\n }\n const bytes = ensureUint8Array(object);\n this.writeU8a(bytes);\n }\n\n private encodeArray(object: Array<unknown>, depth: number) {\n const size = object.length;\n if (size < 16) {\n // fixarray\n this.writeU8(0x90 + size);\n } else if (size < 0x10000) {\n // array 16\n this.writeU8(0xdc);\n this.writeU16(size);\n } else if (size < 0x100000000) {\n // array 32\n this.writeU8(0xdd);\n this.writeU32(size);\n } else {\n throw new Error(`Too large array: ${size}`);\n }\n for (const item of object) {\n this.doEncode(item, depth + 1);\n }\n }\n\n private countWithoutUndefined(object: Record<string, unknown>, keys: ReadonlyArray<string>): number {\n let count = 0;\n\n for (const key of keys) {\n if (object[key] !== undefined) {\n count++;\n }\n }\n\n return count;\n }\n\n private encodeMap(object: Record<string, unknown>, depth: number) {\n const keys = Object.keys(object);\n if (this.sortKeys) {\n keys.sort();\n }\n\n const size = this.ignoreUndefined ? this.countWithoutUndefined(object, keys) : keys.length;\n\n if (size < 16) {\n // fixmap\n this.writeU8(0x80 + size);\n } else if (size < 0x10000) {\n // map 16\n this.writeU8(0xde);\n this.writeU16(size);\n } else if (size < 0x100000000) {\n // map 32\n this.writeU8(0xdf);\n this.writeU32(size);\n } else {\n throw new Error(`Too large map object: ${size}`);\n }\n\n for (const key of keys) {\n const value = object[key];\n\n if (!(this.ignoreUndefined && value === undefined)) {\n this.encodeString(key);\n this.doEncode(value, depth + 1);\n }\n }\n }\n\n private encodeExtension(ext: ExtData) {\n const size = ext.data.length;\n if (size === 1) {\n // fixext 1\n this.writeU8(0xd4);\n } else if (size === 2) {\n // fixext 2\n this.writeU8(0xd5);\n } else if (size === 4) {\n // fixext 4\n this.writeU8(0xd6);\n } else if (size === 8) {\n // fixext 8\n this.writeU8(0xd7);\n } else if (size === 16) {\n // fixext 16\n this.writeU8(0xd8);\n } else if (size < 0x100) {\n // ext 8\n this.writeU8(0xc7);\n this.writeU8(size);\n } else if (size < 0x10000) {\n // ext 16\n this.writeU8(0xc8);\n this.writeU16(size);\n } else if (size < 0x100000000) {\n // ext 32\n this.writeU8(0xc9);\n this.writeU32(size);\n } else {\n throw new Error(`Too large extension object: ${size}`);\n }\n this.writeI8(ext.type);\n this.writeU8a(ext.data);\n }\n\n private writeU8(value: number) {\n this.ensureBufferSizeToWrite(1);\n\n this.view.setUint8(this.pos, value);\n this.pos++;\n }\n\n private writeU8a(values: ArrayLike<number>) {\n const size = values.length;\n this.ensureBufferSizeToWrite(size);\n\n this.bytes.set(values, this.pos);\n this.pos += size;\n }\n\n private writeI8(value: number) {\n this.ensureBufferSizeToWrite(1);\n\n this.view.setInt8(this.pos, value);\n this.pos++;\n }\n\n private writeU16(value: number) {\n this.ensureBufferSizeToWrite(2);\n\n this.view.setUint16(this.pos, value);\n this.pos += 2;\n }\n\n private writeI16(value: number) {\n this.ensureBufferSizeToWrite(2);\n\n this.view.setInt16(this.pos, value);\n this.pos += 2;\n }\n\n private writeU32(value: number) {\n this.ensureBufferSizeToWrite(4);\n\n this.view.setUint32(this.pos, value);\n this.pos += 4;\n }\n\n private writeI32(value: number) {\n this.ensureBufferSizeToWrite(4);\n\n this.view.setInt32(this.pos, value);\n this.pos += 4;\n }\n\n private writeF32(value: number) {\n this.ensureBufferSizeToWrite(4);\n this.view.setFloat32(this.pos, value);\n this.pos += 4;\n }\n\n private writeF64(value: number) {\n this.ensureBufferSizeToWrite(8);\n this.view.setFloat64(this.pos, value);\n this.pos += 8;\n }\n\n private writeU64(value: number) {\n this.ensureBufferSizeToWrite(8);\n\n setUint64(this.view, this.pos, value);\n this.pos += 8;\n }\n\n private writeI64(value: number) {\n this.ensureBufferSizeToWrite(8);\n\n setInt64(this.view, this.pos, value);\n this.pos += 8;\n }\n}\n", "import { Encoder } from \"./Encoder\";\nimport type { ExtensionCodecType } from \"./ExtensionCodec\";\nimport type { ContextOf, SplitUndefined } from \"./context\";\n\nexport type EncodeOptions<ContextType = undefined> = Partial<\n Readonly<{\n extensionCodec: ExtensionCodecType<ContextType>;\n\n /**\n * The maximum depth in nested objects and arrays.\n *\n * Defaults to 100.\n */\n maxDepth: number;\n\n /**\n * The initial size of the internal buffer.\n *\n * Defaults to 2048.\n */\n initialBufferSize: number;\n\n /**\n * If `true`, the keys of an object is sorted. In other words, the encoded\n * binary is canonical and thus comparable to another encoded binary.\n *\n * Defaults to `false`. If enabled, it spends more time in encoding objects.\n */\n sortKeys: boolean;\n /**\n * If `true`, non-integer numbers are encoded in float32, not in float64 (the default).\n *\n * Only use it if precisions don't matter.\n *\n * Defaults to `false`.\n */\n forceFloat32: boolean;\n\n /**\n * If `true`, an object property with `undefined` value are ignored.\n * e.g. `{ foo: undefined }` will be encoded as `{}`, as `JSON.stringify()` does.\n *\n * Defaults to `false`. If enabled, it spends more time in encoding objects.\n */\n ignoreUndefined: boolean;\n\n /**\n * If `true`, integer numbers are encoded as floating point numbers,\n * with the `forceFloat32` option taken into account.\n *\n * Defaults to `false`.\n */\n forceIntegerToFloat: boolean;\n }>\n> &\n ContextOf<ContextType>;\n\nconst defaultEncodeOptions: EncodeOptions = {};\n\n/**\n * It encodes `value` in the MessagePack format and\n * returns a byte buffer.\n *\n * The returned buffer is a slice of a larger `ArrayBuffer`, so you have to use its `#byteOffset` and `#byteLength` in order to convert it to another typed arrays including NodeJS `Buffer`.\n */\nexport function encode<ContextType = undefined>(\n value: unknown,\n options: EncodeOptions<SplitUndefined<ContextType>> = defaultEncodeOptions as any,\n): Uint8Array {\n const encoder = new Encoder(\n options.extensionCodec,\n (options as typeof options & { context: any }).context,\n options.maxDepth,\n options.initialBufferSize,\n options.sortKeys,\n options.forceFloat32,\n options.ignoreUndefined,\n options.forceIntegerToFloat,\n );\n return encoder.encodeSharedRef(value);\n}\n", "export function prettyByte(byte: number): string {\n return `${byte < 0 ? \"-\" : \"\"}0x${Math.abs(byte).toString(16).padStart(2, \"0\")}`;\n}\n", "import { utf8DecodeJs } from \"./utils/utf8\";\n\nconst DEFAULT_MAX_KEY_LENGTH = 16;\nconst DEFAULT_MAX_LENGTH_PER_KEY = 16;\n\nexport interface KeyDecoder {\n canBeCached(byteLength: number): boolean;\n decode(bytes: Uint8Array, inputOffset: number, byteLength: number): string;\n}\ninterface KeyCacheRecord {\n readonly bytes: Uint8Array;\n readonly str: string;\n}\n\nexport class CachedKeyDecoder implements KeyDecoder {\n hit = 0;\n miss = 0;\n private readonly caches: Array<Array<KeyCacheRecord>>;\n\n constructor(readonly maxKeyLength = DEFAULT_MAX_KEY_LENGTH, readonly maxLengthPerKey = DEFAULT_MAX_LENGTH_PER_KEY) {\n // avoid `new Array(N)`, which makes a sparse array,\n // because a sparse array is typically slower than a non-sparse array.\n this.caches = [];\n for (let i = 0; i < this.maxKeyLength; i++) {\n this.caches.push([]);\n }\n }\n\n public canBeCached(byteLength: number): boolean {\n return byteLength > 0 && byteLength <= this.maxKeyLength;\n }\n\n private find(bytes: Uint8Array, inputOffset: number, byteLength: number): string | null {\n const records = this.caches[byteLength - 1]!;\n\n FIND_CHUNK: for (const record of records) {\n const recordBytes = record.bytes;\n\n for (let j = 0; j < byteLength; j++) {\n if (recordBytes[j] !== bytes[inputOffset + j]) {\n continue FIND_CHUNK;\n }\n }\n return record.str;\n }\n return null;\n }\n\n private store(bytes: Uint8Array, value: string) {\n const records = this.caches[bytes.length - 1]!;\n const record: KeyCacheRecord = { bytes, str: value };\n\n if (records.length >= this.maxLengthPerKey) {\n // `records` are full!\n // Set `record` to an arbitrary position.\n records[(Math.random() * records.length) | 0] = record;\n } else {\n records.push(record);\n }\n }\n\n public decode(bytes: Uint8Array, inputOffset: number, byteLength: number): string {\n const cachedValue = this.find(bytes, inputOffset, byteLength);\n if (cachedValue != null) {\n this.hit++;\n return cachedValue;\n }\n this.miss++;\n\n const str = utf8DecodeJs(bytes, inputOffset, byteLength);\n // Ensure to copy a slice of bytes because the byte may be NodeJS Buffer and Buffer#slice() returns a reference to its internal ArrayBuffer.\n const slicedCopyOfBytes = Uint8Array.prototype.slice.call(bytes, inputOffset, inputOffset + byteLength);\n this.store(slicedCopyOfBytes, str);\n return str;\n }\n}\n", "import { prettyByte } from \"./utils/prettyByte\";\nimport { ExtensionCodec, ExtensionCodecType } from \"./ExtensionCodec\";\nimport { getInt64, getUint64, UINT32_MAX } from \"./utils/int\";\nimport { utf8DecodeJs, TEXT_DECODER_THRESHOLD, utf8DecodeTD } from \"./utils/utf8\";\nimport { createDataView, ensureUint8Array } from \"./utils/typedArrays\";\nimport { CachedKeyDecoder, KeyDecoder } from \"./CachedKeyDecoder\";\nimport { DecodeError } from \"./DecodeError\";\n\nconst enum State {\n ARRAY,\n MAP_KEY,\n MAP_VALUE,\n}\n\ntype MapKeyType = string | number;\n\nconst isValidMapKeyType = (key: unknown): key is MapKeyType => {\n const keyType = typeof key;\n\n return keyType === \"string\" || keyType === \"number\";\n};\n\ntype StackMapState = {\n type: State.MAP_KEY | State.MAP_VALUE;\n size: number;\n key: MapKeyType | null;\n readCount: number;\n map: Record<string, unknown>;\n};\n\ntype StackArrayState = {\n type: State.ARRAY;\n size: number;\n array: Array<unknown>;\n position: number;\n};\n\ntype StackState = StackArrayState | StackMapState;\n\nconst HEAD_BYTE_REQUIRED = -1;\n\nconst EMPTY_VIEW = new DataView(new ArrayBuffer(0));\nconst EMPTY_BYTES = new Uint8Array(EMPTY_VIEW.buffer);\n\n// IE11: Hack to support IE11.\n// IE11: Drop this hack and just use RangeError when IE11 is obsolete.\nexport const DataViewIndexOutOfBoundsError: typeof Error = (() => {\n try {\n // IE11: The spec says it should throw RangeError,\n // IE11: but in IE11 it throws TypeError.\n EMPTY_VIEW.getInt8(0);\n } catch (e: any) {\n return e.constructor;\n }\n throw new Error(\"never reached\");\n})();\n\nconst MORE_DATA = new DataViewIndexOutOfBoundsError(\"Insufficient data\");\n\nconst sharedCachedKeyDecoder = new CachedKeyDecoder();\n\nexport class Decoder<ContextType = undefined> {\n private totalPos = 0;\n private pos = 0;\n\n private view = EMPTY_VIEW;\n private bytes = EMPTY_BYTES;\n private headByte = HEAD_BYTE_REQUIRED;\n private readonly stack: Array<StackState> = [];\n\n public constructor(\n private readonly extensionCodec: ExtensionCodecType<ContextType> = ExtensionCodec.defaultCodec as any,\n private readonly context: ContextType = undefined as any,\n private readonly maxStrLength = UINT32_MAX,\n private readonly maxBinLength = UINT32_MAX,\n private readonly maxArrayLength = UINT32_MAX,\n private readonly maxMapLength = UINT32_MAX,\n private readonly maxExtLength = UINT32_MAX,\n private readonly keyDecoder: KeyDecoder | null = sharedCachedKeyDecoder,\n ) {}\n\n private reinitializeState() {\n this.totalPos = 0;\n this.headByte = HEAD_BYTE_REQUIRED;\n this.stack.length = 0;\n\n // view, bytes, and pos will be re-initialized in setBuffer()\n }\n\n private setBuffer(buffer: ArrayLike<number> | BufferSource): void {\n this.bytes = ensureUint8Array(buffer);\n this.view = createDataView(this.bytes);\n this.pos = 0;\n }\n\n private appendBuffer(buffer: ArrayLike<number> | BufferSource) {\n if (this.headByte === HEAD_BYTE_REQUIRED && !this.hasRemaining(1)) {\n this.setBuffer(buffer);\n } else {\n const remainingData = this.bytes.subarray(this.pos);\n const newData = ensureUint8Array(buffer);\n\n // concat remainingData + newData\n const newBuffer = new Uint8Array(remainingData.length + newData.length);\n newBuffer.set(remainingData);\n newBuffer.set(newData, remainingData.length);\n this.setBuffer(newBuffer);\n }\n }\n\n private hasRemaining(size: number) {\n return this.view.byteLength - this.pos >= size;\n }\n\n private createExtraByteError(posToShow: number): Error {\n const { view, pos } = this;\n return new RangeError(`Extra ${view.byteLength - pos} of ${view.byteLength} byte(s) found at buffer[${posToShow}]`);\n }\n\n /**\n * @throws {@link DecodeError}\n * @throws {@link RangeError}\n */\n public decode(buffer: ArrayLike<number> | BufferSource): unknown {\n this.reinitializeState();\n this.setBuffer(buffer);\n\n const object = this.doDecodeSync();\n if (this.hasRemaining(1)) {\n throw this.createExtraByteError(this.pos);\n }\n return object;\n }\n\n public *decodeMulti(buffer: ArrayLike<number> | BufferSource): Generator<unknown, void, unknown> {\n this.reinitializeState();\n this.setBuffer(buffer);\n\n while (this.hasRemaining(1)) {\n yield this.doDecodeSync();\n }\n }\n\n public async decodeAsync(stream: AsyncIterable<ArrayLike<number> | BufferSource>): Promise<unknown> {\n let decoded = false;\n let object: unknown;\n for await (const buffer of stream) {\n if (decoded) {\n throw this.createExtraByteError(this.totalPos);\n }\n\n this.appendBuffer(buffer);\n\n try {\n object = this.doDecodeSync();\n decoded = true;\n } catch (e) {\n if (!(e instanceof DataViewIndexOutOfBoundsError)) {\n throw e; // rethrow\n }\n // fallthrough\n }\n this.totalPos += this.pos;\n }\n\n if (decoded) {\n if (this.hasRemaining(1)) {\n throw this.createExtraByteError(this.totalPos);\n }\n return object;\n }\n\n const { headByte, pos, totalPos } = this;\n throw new RangeError(\n `Insufficient data in parsing ${prettyByte(headByte)} at ${totalPos} (${pos} in the current buffer)`,\n );\n }\n\n public decodeArrayStream(\n stream: AsyncIterable<ArrayLike<number> | BufferSource>,\n ): AsyncGenerator<unknown, void, unknown> {\n return this.decodeMultiAsync(stream, true);\n }\n\n public decodeStream(stream: AsyncIterable<ArrayLike<number> | BufferSource>): AsyncGenerator<unknown, void, unknown> {\n return this.decodeMultiAsync(stream, false);\n }\n\n private async *decodeMultiAsync(stream: AsyncIterable<ArrayLike<number> | BufferSource>, isArray: boolean) {\n let isArrayHeaderRequired = isArray;\n let arrayItemsLeft = -1;\n\n for await (const buffer of stream) {\n if (isArray && arrayItemsLeft === 0) {\n throw this.createExtraByteError(this.totalPos);\n }\n\n this.appendBuffer(buffer);\n\n if (isArrayHeaderRequired) {\n arrayItemsLeft = this.readArraySize();\n isArrayHeaderRequired = false;\n this.complete();\n }\n\n try {\n while (true) {\n yield this.doDecodeSync();\n if (--arrayItemsLeft === 0) {\n break;\n }\n }\n } catch (e) {\n if (!(e instanceof DataViewIndexOutOfBoundsError)) {\n throw e; // rethrow\n }\n // fallthrough\n }\n this.totalPos += this.pos;\n }\n }\n\n private doDecodeSync(): unknown {\n DECODE: while (true) {\n const headByte = this.readHeadByte();\n let object: unknown;\n\n if (headByte >= 0xe0) {\n // negative fixint (111x xxxx) 0xe0 - 0xff\n object = headByte - 0x100;\n } else if (headByte < 0xc0) {\n if (headByte < 0x80) {\n // positive fixint (0xxx xxxx) 0x00 - 0x7f\n object = headByte;\n } else if (headByte < 0x90) {\n // fixmap (1000 xxxx) 0x80 - 0x8f\n const size = headByte - 0x80;\n if (size !== 0) {\n this.pushMapState(size);\n this.complete();\n continue DECODE;\n } else {\n object = {};\n }\n } else if (headByte < 0xa0) {\n // fixarray (1001 xxxx) 0x90 - 0x9f\n const size = headByte - 0x90;\n if (size !== 0) {\n this.pushArrayState(size);\n this.complete();\n continue DECODE;\n } else {\n object = [];\n }\n } else {\n // fixstr (101x xxxx) 0xa0 - 0xbf\n const byteLength = headByte - 0xa0;\n object = this.decodeUtf8String(byteLength, 0);\n }\n } else if (headByte === 0xc0) {\n // nil\n object = null;\n } else if (headByte === 0xc2) {\n // false\n object = false;\n } else if (headByte === 0xc3) {\n // true\n object = true;\n } else if (headByte === 0xca) {\n // float 32\n object = this.readF32();\n } else if (headByte === 0xcb) {\n // float 64\n object = this.readF64();\n } else if (headByte === 0xcc) {\n // uint 8\n object = this.readU8();\n } else if (headByte === 0xcd) {\n // uint 16\n object = this.readU16();\n } else if (headByte === 0xce) {\n // uint 32\n object = this.readU32();\n } else if (headByte === 0xcf) {\n // uint 64\n object = this.readU64();\n } else if (headByte === 0xd0) {\n // int 8\n object = this.readI8();\n } else if (headByte === 0xd1) {\n // int 16\n object = this.readI16();\n } else if (headByte === 0xd2) {\n // int 32\n object = this.readI32();\n } else if (headByte === 0xd3) {\n // int 64\n object = this.readI64();\n } else if (headByte === 0xd9) {\n // str 8\n const byteLength = this.lookU8();\n object = this.decodeUtf8String(byteLength, 1);\n } else if (headByte === 0xda) {\n // str 16\n const byteLength = this.lookU16();\n object = this.decodeUtf8String(byteLength, 2);\n } else if (headByte === 0xdb) {\n // str 32\n const byteLength = this.lookU32();\n object = this.decodeUtf8String(byteLength, 4);\n } else if (headByte === 0xdc) {\n // array 16\n const size = this.readU16();\n if (size !== 0) {\n this.pushArrayState(size);\n this.complete();\n continue DECODE;\n } else {\n object = [];\n }\n } else if (headByte === 0xdd) {\n // array 32\n const size = this.readU32();\n if (size !== 0) {\n this.pushArrayState(size);\n this.complete();\n continue DECODE;\n } else {\n object = [];\n }\n } else if (headByte === 0xde) {\n // map 16\n const size = this.readU16();\n if (size !== 0) {\n this.pushMapState(size);\n this.complete();\n continue DECODE;\n } else {\n object = {};\n }\n } else if (headByte === 0xdf) {\n // map 32\n const size = this.readU32();\n if (size !== 0) {\n this.pushMapState(size);\n this.complete();\n continue DECODE;\n } else {\n object = {};\n }\n } else if (headByte === 0xc4) {\n // bin 8\n const size = this.lookU8();\n object = this.decodeBinary(size, 1);\n } else if (headByte === 0xc5) {\n // bin 16\n const size = this.lookU16();\n object = this.decodeBinary(size, 2);\n } else if (headByte === 0xc6) {\n // bin 32\n const size = this.lookU32();\n object = this.decodeBinary(size, 4);\n } else if (headByte === 0xd4) {\n // fixext 1\n object = this.decodeExtension(1, 0);\n } else if (headByte === 0xd5) {\n // fixext 2\n object = this.decodeExtension(2, 0);\n } else if (headByte === 0xd6) {\n // fixext 4\n object = this.decodeExtension(4, 0);\n } else if (headByte === 0xd7) {\n // fixext 8\n object = this.decodeExtension(8, 0);\n } else if (headByte === 0xd8) {\n // fixext 16\n object = this.decodeExtension(16, 0);\n } else if (headByte === 0xc7) {\n // ext 8\n const size = this.lookU8();\n object = this.decodeExtension(size, 1);\n } else if (headByte === 0xc8) {\n // ext 16\n const size = this.lookU16();\n object = this.decodeExtension(size, 2);\n } else if (headByte === 0xc9) {\n // ext 32\n const size = this.lookU32();\n object = this.decodeExtension(size, 4);\n } else {\n throw new DecodeError(`Unrecognized type byte: ${prettyByte(headByte)}`);\n }\n\n this.complete();\n\n const stack = this.stack;\n while (stack.length > 0) {\n // arrays and maps\n const state = stack[stack.length - 1]!;\n if (state.type === State.ARRAY) {\n state.array[state.position] = object;\n state.position++;\n if (state.position === state.size) {\n stack.pop();\n object = state.array;\n } else {\n continue DECODE;\n }\n } else if (state.type === State.MAP_KEY) {\n if (!isValidMapKeyType(object)) {\n throw new DecodeError(\"The type of key must be string or number but \" + typeof object);\n }\n if (object === \"__proto__\") {\n throw new DecodeError(\"The key __proto__ is not allowed\");\n }\n\n state.key = object;\n state.type = State.MAP_VALUE;\n continue DECODE;\n } else {\n // it must be `state.type === State.MAP_VALUE` here\n\n state.map[state.key!] = object;\n state.readCount++;\n\n if (state.readCount === state.size) {\n stack.pop();\n object = state.map;\n } else {\n state.key = null;\n state.type = State.MAP_KEY;\n continue DECODE;\n }\n }\n }\n\n return object;\n }\n }\n\n private readHeadByte(): number {\n if (this.headByte === HEAD_BYTE_REQUIRED) {\n this.headByte = this.readU8();\n // console.log(\"headByte\", prettyByte(this.headByte));\n }\n\n return this.headByte;\n }\n\n private complete(): void {\n this.headByte = HEAD_BYTE_REQUIRED;\n }\n\n private readArraySize(): number {\n const headByte = this.readHeadByte();\n\n switch (headByte) {\n case 0xdc:\n return this.readU16();\n case 0xdd:\n return this.readU32();\n default: {\n if (headByte < 0xa0) {\n return headByte - 0x90;\n } else {\n throw new DecodeError(`Unrecognized array type byte: ${prettyByte(headByte)}`);\n }\n }\n }\n }\n\n private pushMapState(size: number) {\n if (size > this.maxMapLength) {\n throw new DecodeError(`Max length exceeded: map length (${size}) > maxMapLengthLength (${this.maxMapLength})`);\n }\n\n this.stack.push({\n type: State.MAP_KEY,\n size,\n key: null,\n readCount: 0,\n map: {},\n });\n }\n\n private pushArrayState(size: number) {\n if (size > this.maxArrayLength) {\n throw new DecodeError(`Max length exceeded: array length (${size}) > maxArrayLength (${this.maxArrayLength})`);\n }\n\n this.stack.push({\n type: State.ARRAY,\n size,\n array: new Array<unknown>(size),\n position: 0,\n });\n }\n\n private decodeUtf8String(byteLength: number, headerOffset: number): string {\n if (byteLength > this.maxStrLength) {\n throw new DecodeError(\n `Max length exceeded: UTF-8 byte length (${byteLength}) > maxStrLength (${this.maxStrLength})`,\n );\n }\n\n if (this.bytes.byteLength < this.pos + headerOffset + byteLength) {\n throw MORE_DATA;\n }\n\n const offset = this.pos + headerOffset;\n let object: string;\n if (this.stateIsMapKey() && this.keyDecoder?.canBeCached(byteLength)) {\n object = this.keyDecoder.decode(this.bytes, offset, byteLength);\n } else if (byteLength > TEXT_DECODER_THRESHOLD) {\n object = utf8DecodeTD(this.bytes, offset, byteLength);\n } else {\n object = utf8DecodeJs(this.bytes, offset, byteLength);\n }\n this.pos += headerOffset + byteLength;\n return object;\n }\n\n private stateIsMapKey(): boolean {\n if (this.stack.length > 0) {\n const state = this.stack[this.stack.length - 1]!;\n return state.type === State.MAP_KEY;\n }\n return false;\n }\n\n private decodeBinary(byteLength: number, headOffset: number): Uint8Array {\n if (byteLength > this.maxBinLength) {\n throw new DecodeError(`Max length exceeded: bin length (${byteLength}) > maxBinLength (${this.maxBinLength})`);\n }\n\n if (!this.hasRemaining(byteLength + headOffset)) {\n throw MORE_DATA;\n }\n\n const offset = this.pos + headOffset;\n const object = this.bytes.subarray(offset, offset + byteLength);\n this.pos += headOffset + byteLength;\n return object;\n }\n\n private decodeExtension(size: number, headOffset: number): unknown {\n if (size > this.maxExtLength) {\n throw new DecodeError(`Max length exceeded: ext length (${size}) > maxExtLength (${this.maxExtLength})`);\n }\n\n const extType = this.view.getInt8(this.pos + headOffset);\n const data = this.decodeBinary(size, headOffset + 1 /* extType */);\n return this.extensionCodec.decode(data, extType, this.context);\n }\n\n private lookU8() {\n return this.view.getUint8(this.pos);\n }\n\n private lookU16() {\n return this.view.getUint16(this.pos);\n }\n\n private lookU32() {\n return this.view.getUint32(this.pos);\n }\n\n private readU8(): number {\n const value = this.view.getUint8(this.pos);\n this.pos++;\n return value;\n }\n\n private readI8(): number {\n const value = this.view.getInt8(this.pos);\n this.pos++;\n return value;\n }\n\n private readU16(): number {\n const value = this.view.getUint16(this.pos);\n this.pos += 2;\n return value;\n }\n\n private readI16(): number {\n const value = this.view.getInt16(this.pos);\n this.pos += 2;\n return value;\n }\n\n private readU32(): number {\n const value = this.view.getUint32(this.pos);\n this.pos += 4;\n return value;\n }\n\n private readI32(): number {\n const value = this.view.getInt32(this.pos);\n this.pos += 4;\n return value;\n }\n\n private readU64(): number {\n const value = getUint64(this.view, this.pos);\n this.pos += 8;\n return value;\n }\n\n private readI64(): number {\n const value = getInt64(this.view, this.pos);\n this.pos += 8;\n return value;\n }\n\n private readF32() {\n const value = this.view.getFloat32(this.pos);\n this.pos += 4;\n return value;\n }\n\n private readF64() {\n const value = this.view.getFloat64(this.pos);\n this.pos += 8;\n return value;\n }\n}\n", "import { Decoder } from \"./Decoder\";\nimport type { ExtensionCodecType } from \"./ExtensionCodec\";\nimport type { ContextOf, SplitUndefined } from \"./context\";\n\nexport type DecodeOptions<ContextType = undefined> = Readonly<\n Partial<{\n extensionCodec: ExtensionCodecType<ContextType>;\n\n /**\n * Maximum string length.\n *\n * Defaults to 4_294_967_295 (UINT32_MAX).\n */\n maxStrLength: number;\n /**\n * Maximum binary length.\n *\n * Defaults to 4_294_967_295 (UINT32_MAX).\n */\n maxBinLength: number;\n /**\n * Maximum array length.\n *\n * Defaults to 4_294_967_295 (UINT32_MAX).\n */\n maxArrayLength: number;\n /**\n * Maximum map length.\n *\n * Defaults to 4_294_967_295 (UINT32_MAX).\n */\n maxMapLength: number;\n /**\n * Maximum extension length.\n *\n * Defaults to 4_294_967_295 (UINT32_MAX).\n */\n maxExtLength: number;\n }>\n> &\n ContextOf<ContextType>;\n\nexport const defaultDecodeOptions: DecodeOptions = {};\n\n/**\n * It decodes a single MessagePack object in a buffer.\n *\n * This is a synchronous decoding function.\n * See other variants for asynchronous decoding: {@link decodeAsync()}, {@link decodeStream()}, or {@link decodeArrayStream()}.\n *\n * @throws {@link RangeError} if the buffer is incomplete, including the case where the buffer is empty.\n * @throws {@link DecodeError} if the buffer contains invalid data.\n */\nexport function decode<ContextType = undefined>(\n buffer: ArrayLike<number> | BufferSource,\n options: DecodeOptions<SplitUndefined<ContextType>> = defaultDecodeOptions as any,\n): unknown {\n const decoder = new Decoder(\n options.extensionCodec,\n (options as typeof options & { context: any }).context,\n options.maxStrLength,\n options.maxBinLength,\n options.maxArrayLength,\n options.maxMapLength,\n options.maxExtLength,\n );\n return decoder.decode(buffer);\n}\n\n/**\n * It decodes multiple MessagePack objects in a buffer.\n * This is corresponding to {@link decodeMultiStream()}.\n *\n * @throws {@link RangeError} if the buffer is incomplete, including the case where the buffer is empty.\n * @throws {@link DecodeError} if the buffer contains invalid data.\n */\nexport function decodeMulti<ContextType = undefined>(\n buffer: ArrayLike<number> | BufferSource,\n options: DecodeOptions<SplitUndefined<ContextType>> = defaultDecodeOptions as any,\n): Generator<unknown, void, unknown> {\n const decoder = new Decoder(\n options.extensionCodec,\n (options as typeof options & { context: any }).context,\n options.maxStrLength,\n options.maxBinLength,\n options.maxArrayLength,\n options.maxMapLength,\n options.maxExtLength,\n );\n return decoder.decodeMulti(buffer);\n}\n", "// utility for whatwg streams\n\n// The living standard of whatwg streams says\n// ReadableStream is also AsyncIterable, but\n// as of June 2019, no browser implements it.\n// See https://streams.spec.whatwg.org/ for details\nexport type ReadableStreamLike<T> = AsyncIterable<T> | ReadableStream<T>;\n\nexport function isAsyncIterable<T>(object: ReadableStreamLike<T>): object is AsyncIterable<T> {\n return (object as any)[Symbol.asyncIterator] != null;\n}\n\nfunction assertNonNull<T>(value: T | null | undefined): asserts value is T {\n if (value == null) {\n throw new Error(\"Assertion Failure: value must not be null nor undefined\");\n }\n}\n\nexport async function* asyncIterableFromStream<T>(stream: ReadableStream<T>): AsyncIterable<T> {\n const reader = stream.getReader();\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n return;\n }\n assertNonNull(value);\n yield value;\n }\n } finally {\n reader.releaseLock();\n }\n}\n\nexport function ensureAsyncIterable<T>(streamLike: ReadableStreamLike<T>): AsyncIterable<T> {\n if (isAsyncIterable(streamLike)) {\n return streamLike;\n } else {\n return asyncIterableFromStream(streamLike);\n }\n}\n", "import { Decoder } from \"./Decoder\";\nimport { ensureAsyncIterable } from \"./utils/stream\";\nimport { defaultDecodeOptions } from \"./decode\";\nimport type { ReadableStreamLike } from \"./utils/stream\";\nimport type { DecodeOptions } from \"./decode\";\nimport type { SplitUndefined } from \"./context\";\n\n/**\n * @throws {@link RangeError} if the buffer is incomplete, including the case where the buffer is empty.\n * @throws {@link DecodeError} if the buffer contains invalid data.\n */\n export async function decodeAsync<ContextType>(\n streamLike: ReadableStreamLike<ArrayLike<number> | BufferSource>,\n options: DecodeOptions<SplitUndefined<ContextType>> = defaultDecodeOptions as any,\n): Promise<unknown> {\n const stream = ensureAsyncIterable(streamLike);\n\n const decoder = new Decoder(\n options.extensionCodec,\n (options as typeof options & { context: any }).context,\n options.maxStrLength,\n options.maxBinLength,\n options.maxArrayLength,\n options.maxMapLength,\n options.maxExtLength,\n );\n return decoder.decodeAsync(stream);\n}\n\n/**\n * @throws {@link RangeError} if the buffer is incomplete, including the case where the buffer is empty.\n * @throws {@link DecodeError} if the buffer contains invalid data.\n */\n export function decodeArrayStream<ContextType>(\n streamLike: ReadableStreamLike<ArrayLike<number> | BufferSource>,\n options: DecodeOptions<SplitUndefined<ContextType>> = defaultDecodeOptions as any,\n): AsyncGenerator<unknown, void, unknown> {\n const stream = ensureAsyncIterable(streamLike);\n\n const decoder = new Decoder(\n options.extensionCodec,\n (options as typeof options & { context: any }).context,\n options.maxStrLength,\n options.maxBinLength,\n options.maxArrayLength,\n options.maxMapLength,\n options.maxExtLength,\n );\n\n return decoder.decodeArrayStream(stream);\n}\n\n/**\n * @throws {@link RangeError} if the buffer is incomplete, including the case where the buffer is empty.\n * @throws {@link DecodeError} if the buffer contains invalid data.\n */\nexport function decodeMultiStream<ContextType>(\n streamLike: ReadableStreamLike<ArrayLike<number> | BufferSource>,\n options: DecodeOptions<SplitUndefined<ContextType>> = defaultDecodeOptions as any,\n): AsyncGenerator<unknown, void, unknown> {\n const stream = ensureAsyncIterable(streamLike);\n\n const decoder = new Decoder(\n options.extensionCodec,\n (options as typeof options & { context: any }).context,\n options.maxStrLength,\n options.maxBinLength,\n options.maxArrayLength,\n options.maxMapLength,\n options.maxExtLength,\n );\n\n return decoder.decodeStream(stream);\n}\n\n/**\n * @deprecated Use {@link decodeMultiStream()} instead.\n */\nexport function decodeStream<ContextType>(\n streamLike: ReadableStreamLike<ArrayLike<number> | BufferSource>,\n options: DecodeOptions<SplitUndefined<ContextType>> = defaultDecodeOptions as any,\n): AsyncGenerator<unknown, void, unknown> {\n return decodeMultiStream(streamLike, options);\n}\n", "// Main Functions:\n\nimport { encode } from \"./encode\";\nexport { encode };\nimport type { EncodeOptions } from \"./encode\";\nexport type { EncodeOptions };\n\nimport { decode, decodeMulti } from \"./decode\";\nexport { decode, decodeMulti };\nimport type { DecodeOptions } from \"./decode\";\nexport { DecodeOptions };\n\nimport { decodeAsync, decodeArrayStream, decodeMultiStream, decodeStream } from \"./decodeAsync\";\nexport { decodeAsync, decodeArrayStream, decodeMultiStream, decodeStream };\n\nimport { Decoder, DataViewIndexOutOfBoundsError } from \"./Decoder\";\nimport { DecodeError } from \"./DecodeError\";\nexport { Decoder, DecodeError, DataViewIndexOutOfBoundsError };\n\nimport { Encoder } from \"./Encoder\";\nexport { Encoder };\n\n// Utilitiies for Extension Types:\n\nimport { ExtensionCodec } from \"./ExtensionCodec\";\nexport { ExtensionCodec };\nimport type { ExtensionCodecType, ExtensionDecoderType, ExtensionEncoderType } from \"./ExtensionCodec\";\nexport type { ExtensionCodecType, ExtensionDecoderType, ExtensionEncoderType };\nimport { ExtData } from \"./ExtData\";\nexport { ExtData };\n\nimport {\n EXT_TIMESTAMP,\n encodeDateToTimeSpec,\n encodeTimeSpecToTimestamp,\n decodeTimestampToTimeSpec,\n encodeTimestampExtension,\n decodeTimestampExtension,\n} from \"./timestamp\";\nexport {\n EXT_TIMESTAMP,\n encodeDateToTimeSpec,\n encodeTimeSpecToTimestamp,\n decodeTimestampToTimeSpec,\n encodeTimestampExtension,\n decodeTimestampExtension,\n};\n", "export { util, type Util } from \"./util\";\nimport { Peer } from \"./peer\";\nimport { MsgPackPeer } from \"./msgPackPeer\";\n\nexport type { PeerEvents, PeerOptions } from \"./peer\";\n\nexport type {\n\tPeerJSOption,\n\tPeerConnectOption,\n\tAnswerOption,\n\tCallOption,\n} from \"./optionInterfaces\";\nexport type { UtilSupportsObj } from \"./util\";\nexport type { DataConnection } from \"./dataconnection/DataConnection\";\nexport type { MediaConnection } from \"./mediaconnection\";\nexport type { LogLevel } from \"./logger\";\nexport * from \"./enums\";\n\nexport { BufferedConnection } from \"./dataconnection/BufferedConnection/BufferedConnection\";\nexport { StreamConnection } from \"./dataconnection/StreamConnection/StreamConnection\";\nexport { MsgPack } from \"./dataconnection/StreamConnection/MsgPack\";\nexport type { SerializerMapping } from \"./peer\";\n\nexport { Peer, MsgPackPeer };\n\nexport { PeerError } from \"./peerError\";\nexport default Peer;\n", "import { BinaryPackChunker } from \"./dataconnection/BufferedConnection/binaryPackChunker\";\nimport * as BinaryPack from \"peerjs-js-binarypack\";\nimport { Supports } from \"./supports\";\nimport { validateId } from \"./utils/validateId\";\nimport { randomToken } from \"./utils/randomToken\";\n\nexport interface UtilSupportsObj {\n\t/**\n\t * The current browser.\n\t * This property can be useful in determining whether two peers can connect.\n\t *\n\t * ```ts\n\t * if (util.browser === 'firefox') {\n\t * // OK to peer with Firefox peers.\n\t * }\n\t * ```\n\t *\n\t * `util.browser` can currently have the values\n\t * `'firefox', 'chrome', 'safari', 'edge', 'Not a supported browser.', 'Not a browser.' (unknown WebRTC-compatible agent).\n\t */\n\tbrowser: boolean;\n\twebRTC: boolean;\n\t/**\n\t * True if the current browser supports media streams and PeerConnection.\n\t */\n\taudioVideo: boolean;\n\t/**\n\t * True if the current browser supports DataChannel and PeerConnection.\n\t */\n\tdata: boolean;\n\tbinaryBlob: boolean;\n\t/**\n\t * True if the current browser supports reliable DataChannels.\n\t */\n\treliable: boolean;\n}\n\nconst DEFAULT_CONFIG = {\n\ticeServers: [\n\t\t{ urls: \"stun:stun.l.google.com:19302\" },\n\t\t{\n\t\t\turls: [\n\t\t\t\t\"turn:eu-0.turn.peerjs.com:3478\",\n\t\t\t\t\"turn:us-0.turn.peerjs.com:3478\",\n\t\t\t],\n\t\t\tusername: \"peerjs\",\n\t\t\tcredential: \"peerjsp\",\n\t\t},\n\t],\n\tsdpSemantics: \"unified-plan\",\n};\n\nexport class Util extends BinaryPackChunker {\n\tnoop(): void {}\n\n\treadonly CLOUD_HOST = \"0.peerjs.com\";\n\treadonly CLOUD_PORT = 443;\n\n\t// Browsers that need chunking:\n\treadonly chunkedBrowsers = { Chrome: 1, chrome: 1 };\n\n\t// Returns browser-agnostic default config\n\treadonly defaultConfig = DEFAULT_CONFIG;\n\n\treadonly browser = Supports.getBrowser();\n\treadonly browserVersion = Supports.getVersion();\n\n\tpack = BinaryPack.pack;\n\tunpack = BinaryPack.unpack;\n\n\t/**\n\t * A hash of WebRTC features mapped to booleans that correspond to whether the feature is supported by the current browser.\n\t *\n\t * :::caution\n\t * Only the properties documented here are guaranteed to be present on `util.supports`\n\t * :::\n\t */\n\treadonly supports = (function () {\n\t\tconst supported: UtilSupportsObj = {\n\t\t\tbrowser: Supports.isBrowserSupported(),\n\t\t\twebRTC: Supports.isWebRTCSupported(),\n\t\t\taudioVideo: false,\n\t\t\tdata: false,\n\t\t\tbinaryBlob: false,\n\t\t\treliable: false,\n\t\t};\n\n\t\tif (!supported.webRTC) return supported;\n\n\t\tlet pc: RTCPeerConnection;\n\n\t\ttry {\n\t\t\tpc = new RTCPeerConnection(DEFAULT_CONFIG);\n\n\t\t\tsupported.audioVideo = true;\n\n\t\t\tlet dc: RTCDataChannel;\n\n\t\t\ttry {\n\t\t\t\tdc = pc.createDataChannel(\"_PEERJSTEST\", { ordered: true });\n\t\t\t\tsupported.data = true;\n\t\t\t\tsupported.reliable = !!dc.ordered;\n\n\t\t\t\t// Binary test\n\t\t\t\ttry {\n\t\t\t\t\tdc.binaryType = \"blob\";\n\t\t\t\t\tsupported.binaryBlob = !Supports.isIOS;\n\t\t\t\t} catch (e) {}\n\t\t\t} catch (e) {\n\t\t\t} finally {\n\t\t\t\tif (dc) {\n\t\t\t\t\tdc.close();\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (e) {\n\t\t} finally {\n\t\t\tif (pc) {\n\t\t\t\tpc.close();\n\t\t\t}\n\t\t}\n\n\t\treturn supported;\n\t})();\n\n\t// Ensure alphanumeric ids\n\tvalidateId = validateId;\n\trandomToken = randomToken;\n\n\tblobToArrayBuffer(\n\t\tblob: Blob,\n\t\tcb: (arg: ArrayBuffer | null) => void,\n\t): FileReader {\n\t\tconst fr = new FileReader();\n\n\t\tfr.onload = function (evt) {\n\t\t\tif (evt.target) {\n\t\t\t\tcb(evt.target.result as ArrayBuffer);\n\t\t\t}\n\t\t};\n\n\t\tfr.readAsArrayBuffer(blob);\n\n\t\treturn fr;\n\t}\n\n\tbinaryStringToArrayBuffer(binary: string): ArrayBuffer | SharedArrayBuffer {\n\t\tconst byteArray = new Uint8Array(binary.length);\n\n\t\tfor (let i = 0; i < binary.length; i++) {\n\t\t\tbyteArray[i] = binary.charCodeAt(i) & 0xff;\n\t\t}\n\n\t\treturn byteArray.buffer;\n\t}\n\tisSecure(): boolean {\n\t\treturn location.protocol === \"https:\";\n\t}\n}\n\n/**\n * Provides a variety of helpful utilities.\n *\n * :::caution\n * Only the utilities documented here are guaranteed to be present on `util`.\n * Undocumented utilities can be removed without warning.\n * We don't consider these to be breaking changes.\n * :::\n */\nexport const util = new Util();\n", "export class BinaryPackChunker {\n\treadonly chunkedMTU = 16300; // The original 60000 bytes setting does not work when sending data from Firefox to Chrome, which is \"cut off\" after 16384 bytes and delivered individually.\n\n\t// Binary stuff\n\n\tprivate _dataCount: number = 1;\n\n\tchunk = (\n\t\tblob: ArrayBuffer,\n\t): { __peerData: number; n: number; total: number; data: Uint8Array }[] => {\n\t\tconst chunks = [];\n\t\tconst size = blob.byteLength;\n\t\tconst total = Math.ceil(size / this.chunkedMTU);\n\n\t\tlet index = 0;\n\t\tlet start = 0;\n\n\t\twhile (start < size) {\n\t\t\tconst end = Math.min(size, start + this.chunkedMTU);\n\t\t\tconst b = blob.slice(start, end);\n\n\t\t\tconst chunk = {\n\t\t\t\t__peerData: this._dataCount,\n\t\t\t\tn: index,\n\t\t\t\tdata: b,\n\t\t\t\ttotal,\n\t\t\t};\n\n\t\t\tchunks.push(chunk);\n\n\t\t\tstart = end;\n\t\t\tindex++;\n\t\t}\n\n\t\tthis._dataCount++;\n\n\t\treturn chunks;\n\t};\n}\n\nexport function concatArrayBuffers(bufs: Uint8Array[]) {\n\tlet size = 0;\n\tfor (const buf of bufs) {\n\t\tsize += buf.byteLength;\n\t}\n\tconst result = new Uint8Array(size);\n\tlet offset = 0;\n\tfor (const buf of bufs) {\n\t\tresult.set(buf, offset);\n\t\toffset += buf.byteLength;\n\t}\n\treturn result;\n}\n", "import webRTCAdapter_import from \"webrtc-adapter\";\n\nconst webRTCAdapter: typeof webRTCAdapter_import =\n\t//@ts-ignore\n\twebRTCAdapter_import.default || webRTCAdapter_import;\n\nexport const Supports = new (class {\n\treadonly isIOS =\n\t\ttypeof navigator !== \"undefined\"\n\t\t\t? [\"iPad\", \"iPhone\", \"iPod\"].includes(navigator.platform)\n\t\t\t: false;\n\treadonly supportedBrowsers = [\"firefox\", \"chrome\", \"safari\"];\n\n\treadonly minFirefoxVersion = 59;\n\treadonly minChromeVersion = 72;\n\treadonly minSafariVersion = 605;\n\n\tisWebRTCSupported(): boolean {\n\t\treturn typeof RTCPeerConnection !== \"undefined\";\n\t}\n\n\tisBrowserSupported(): boolean {\n\t\tconst browser = this.getBrowser();\n\t\tconst version = this.getVersion();\n\n\t\tconst validBrowser = this.supportedBrowsers.includes(browser);\n\n\t\tif (!validBrowser) return false;\n\n\t\tif (browser === \"chrome\") return version >= this.minChromeVersion;\n\t\tif (browser === \"firefox\") return version >= this.minFirefoxVersion;\n\t\tif (browser === \"safari\")\n\t\t\treturn !this.isIOS && version >= this.minSafariVersion;\n\n\t\treturn false;\n\t}\n\n\tgetBrowser(): string {\n\t\treturn webRTCAdapter.browserDetails.browser;\n\t}\n\n\tgetVersion(): number {\n\t\treturn webRTCAdapter.browserDetails.version || 0;\n\t}\n\n\tisUnifiedPlanSupported(): boolean {\n\t\tconst browser = this.getBrowser();\n\t\tconst version = webRTCAdapter.browserDetails.version || 0;\n\n\t\tif (browser === \"chrome\" && version < this.minChromeVersion) return false;\n\t\tif (browser === \"firefox\" && version >= this.minFirefoxVersion) return true;\n\t\tif (\n\t\t\t!window.RTCRtpTransceiver ||\n\t\t\t!(\"currentDirection\" in RTCRtpTransceiver.prototype)\n\t\t)\n\t\t\treturn false;\n\n\t\tlet tempPc: RTCPeerConnection;\n\t\tlet supported = false;\n\n\t\ttry {\n\t\t\ttempPc = new RTCPeerConnection();\n\t\t\ttempPc.addTransceiver(\"audio\");\n\t\t\tsupported = true;\n\t\t} catch (e) {\n\t\t} finally {\n\t\t\tif (tempPc) {\n\t\t\t\ttempPc.close();\n\t\t\t}\n\t\t}\n\n\t\treturn supported;\n\t}\n\n\ttoString(): string {\n\t\treturn `Supports:\n browser:${this.getBrowser()}\n version:${this.getVersion()}\n isIOS:${this.isIOS}\n isWebRTCSupported:${this.isWebRTCSupported()}\n isBrowserSupported:${this.isBrowserSupported()}\n isUnifiedPlanSupported:${this.isUnifiedPlanSupported()}`;\n\t}\n})();\n", "export const validateId = (id: string): boolean => {\n\t// Allow empty ids\n\treturn !id || /^[A-Za-z0-9]+(?:[ _-][A-Za-z0-9]+)*$/.test(id);\n};\n", "export const randomToken = () => Math.random().toString(36).slice(2);\n", "import { util } from \"./util\";\nimport logger, { LogLevel } from \"./logger\";\nimport { Socket } from \"./socket\";\nimport { MediaConnection } from \"./mediaconnection\";\nimport type { DataConnection } from \"./dataconnection/DataConnection\";\nimport {\n\tConnectionType,\n\tPeerErrorType,\n\tServerMessageType,\n\tSocketEventType,\n} from \"./enums\";\nimport type { ServerMessage } from \"./servermessage\";\nimport { API } from \"./api\";\nimport type {\n\tCallOption,\n\tPeerConnectOption,\n\tPeerJSOption,\n} from \"./optionInterfaces\";\nimport { BinaryPack } from \"./dataconnection/BufferedConnection/BinaryPack\";\nimport { Raw } from \"./dataconnection/BufferedConnection/Raw\";\nimport { Json } from \"./dataconnection/BufferedConnection/Json\";\n\nimport { EventEmitterWithError, PeerError } from \"./peerError\";\n\nclass PeerOptions implements PeerJSOption {\n\t/**\n\t * Prints log messages depending on the debug level passed in.\n\t */\n\tdebug?: LogLevel;\n\t/**\n\t * Server host. Defaults to `0.peerjs.com`.\n\t * Also accepts `'/'` to signify relative hostname.\n\t */\n\thost?: string;\n\t/**\n\t * Server port. Defaults to `443`.\n\t */\n\tport?: number;\n\t/**\n\t * The path where your self-hosted PeerServer is running. Defaults to `'/'`\n\t */\n\tpath?: string;\n\t/**\n\t * API key for the PeerServer.\n\t * This is not used anymore.\n\t * @deprecated\n\t */\n\tkey?: string;\n\ttoken?: string;\n\t/**\n\t * Configuration hash passed to RTCPeerConnection.\n\t * This hash contains any custom ICE/TURN server configuration.\n\t *\n\t * Defaults to {@apilink util.defaultConfig}\n\t */\n\tconfig?: any;\n\t/**\n\t * Set to true `true` if you're using TLS.\n\t * :::danger\n\t * If possible *always use TLS*\n\t * :::\n\t */\n\tsecure?: boolean;\n\tpingInterval?: number;\n\treferrerPolicy?: ReferrerPolicy;\n\tlogFunction?: (logLevel: LogLevel, ...rest: any[]) => void;\n\tserializers?: SerializerMapping;\n}\n\nexport { type PeerOptions };\n\nexport interface SerializerMapping {\n\t[key: string]: new (\n\t\tpeerId: string,\n\t\tprovider: Peer,\n\t\toptions: any,\n\t) => DataConnection;\n}\n\nexport interface PeerEvents {\n\t/**\n\t * Emitted when a connection to the PeerServer is established.\n\t *\n\t * You may use the peer before this is emitted, but messages to the server will be queued. <code>id</code> is the brokering ID of the peer (which was either provided in the constructor or assigned by the server).<span class='tip'>You should not wait for this event before connecting to other peers if connection speed is important.</span>\n\t */\n\topen: (id: string) => void;\n\t/**\n\t * Emitted when a new data connection is established from a remote peer.\n\t */\n\tconnection: (dataConnection: DataConnection) => void;\n\t/**\n\t * Emitted when a remote peer attempts to call you.\n\t */\n\tcall: (mediaConnection: MediaConnection) => void;\n\t/**\n\t * Emitted when the peer is destroyed and can no longer accept or create any new connections.\n\t */\n\tclose: () => void;\n\t/**\n\t * Emitted when the peer is disconnected from the signalling server\n\t */\n\tdisconnected: (currentId: string) => void;\n\t/**\n\t * Errors on the peer are almost always fatal and will destroy the peer.\n\t *\n\t * Errors from the underlying socket and PeerConnections are forwarded here.\n\t */\n\terror: (error: PeerError<`${PeerErrorType}`>) => void;\n}\n/**\n * A peer who can initiate connections with other peers.\n */\nexport class Peer extends EventEmitterWithError<PeerErrorType, PeerEvents> {\n\tprivate static readonly DEFAULT_KEY = \"peerjs\";\n\n\tprotected readonly _serializers: SerializerMapping = {\n\t\traw: Raw,\n\t\tjson: Json,\n\t\tbinary: BinaryPack,\n\t\t\"binary-utf8\": BinaryPack,\n\n\t\tdefault: BinaryPack,\n\t};\n\tprivate readonly _options: PeerOptions;\n\tprivate readonly _api: API;\n\tprivate readonly _socket: Socket;\n\n\tprivate _id: string | null = null;\n\tprivate _lastServerId: string | null = null;\n\n\t// States.\n\tprivate _destroyed = false; // Connections have been killed\n\tprivate _disconnected = false; // Connection to PeerServer killed but P2P connections still active\n\tprivate _open = false; // Sockets and such are not yet open.\n\tprivate readonly _connections: Map<\n\t\tstring,\n\t\t(DataConnection | MediaConnection)[]\n\t> = new Map(); // All connections for this peer.\n\tprivate readonly _lostMessages: Map<string, ServerMessage[]> = new Map(); // src => [list of messages]\n\t/**\n\t * The brokering ID of this peer\n\t *\n\t * If no ID was specified in {@apilink Peer | the constructor},\n\t * this will be `undefined` until the {@apilink PeerEvents | `open`} event is emitted.\n\t */\n\tget id() {\n\t\treturn this._id;\n\t}\n\n\tget options() {\n\t\treturn this._options;\n\t}\n\n\tget open() {\n\t\treturn this._open;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tget socket() {\n\t\treturn this._socket;\n\t}\n\n\t/**\n\t * A hash of all connections associated with this peer, keyed by the remote peer's ID.\n\t * @deprecated\n\t * Return type will change from Object to Map<string,[]>\n\t */\n\tget connections(): Object {\n\t\tconst plainConnections = Object.create(null);\n\n\t\tfor (const [k, v] of this._connections) {\n\t\t\tplainConnections[k] = v;\n\t\t}\n\n\t\treturn plainConnections;\n\t}\n\n\t/**\n\t * true if this peer and all of its connections can no longer be used.\n\t */\n\tget destroyed() {\n\t\treturn this._destroyed;\n\t}\n\t/**\n\t * false if there is an active connection to the PeerServer.\n\t */\n\tget disconnected() {\n\t\treturn this._disconnected;\n\t}\n\n\t/**\n\t * A peer can connect to other peers and listen for connections.\n\t */\n\tconstructor();\n\n\t/**\n\t * A peer can connect to other peers and listen for connections.\n\t * @param options for specifying details about PeerServer\n\t */\n\tconstructor(options: PeerOptions);\n\n\t/**\n\t * A peer can connect to other peers and listen for connections.\n\t * @param id Other peers can connect to this peer using the provided ID.\n\t * If no ID is given, one will be generated by the brokering server.\n\t * The ID must start and end with an alphanumeric character (lower or upper case character or a digit). In the middle of the ID spaces, dashes (-) and underscores (_) are allowed. Use {@apilink PeerOptions.metadata } to send identifying information.\n\t * @param options for specifying details about PeerServer\n\t */\n\tconstructor(id: string, options?: PeerOptions);\n\n\tconstructor(id?: string | PeerOptions, options?: PeerOptions) {\n\t\tsuper();\n\n\t\tlet userId: string | undefined;\n\n\t\t// Deal with overloading\n\t\tif (id && id.constructor == Object) {\n\t\t\toptions = id as PeerOptions;\n\t\t} else if (id) {\n\t\t\tuserId = id.toString();\n\t\t}\n\n\t\t// Configurize options\n\t\toptions = {\n\t\t\tdebug: 0, // 1: Errors, 2: Warnings, 3: All logs\n\t\t\thost: util.CLOUD_HOST,\n\t\t\tport: util.CLOUD_PORT,\n\t\t\tpath: \"/\",\n\t\t\tkey: Peer.DEFAULT_KEY,\n\t\t\ttoken: util.randomToken(),\n\t\t\tconfig: util.defaultConfig,\n\t\t\treferrerPolicy: \"strict-origin-when-cross-origin\",\n\t\t\tserializers: {},\n\t\t\t...options,\n\t\t};\n\t\tthis._options = options;\n\t\tthis._serializers = { ...this._serializers, ...this.options.serializers };\n\n\t\t// Detect relative URL host.\n\t\tif (this._options.host === \"/\") {\n\t\t\tthis._options.host = window.location.hostname;\n\t\t}\n\n\t\t// Set path correctly.\n\t\tif (this._options.path) {\n\t\t\tif (this._options.path[0] !== \"/\") {\n\t\t\t\tthis._options.path = \"/\" + this._options.path;\n\t\t\t}\n\t\t\tif (this._options.path[this._options.path.length - 1] !== \"/\") {\n\t\t\t\tthis._options.path += \"/\";\n\t\t\t}\n\t\t}\n\n\t\t// Set whether we use SSL to same as current host\n\t\tif (\n\t\t\tthis._options.secure === undefined &&\n\t\t\tthis._options.host !== util.CLOUD_HOST\n\t\t) {\n\t\t\tthis._options.secure = util.isSecure();\n\t\t} else if (this._options.host == util.CLOUD_HOST) {\n\t\t\tthis._options.secure = true;\n\t\t}\n\t\t// Set a custom log function if present\n\t\tif (this._options.logFunction) {\n\t\t\tlogger.setLogFunction(this._options.logFunction);\n\t\t}\n\n\t\tlogger.logLevel = this._options.debug || 0;\n\n\t\tthis._api = new API(options);\n\t\tthis._socket = this._createServerConnection();\n\n\t\t// Sanity checks\n\t\t// Ensure WebRTC supported\n\t\tif (!util.supports.audioVideo && !util.supports.data) {\n\t\t\tthis._delayedAbort(\n\t\t\t\tPeerErrorType.BrowserIncompatible,\n\t\t\t\t\"The current browser does not support WebRTC\",\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\t// Ensure alphanumeric id\n\t\tif (!!userId && !util.validateId(userId)) {\n\t\t\tthis._delayedAbort(PeerErrorType.InvalidID, `ID \"${userId}\" is invalid`);\n\t\t\treturn;\n\t\t}\n\n\t\tif (userId) {\n\t\t\tthis._initialize(userId);\n\t\t} else {\n\t\t\tthis._api\n\t\t\t\t.retrieveId()\n\t\t\t\t.then((id) => this._initialize(id))\n\t\t\t\t.catch((error) => this._abort(PeerErrorType.ServerError, error));\n\t\t}\n\t}\n\n\tprivate _createServerConnection(): Socket {\n\t\tconst socket = new Socket(\n\t\t\tthis._options.secure,\n\t\t\tthis._options.host!,\n\t\t\tthis._options.port!,\n\t\t\tthis._options.path!,\n\t\t\tthis._options.key!,\n\t\t\tthis._options.pingInterval,\n\t\t);\n\n\t\tsocket.on(SocketEventType.Message, (data: ServerMessage) => {\n\t\t\tthis._handleMessage(data);\n\t\t});\n\n\t\tsocket.on(SocketEventType.Error, (error: string) => {\n\t\t\tthis._abort(PeerErrorType.SocketError, error);\n\t\t});\n\n\t\tsocket.on(SocketEventType.Disconnected, () => {\n\t\t\tif (this.disconnected) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.emitError(PeerErrorType.Network, \"Lost connection to server.\");\n\t\t\tthis.disconnect();\n\t\t});\n\n\t\tsocket.on(SocketEventType.Close, () => {\n\t\t\tif (this.disconnected) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._abort(\n\t\t\t\tPeerErrorType.SocketClosed,\n\t\t\t\t\"Underlying socket is already closed.\",\n\t\t\t);\n\t\t});\n\n\t\treturn socket;\n\t}\n\n\t/** Initialize a connection with the server. */\n\tprivate _initialize(id: string): void {\n\t\tthis._id = id;\n\t\tthis.socket.start(id, this._options.token!);\n\t}\n\n\t/** Handles messages from the server. */\n\tprivate _handleMessage(message: ServerMessage): void {\n\t\tconst type = message.type;\n\t\tconst payload = message.payload;\n\t\tconst peerId = message.src;\n\n\t\tswitch (type) {\n\t\t\tcase ServerMessageType.Open: // The connection to the server is open.\n\t\t\t\tthis._lastServerId = this.id;\n\t\t\t\tthis._open = true;\n\t\t\t\tthis.emit(\"open\", this.id);\n\t\t\t\tbreak;\n\t\t\tcase ServerMessageType.Error: // Server error.\n\t\t\t\tthis._abort(PeerErrorType.ServerError, payload.msg);\n\t\t\t\tbreak;\n\t\t\tcase ServerMessageType.IdTaken: // The selected ID is taken.\n\t\t\t\tthis._abort(PeerErrorType.UnavailableID, `ID \"${this.id}\" is taken`);\n\t\t\t\tbreak;\n\t\t\tcase ServerMessageType.InvalidKey: // The given API key cannot be found.\n\t\t\t\tthis._abort(\n\t\t\t\t\tPeerErrorType.InvalidKey,\n\t\t\t\t\t`API KEY \"${this._options.key}\" is invalid`,\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase ServerMessageType.Leave: // Another peer has closed its connection to this peer.\n\t\t\t\tlogger.log(`Received leave message from ${peerId}`);\n\t\t\t\tthis._cleanupPeer(peerId);\n\t\t\t\tthis._connections.delete(peerId);\n\t\t\t\tbreak;\n\t\t\tcase ServerMessageType.Expire: // The offer sent to a peer has expired without response.\n\t\t\t\tthis.emitError(\n\t\t\t\t\tPeerErrorType.PeerUnavailable,\n\t\t\t\t\t`Could not connect to peer ${peerId}`,\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t\tcase ServerMessageType.Offer: {\n\t\t\t\t// we should consider switching this to CALL/CONNECT, but this is the least breaking option.\n\t\t\t\tconst connectionId = payload.connectionId;\n\t\t\t\tlet connection = this.getConnection(peerId, connectionId);\n\n\t\t\t\tif (connection) {\n\t\t\t\t\tconnection.close();\n\t\t\t\t\tlogger.warn(\n\t\t\t\t\t\t`Offer received for existing Connection ID:${connectionId}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Create a new connection.\n\t\t\t\tif (payload.type === ConnectionType.Media) {\n\t\t\t\t\tconst mediaConnection = new MediaConnection(peerId, this, {\n\t\t\t\t\t\tconnectionId: connectionId,\n\t\t\t\t\t\t_payload: payload,\n\t\t\t\t\t\tmetadata: payload.metadata,\n\t\t\t\t\t});\n\t\t\t\t\tconnection = mediaConnection;\n\t\t\t\t\tthis._addConnection(peerId, connection);\n\t\t\t\t\tthis.emit(\"call\", mediaConnection);\n\t\t\t\t} else if (payload.type === ConnectionType.Data) {\n\t\t\t\t\tconst dataConnection = new this._serializers[payload.serialization](\n\t\t\t\t\t\tpeerId,\n\t\t\t\t\t\tthis,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tconnectionId: connectionId,\n\t\t\t\t\t\t\t_payload: payload,\n\t\t\t\t\t\t\tmetadata: payload.metadata,\n\t\t\t\t\t\t\tlabel: payload.label,\n\t\t\t\t\t\t\tserialization: payload.serialization,\n\t\t\t\t\t\t\treliable: payload.reliable,\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t\tconnection = dataConnection;\n\n\t\t\t\t\tthis._addConnection(peerId, connection);\n\t\t\t\t\tthis.emit(\"connection\", dataConnection);\n\t\t\t\t} else {\n\t\t\t\t\tlogger.warn(`Received malformed connection type:${payload.type}`);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Find messages.\n\t\t\t\tconst messages = this._getMessages(connectionId);\n\t\t\t\tfor (const message of messages) {\n\t\t\t\t\tconnection.handleMessage(message);\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tif (!payload) {\n\t\t\t\t\tlogger.warn(\n\t\t\t\t\t\t`You received a malformed message from ${peerId} of type ${type}`,\n\t\t\t\t\t);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst connectionId = payload.connectionId;\n\t\t\t\tconst connection = this.getConnection(peerId, connectionId);\n\n\t\t\t\tif (connection && connection.peerConnection) {\n\t\t\t\t\t// Pass it on.\n\t\t\t\t\tconnection.handleMessage(message);\n\t\t\t\t} else if (connectionId) {\n\t\t\t\t\t// Store for possible later use\n\t\t\t\t\tthis._storeMessage(connectionId, message);\n\t\t\t\t} else {\n\t\t\t\t\tlogger.warn(\"You received an unrecognized message:\", message);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Stores messages without a set up connection, to be claimed later. */\n\tprivate _storeMessage(connectionId: string, message: ServerMessage): void {\n\t\tif (!this._lostMessages.has(connectionId)) {\n\t\t\tthis._lostMessages.set(connectionId, []);\n\t\t}\n\n\t\tthis._lostMessages.get(connectionId).push(message);\n\t}\n\n\t/**\n\t * Retrieve messages from lost message store\n\t * @internal\n\t */\n\t//TODO Change it to private\n\tpublic _getMessages(connectionId: string): ServerMessage[] {\n\t\tconst messages = this._lostMessages.get(connectionId);\n\n\t\tif (messages) {\n\t\t\tthis._lostMessages.delete(connectionId);\n\t\t\treturn messages;\n\t\t}\n\n\t\treturn [];\n\t}\n\n\t/**\n\t * Connects to the remote peer specified by id and returns a data connection.\n\t * @param peer The brokering ID of the remote peer (their {@apilink Peer.id}).\n\t * @param options for specifying details about Peer Connection\n\t */\n\tconnect(peer: string, options: PeerConnectOption = {}): DataConnection {\n\t\toptions = {\n\t\t\tserialization: \"default\",\n\t\t\t...options,\n\t\t};\n\t\tif (this.disconnected) {\n\t\t\tlogger.warn(\n\t\t\t\t\"You cannot connect to a new Peer because you called \" +\n\t\t\t\t\t\".disconnect() on this Peer and ended your connection with the \" +\n\t\t\t\t\t\"server. You can create a new Peer to reconnect, or call reconnect \" +\n\t\t\t\t\t\"on this peer if you believe its ID to still be available.\",\n\t\t\t);\n\t\t\tthis.emitError(\n\t\t\t\tPeerErrorType.Disconnected,\n\t\t\t\t\"Cannot connect to new Peer after disconnecting from server.\",\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tconst dataConnection = new this._serializers[options.serialization](\n\t\t\tpeer,\n\t\t\tthis,\n\t\t\toptions,\n\t\t);\n\t\tthis._addConnection(peer, dataConnection);\n\t\treturn dataConnection;\n\t}\n\n\t/**\n\t * Calls the remote peer specified by id and returns a media connection.\n\t * @param peer The brokering ID of the remote peer (their peer.id).\n\t * @param stream The caller's media stream\n\t * @param options Metadata associated with the connection, passed in by whoever initiated the connection.\n\t */\n\tcall(\n\t\tpeer: string,\n\t\tstream: MediaStream,\n\t\toptions: CallOption = {},\n\t): MediaConnection {\n\t\tif (this.disconnected) {\n\t\t\tlogger.warn(\n\t\t\t\t\"You cannot connect to a new Peer because you called \" +\n\t\t\t\t\t\".disconnect() on this Peer and ended your connection with the \" +\n\t\t\t\t\t\"server. You can create a new Peer to reconnect.\",\n\t\t\t);\n\t\t\tthis.emitError(\n\t\t\t\tPeerErrorType.Disconnected,\n\t\t\t\t\"Cannot connect to new Peer after disconnecting from server.\",\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tif (!stream) {\n\t\t\tlogger.error(\n\t\t\t\t\"To call a peer, you must provide a stream from your browser's `getUserMedia`.\",\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tconst mediaConnection = new MediaConnection(peer, this, {\n\t\t\t...options,\n\t\t\t_stream: stream,\n\t\t});\n\t\tthis._addConnection(peer, mediaConnection);\n\t\treturn mediaConnection;\n\t}\n\n\t/** Add a data/media connection to this peer. */\n\tprivate _addConnection(\n\t\tpeerId: string,\n\t\tconnection: MediaConnection | DataConnection,\n\t): void {\n\t\tlogger.log(\n\t\t\t`add connection ${connection.type}:${connection.connectionId} to peerId:${peerId}`,\n\t\t);\n\n\t\tif (!this._connections.has(peerId)) {\n\t\t\tthis._connections.set(peerId, []);\n\t\t}\n\t\tthis._connections.get(peerId).push(connection);\n\t}\n\n\t//TODO should be private\n\t_removeConnection(connection: DataConnection | MediaConnection): void {\n\t\tconst connections = this._connections.get(connection.peer);\n\n\t\tif (connections) {\n\t\t\tconst index = connections.indexOf(connection);\n\n\t\t\tif (index !== -1) {\n\t\t\t\tconnections.splice(index, 1);\n\t\t\t}\n\t\t}\n\n\t\t//remove from lost messages\n\t\tthis._lostMessages.delete(connection.connectionId);\n\t}\n\n\t/** Retrieve a data/media connection for this peer. */\n\tgetConnection(\n\t\tpeerId: string,\n\t\tconnectionId: string,\n\t): null | DataConnection | MediaConnection {\n\t\tconst connections = this._connections.get(peerId);\n\t\tif (!connections) {\n\t\t\treturn null;\n\t\t}\n\n\t\tfor (const connection of connections) {\n\t\t\tif (connection.connectionId === connectionId) {\n\t\t\t\treturn connection;\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate _delayedAbort(type: PeerErrorType, message: string | Error): void {\n\t\tsetTimeout(() => {\n\t\t\tthis._abort(type, message);\n\t\t}, 0);\n\t}\n\n\t/**\n\t * Emits an error message and destroys the Peer.\n\t * The Peer is not destroyed if it's in a disconnected state, in which case\n\t * it retains its disconnected state and its existing connections.\n\t */\n\tprivate _abort(type: PeerErrorType, message: string | Error): void {\n\t\tlogger.error(\"Aborting!\");\n\n\t\tthis.emitError(type, message);\n\n\t\tif (!this._lastServerId) {\n\t\t\tthis.destroy();\n\t\t} else {\n\t\t\tthis.disconnect();\n\t\t}\n\t}\n\n\t/**\n\t * Destroys the Peer: closes all active connections as well as the connection\n\t * to the server.\n\t *\n\t * :::caution\n\t * This cannot be undone; the respective peer object will no longer be able\n\t * to create or receive any connections, its ID will be forfeited on the server,\n\t * and all of its data and media connections will be closed.\n\t * :::\n\t */\n\tdestroy(): void {\n\t\tif (this.destroyed) {\n\t\t\treturn;\n\t\t}\n\n\t\tlogger.log(`Destroy peer with ID:${this.id}`);\n\n\t\tthis.disconnect();\n\t\tthis._cleanup();\n\n\t\tthis._destroyed = true;\n\n\t\tthis.emit(\"close\");\n\t}\n\n\t/** Disconnects every connection on this peer. */\n\tprivate _cleanup(): void {\n\t\tfor (const peerId of this._connections.keys()) {\n\t\t\tthis._cleanupPeer(peerId);\n\t\t\tthis._connections.delete(peerId);\n\t\t}\n\n\t\tthis.socket.removeAllListeners();\n\t}\n\n\t/** Closes all connections to this peer. */\n\tprivate _cleanupPeer(peerId: string): void {\n\t\tconst connections = this._connections.get(peerId);\n\n\t\tif (!connections) return;\n\n\t\tfor (const connection of connections) {\n\t\t\tconnection.close();\n\t\t}\n\t}\n\n\t/**\n\t * Disconnects the Peer's connection to the PeerServer. Does not close any\n\t * active connections.\n\t * Warning: The peer can no longer create or accept connections after being\n\t * disconnected. It also cannot reconnect to the server.\n\t */\n\tdisconnect(): void {\n\t\tif (this.disconnected) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst currentId = this.id;\n\n\t\tlogger.log(`Disconnect peer with ID:${currentId}`);\n\n\t\tthis._disconnected = true;\n\t\tthis._open = false;\n\n\t\tthis.socket.close();\n\n\t\tthis._lastServerId = currentId;\n\t\tthis._id = null;\n\n\t\tthis.emit(\"disconnected\", currentId);\n\t}\n\n\t/** Attempts to reconnect with the same ID.\n\t *\n\t * Only {@apilink Peer.disconnect | disconnected peers} can be reconnected.\n\t * Destroyed peers cannot be reconnected.\n\t * If the connection fails (as an example, if the peer's old ID is now taken),\n\t * the peer's existing connections will not close, but any associated errors events will fire.\n\t */\n\treconnect(): void {\n\t\tif (this.disconnected && !this.destroyed) {\n\t\t\tlogger.log(\n\t\t\t\t`Attempting reconnection to server with ID ${this._lastServerId}`,\n\t\t\t);\n\t\t\tthis._disconnected = false;\n\t\t\tthis._initialize(this._lastServerId!);\n\t\t} else if (this.destroyed) {\n\t\t\tthrow new Error(\n\t\t\t\t\"This peer cannot reconnect to the server. It has already been destroyed.\",\n\t\t\t);\n\t\t} else if (!this.disconnected && !this.open) {\n\t\t\t// Do nothing. We're still connecting the first time.\n\t\t\tlogger.error(\n\t\t\t\t\"In a hurry? We're still trying to make the initial connection!\",\n\t\t\t);\n\t\t} else {\n\t\t\tthrow new Error(\n\t\t\t\t`Peer ${this.id} cannot reconnect because it is not disconnected from the server!`,\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Get a list of available peer IDs. If you're running your own server, you'll\n\t * want to set allow_discovery: true in the PeerServer options. If you're using\n\t * the cloud server, email team@peerjs.com to get the functionality enabled for\n\t * your key.\n\t */\n\tlistAllPeers(cb = (_: any[]) => {}): void {\n\t\tthis._api\n\t\t\t.listAllPeers()\n\t\t\t.then((peers) => cb(peers))\n\t\t\t.catch((error) => this._abort(PeerErrorType.ServerError, error));\n\t}\n}\n", "const LOG_PREFIX = \"PeerJS: \";\n\n/*\nPrints log messages depending on the debug level passed in. Defaults to 0.\n0 Prints no logs.\n1 Prints only errors.\n2 Prints errors and warnings.\n3 Prints all logs.\n*/\nexport enum LogLevel {\n\t/**\n\t * Prints no logs.\n\t */\n\tDisabled,\n\t/**\n\t * Prints only errors.\n\t */\n\tErrors,\n\t/**\n\t * Prints errors and warnings.\n\t */\n\tWarnings,\n\t/**\n\t * Prints all logs.\n\t */\n\tAll,\n}\n\nclass Logger {\n\tprivate _logLevel = LogLevel.Disabled;\n\n\tget logLevel(): LogLevel {\n\t\treturn this._logLevel;\n\t}\n\n\tset logLevel(logLevel: LogLevel) {\n\t\tthis._logLevel = logLevel;\n\t}\n\n\tlog(...args: any[]) {\n\t\tif (this._logLevel >= LogLevel.All) {\n\t\t\tthis._print(LogLevel.All, ...args);\n\t\t}\n\t}\n\n\twarn(...args: any[]) {\n\t\tif (this._logLevel >= LogLevel.Warnings) {\n\t\t\tthis._print(LogLevel.Warnings, ...args);\n\t\t}\n\t}\n\n\terror(...args: any[]) {\n\t\tif (this._logLevel >= LogLevel.Errors) {\n\t\t\tthis._print(LogLevel.Errors, ...args);\n\t\t}\n\t}\n\n\tsetLogFunction(fn: (logLevel: LogLevel, ..._: any[]) => void): void {\n\t\tthis._print = fn;\n\t}\n\n\tprivate _print(logLevel: LogLevel, ...rest: any[]): void {\n\t\tconst copy = [LOG_PREFIX, ...rest];\n\n\t\tfor (const i in copy) {\n\t\t\tif (copy[i] instanceof Error) {\n\t\t\t\tcopy[i] = \"(\" + copy[i].name + \") \" + copy[i].message;\n\t\t\t}\n\t\t}\n\n\t\tif (logLevel >= LogLevel.All) {\n\t\t\tconsole.log(...copy);\n\t\t} else if (logLevel >= LogLevel.Warnings) {\n\t\t\tconsole.warn(\"WARNING\", ...copy);\n\t\t} else if (logLevel >= LogLevel.Errors) {\n\t\t\tconsole.error(\"ERROR\", ...copy);\n\t\t}\n\t}\n}\n\nexport default new Logger();\n", "import { EventEmitter } from \"eventemitter3\";\nimport logger from \"./logger\";\nimport { ServerMessageType, SocketEventType } from \"./enums\";\nimport { version } from \"./version\";\n\n/**\n * An abstraction on top of WebSockets to provide fastest\n * possible connection for peers.\n */\nexport class Socket extends EventEmitter {\n\tprivate _disconnected: boolean = true;\n\tprivate _id?: string;\n\tprivate _messagesQueue: Array<object> = [];\n\tprivate _socket?: WebSocket;\n\tprivate _wsPingTimer?: any;\n\tprivate readonly _baseUrl: string;\n\n\tconstructor(\n\t\tsecure: any,\n\t\thost: string,\n\t\tport: number,\n\t\tpath: string,\n\t\tkey: string,\n\t\tprivate readonly pingInterval: number = 5000,\n\t) {\n\t\tsuper();\n\n\t\tconst wsProtocol = secure ? \"wss://\" : \"ws://\";\n\n\t\tthis._baseUrl = wsProtocol + host + \":\" + port + path + \"peerjs?key=\" + key;\n\t}\n\n\tstart(id: string, token: string): void {\n\t\tthis._id = id;\n\n\t\tconst wsUrl = `${this._baseUrl}&id=${id}&token=${token}`;\n\n\t\tif (!!this._socket || !this._disconnected) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._socket = new WebSocket(wsUrl + \"&version=\" + version);\n\t\tthis._disconnected = false;\n\n\t\tthis._socket.onmessage = (event) => {\n\t\t\tlet data;\n\n\t\t\ttry {\n\t\t\t\tdata = JSON.parse(event.data);\n\t\t\t\tlogger.log(\"Server message received:\", data);\n\t\t\t} catch (e) {\n\t\t\t\tlogger.log(\"Invalid server message\", event.data);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.emit(SocketEventType.Message, data);\n\t\t};\n\n\t\tthis._socket.onclose = (event) => {\n\t\t\tif (this._disconnected) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlogger.log(\"Socket closed.\", event);\n\n\t\t\tthis._cleanup();\n\t\t\tthis._disconnected = true;\n\n\t\t\tthis.emit(SocketEventType.Disconnected);\n\t\t};\n\n\t\t// Take care of the queue of connections if necessary and make sure Peer knows\n\t\t// socket is open.\n\t\tthis._socket.onopen = () => {\n\t\t\tif (this._disconnected) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._sendQueuedMessages();\n\n\t\t\tlogger.log(\"Socket open\");\n\n\t\t\tthis._scheduleHeartbeat();\n\t\t};\n\t}\n\n\tprivate _scheduleHeartbeat(): void {\n\t\tthis._wsPingTimer = setTimeout(() => {\n\t\t\tthis._sendHeartbeat();\n\t\t}, this.pingInterval);\n\t}\n\n\tprivate _sendHeartbeat(): void {\n\t\tif (!this._wsOpen()) {\n\t\t\tlogger.log(`Cannot send heartbeat, because socket closed`);\n\t\t\treturn;\n\t\t}\n\n\t\tconst message = JSON.stringify({ type: ServerMessageType.Heartbeat });\n\n\t\tthis._socket!.send(message);\n\n\t\tthis._scheduleHeartbeat();\n\t}\n\n\t/** Is the websocket currently open? */\n\tprivate _wsOpen(): boolean {\n\t\treturn !!this._socket && this._socket.readyState === 1;\n\t}\n\n\t/** Send queued messages. */\n\tprivate _sendQueuedMessages(): void {\n\t\t//Create copy of queue and clear it,\n\t\t//because send method push the message back to queue if smth will go wrong\n\t\tconst copiedQueue = [...this._messagesQueue];\n\t\tthis._messagesQueue = [];\n\n\t\tfor (const message of copiedQueue) {\n\t\t\tthis.send(message);\n\t\t}\n\t}\n\n\t/** Exposed send for DC & Peer. */\n\tsend(data: any): void {\n\t\tif (this._disconnected) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If we didn't get an ID yet, we can't yet send anything so we should queue\n\t\t// up these messages.\n\t\tif (!this._id) {\n\t\t\tthis._messagesQueue.push(data);\n\t\t\treturn;\n\t\t}\n\n\t\tif (!data.type) {\n\t\t\tthis.emit(SocketEventType.Error, \"Invalid message\");\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this._wsOpen()) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst message = JSON.stringify(data);\n\n\t\tthis._socket!.send(message);\n\t}\n\n\tclose(): void {\n\t\tif (this._disconnected) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._cleanup();\n\n\t\tthis._disconnected = true;\n\t}\n\n\tprivate _cleanup(): void {\n\t\tif (this._socket) {\n\t\t\tthis._socket.onopen =\n\t\t\t\tthis._socket.onmessage =\n\t\t\t\tthis._socket.onclose =\n\t\t\t\t\tnull;\n\t\t\tthis._socket.close();\n\t\t\tthis._socket = undefined;\n\t\t}\n\n\t\tclearTimeout(this._wsPingTimer!);\n\t}\n}\n", "export enum ConnectionType {\n\tData = \"data\",\n\tMedia = \"media\",\n}\n\nexport enum PeerErrorType {\n\t/**\n\t * The client's browser does not support some or all WebRTC features that you are trying to use.\n\t */\n\tBrowserIncompatible = \"browser-incompatible\",\n\t/**\n\t * You've already disconnected this peer from the server and can no longer make any new connections on it.\n\t */\n\tDisconnected = \"disconnected\",\n\t/**\n\t * The ID passed into the Peer constructor contains illegal characters.\n\t */\n\tInvalidID = \"invalid-id\",\n\t/**\n\t * The API key passed into the Peer constructor contains illegal characters or is not in the system (cloud server only).\n\t */\n\tInvalidKey = \"invalid-key\",\n\t/**\n\t * Lost or cannot establish a connection to the signalling server.\n\t */\n\tNetwork = \"network\",\n\t/**\n\t * The peer you're trying to connect to does not exist.\n\t */\n\tPeerUnavailable = \"peer-unavailable\",\n\t/**\n\t * PeerJS is being used securely, but the cloud server does not support SSL. Use a custom PeerServer.\n\t */\n\tSslUnavailable = \"ssl-unavailable\",\n\t/**\n\t * Unable to reach the server.\n\t */\n\tServerError = \"server-error\",\n\t/**\n\t * An error from the underlying socket.\n\t */\n\tSocketError = \"socket-error\",\n\t/**\n\t * The underlying socket closed unexpectedly.\n\t */\n\tSocketClosed = \"socket-closed\",\n\t/**\n\t * The ID passed into the Peer constructor is already taken.\n\t *\n\t * :::caution\n\t * This error is not fatal if your peer has open peer-to-peer connections.\n\t * This can happen if you attempt to {@apilink Peer.reconnect} a peer that has been disconnected from the server,\n\t * but its old ID has now been taken.\n\t * :::\n\t */\n\tUnavailableID = \"unavailable-id\",\n\t/**\n\t * Native WebRTC errors.\n\t */\n\tWebRTC = \"webrtc\",\n}\n\nexport enum BaseConnectionErrorType {\n\tNegotiationFailed = \"negotiation-failed\",\n\tConnectionClosed = \"connection-closed\",\n}\n\nexport enum DataConnectionErrorType {\n\tNotOpenYet = \"not-open-yet\",\n\tMessageToBig = \"message-too-big\",\n}\n\nexport enum SerializationType {\n\tBinary = \"binary\",\n\tBinaryUTF8 = \"binary-utf8\",\n\tJSON = \"json\",\n\tNone = \"raw\",\n}\n\nexport enum SocketEventType {\n\tMessage = \"message\",\n\tDisconnected = \"disconnected\",\n\tError = \"error\",\n\tClose = \"close\",\n}\n\nexport enum ServerMessageType {\n\tHeartbeat = \"HEARTBEAT\",\n\tCandidate = \"CANDIDATE\",\n\tOffer = \"OFFER\",\n\tAnswer = \"ANSWER\",\n\tOpen = \"OPEN\", // The connection to the server is open.\n\tError = \"ERROR\", // Server error.\n\tIdTaken = \"ID-TAKEN\", // The selected ID is taken.\n\tInvalidKey = \"INVALID-KEY\", // The given API key cannot be found.\n\tLeave = \"LEAVE\", // Another peer has closed its connection to this peer.\n\tExpire = \"EXPIRE\", // The offer sent to a peer has expired without response.\n}\n", "export const version = \"1.5.5\";\n", "import { util } from \"./util\";\nimport logger from \"./logger\";\nimport { Negotiator } from \"./negotiator\";\nimport { ConnectionType, ServerMessageType } from \"./enums\";\nimport type { Peer } from \"./peer\";\nimport { BaseConnection, type BaseConnectionEvents } from \"./baseconnection\";\nimport type { ServerMessage } from \"./servermessage\";\nimport type { AnswerOption } from \"./optionInterfaces\";\n\nexport interface MediaConnectionEvents extends BaseConnectionEvents<never> {\n\t/**\n\t * Emitted when a connection to the PeerServer is established.\n\t *\n\t * ```ts\n\t * mediaConnection.on('stream', (stream) => { ... });\n\t * ```\n\t */\n\tstream: (stream: MediaStream) => void;\n\t/**\n\t * Emitted when the auxiliary data channel is established.\n\t * After this event, hanging up will close the connection cleanly on the remote peer.\n\t * @beta\n\t */\n\twillCloseOnRemote: () => void;\n}\n\n/**\n * Wraps WebRTC's media streams.\n * To get one, use {@apilink Peer.call} or listen for the {@apilink PeerEvents | `call`} event.\n */\nexport class MediaConnection extends BaseConnection<MediaConnectionEvents> {\n\tprivate static readonly ID_PREFIX = \"mc_\";\n\treadonly label: string;\n\n\tprivate _negotiator: Negotiator<MediaConnectionEvents, this>;\n\tprivate _localStream: MediaStream;\n\tprivate _remoteStream: MediaStream;\n\n\t/**\n\t * For media connections, this is always 'media'.\n\t */\n\tget type() {\n\t\treturn ConnectionType.Media;\n\t}\n\n\tget localStream(): MediaStream {\n\t\treturn this._localStream;\n\t}\n\n\tget remoteStream(): MediaStream {\n\t\treturn this._remoteStream;\n\t}\n\n\tconstructor(peerId: string, provider: Peer, options: any) {\n\t\tsuper(peerId, provider, options);\n\n\t\tthis._localStream = this.options._stream;\n\t\tthis.connectionId =\n\t\t\tthis.options.connectionId ||\n\t\t\tMediaConnection.ID_PREFIX + util.randomToken();\n\n\t\tthis._negotiator = new Negotiator(this);\n\n\t\tif (this._localStream) {\n\t\t\tthis._negotiator.startConnection({\n\t\t\t\t_stream: this._localStream,\n\t\t\t\toriginator: true,\n\t\t\t});\n\t\t}\n\t}\n\n\t/** Called by the Negotiator when the DataChannel is ready. */\n\toverride _initializeDataChannel(dc: RTCDataChannel): void {\n\t\tthis.dataChannel = dc;\n\n\t\tthis.dataChannel.onopen = () => {\n\t\t\tlogger.log(`DC#${this.connectionId} dc connection success`);\n\t\t\tthis.emit(\"willCloseOnRemote\");\n\t\t};\n\n\t\tthis.dataChannel.onclose = () => {\n\t\t\tlogger.log(`DC#${this.connectionId} dc closed for:`, this.peer);\n\t\t\tthis.close();\n\t\t};\n\t}\n\taddStream(remoteStream) {\n\t\tlogger.log(\"Receiving stream\", remoteStream);\n\n\t\tthis._remoteStream = remoteStream;\n\t\tsuper.emit(\"stream\", remoteStream); // Should we call this `open`?\n\t}\n\n\t/**\n\t * @internal\n\t */\n\thandleMessage(message: ServerMessage): void {\n\t\tconst type = message.type;\n\t\tconst payload = message.payload;\n\n\t\tswitch (message.type) {\n\t\t\tcase ServerMessageType.Answer:\n\t\t\t\t// Forward to negotiator\n\t\t\t\tvoid this._negotiator.handleSDP(type, payload.sdp);\n\t\t\t\tthis._open = true;\n\t\t\t\tbreak;\n\t\t\tcase ServerMessageType.Candidate:\n\t\t\t\tvoid this._negotiator.handleCandidate(payload.candidate);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tlogger.warn(`Unrecognized message type:${type} from peer:${this.peer}`);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\t/**\n * When receiving a {@apilink PeerEvents | `call`} event on a peer, you can call\n * `answer` on the media connection provided by the callback to accept the call\n * and optionally send your own media stream.\n\n *\n * @param stream A WebRTC media stream.\n * @param options\n * @returns\n */\n\tanswer(stream?: MediaStream, options: AnswerOption = {}): void {\n\t\tif (this._localStream) {\n\t\t\tlogger.warn(\n\t\t\t\t\"Local stream already exists on this MediaConnection. Are you answering a call twice?\",\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tthis._localStream = stream;\n\n\t\tif (options && options.sdpTransform) {\n\t\t\tthis.options.sdpTransform = options.sdpTransform;\n\t\t}\n\n\t\tthis._negotiator.startConnection({\n\t\t\t...this.options._payload,\n\t\t\t_stream: stream,\n\t\t});\n\t\t// Retrieve lost messages stored because PeerConnection not set up.\n\t\tconst messages = this.provider._getMessages(this.connectionId);\n\n\t\tfor (const message of messages) {\n\t\t\tthis.handleMessage(message);\n\t\t}\n\n\t\tthis._open = true;\n\t}\n\n\t/**\n\t * Exposed functionality for users.\n\t */\n\n\t/**\n\t * Closes the media connection.\n\t */\n\tclose(): void {\n\t\tif (this._negotiator) {\n\t\t\tthis._negotiator.cleanup();\n\t\t\tthis._negotiator = null;\n\t\t}\n\n\t\tthis._localStream = null;\n\t\tthis._remoteStream = null;\n\n\t\tif (this.provider) {\n\t\t\tthis.provider._removeConnection(this);\n\n\t\t\tthis.provider = null;\n\t\t}\n\n\t\tif (this.options && this.options._stream) {\n\t\t\tthis.options._stream = null;\n\t\t}\n\n\t\tif (!this.open) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._open = false;\n\n\t\tsuper.emit(\"close\");\n\t}\n}\n", "import logger from \"./logger\";\nimport type { MediaConnection } from \"./mediaconnection\";\nimport type { DataConnection } from \"./dataconnection/DataConnection\";\nimport {\n\tBaseConnectionErrorType,\n\tConnectionType,\n\tPeerErrorType,\n\tServerMessageType,\n} from \"./enums\";\nimport type { BaseConnection, BaseConnectionEvents } from \"./baseconnection\";\nimport type { ValidEventTypes } from \"eventemitter3\";\n\n/**\n * Manages all negotiations between Peers.\n */\nexport class Negotiator<\n\tEvents extends ValidEventTypes,\n\tConnectionType extends BaseConnection<Events | BaseConnectionEvents>,\n> {\n\tconstructor(readonly connection: ConnectionType) {}\n\n\t/** Returns a PeerConnection object set up correctly (for data, media). */\n\tstartConnection(options: any) {\n\t\tconst peerConnection = this._startPeerConnection();\n\n\t\t// Set the connection's PC.\n\t\tthis.connection.peerConnection = peerConnection;\n\n\t\tif (this.connection.type === ConnectionType.Media && options._stream) {\n\t\t\tthis._addTracksToConnection(options._stream, peerConnection);\n\t\t}\n\n\t\t// What do we need to do now?\n\t\tif (options.originator) {\n\t\t\tconst dataConnection = this.connection;\n\n\t\t\tconst config: RTCDataChannelInit = { ordered: !!options.reliable };\n\n\t\t\tconst dataChannel = peerConnection.createDataChannel(\n\t\t\t\tdataConnection.label,\n\t\t\t\tconfig,\n\t\t\t);\n\t\t\tdataConnection._initializeDataChannel(dataChannel);\n\n\t\t\tvoid this._makeOffer();\n\t\t} else {\n\t\t\tvoid this.handleSDP(\"OFFER\", options.sdp);\n\t\t}\n\t}\n\n\t/** Start a PC. */\n\tprivate _startPeerConnection(): RTCPeerConnection {\n\t\tlogger.log(\"Creating RTCPeerConnection.\");\n\n\t\tconst peerConnection = new RTCPeerConnection(\n\t\t\tthis.connection.provider.options.config,\n\t\t);\n\n\t\tthis._setupListeners(peerConnection);\n\n\t\treturn peerConnection;\n\t}\n\n\t/** Set up various WebRTC listeners. */\n\tprivate _setupListeners(peerConnection: RTCPeerConnection) {\n\t\tconst peerId = this.connection.peer;\n\t\tconst connectionId = this.connection.connectionId;\n\t\tconst connectionType = this.connection.type;\n\t\tconst provider = this.connection.provider;\n\n\t\t// ICE CANDIDATES.\n\t\tlogger.log(\"Listening for ICE candidates.\");\n\n\t\tpeerConnection.onicecandidate = (evt) => {\n\t\t\tif (!evt.candidate || !evt.candidate.candidate) return;\n\n\t\t\tlogger.log(`Received ICE candidates for ${peerId}:`, evt.candidate);\n\n\t\t\tprovider.socket.send({\n\t\t\t\ttype: ServerMessageType.Candidate,\n\t\t\t\tpayload: {\n\t\t\t\t\tcandidate: evt.candidate,\n\t\t\t\t\ttype: connectionType,\n\t\t\t\t\tconnectionId: connectionId,\n\t\t\t\t},\n\t\t\t\tdst: peerId,\n\t\t\t});\n\t\t};\n\n\t\tpeerConnection.oniceconnectionstatechange = () => {\n\t\t\tswitch (peerConnection.iceConnectionState) {\n\t\t\t\tcase \"failed\":\n\t\t\t\t\tlogger.log(\n\t\t\t\t\t\t\"iceConnectionState is failed, closing connections to \" + peerId,\n\t\t\t\t\t);\n\t\t\t\t\tthis.connection.emitError(\n\t\t\t\t\t\tBaseConnectionErrorType.NegotiationFailed,\n\t\t\t\t\t\t\"Negotiation of connection to \" + peerId + \" failed.\",\n\t\t\t\t\t);\n\t\t\t\t\tthis.connection.close();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"closed\":\n\t\t\t\t\tlogger.log(\n\t\t\t\t\t\t\"iceConnectionState is closed, closing connections to \" + peerId,\n\t\t\t\t\t);\n\t\t\t\t\tthis.connection.emitError(\n\t\t\t\t\t\tBaseConnectionErrorType.ConnectionClosed,\n\t\t\t\t\t\t\"Connection to \" + peerId + \" closed.\",\n\t\t\t\t\t);\n\t\t\t\t\tthis.connection.close();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"disconnected\":\n\t\t\t\t\tlogger.log(\n\t\t\t\t\t\t\"iceConnectionState changed to disconnected on the connection with \" +\n\t\t\t\t\t\t\tpeerId,\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"completed\":\n\t\t\t\t\tpeerConnection.onicecandidate = () => {};\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tthis.connection.emit(\n\t\t\t\t\"iceStateChanged\",\n\t\t\t\tpeerConnection.iceConnectionState,\n\t\t\t);\n\t\t};\n\n\t\t// DATACONNECTION.\n\t\tlogger.log(\"Listening for data channel\");\n\t\t// Fired between offer and answer, so options should already be saved\n\t\t// in the options hash.\n\t\tpeerConnection.ondatachannel = (evt) => {\n\t\t\tlogger.log(\"Received data channel\");\n\n\t\t\tconst dataChannel = evt.channel;\n\t\t\tconst connection = <DataConnection>(\n\t\t\t\tprovider.getConnection(peerId, connectionId)\n\t\t\t);\n\n\t\t\tconnection._initializeDataChannel(dataChannel);\n\t\t};\n\n\t\t// MEDIACONNECTION.\n\t\tlogger.log(\"Listening for remote stream\");\n\n\t\tpeerConnection.ontrack = (evt) => {\n\t\t\tlogger.log(\"Received remote stream\");\n\n\t\t\tconst stream = evt.streams[0];\n\t\t\tconst connection = provider.getConnection(peerId, connectionId);\n\n\t\t\tif (connection.type === ConnectionType.Media) {\n\t\t\t\tconst mediaConnection = <MediaConnection>connection;\n\n\t\t\t\tthis._addStreamToMediaConnection(stream, mediaConnection);\n\t\t\t}\n\t\t};\n\t}\n\n\tcleanup(): void {\n\t\tlogger.log(\"Cleaning up PeerConnection to \" + this.connection.peer);\n\n\t\tconst peerConnection = this.connection.peerConnection;\n\n\t\tif (!peerConnection) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.connection.peerConnection = null;\n\n\t\t//unsubscribe from all PeerConnection's events\n\t\tpeerConnection.onicecandidate =\n\t\t\tpeerConnection.oniceconnectionstatechange =\n\t\t\tpeerConnection.ondatachannel =\n\t\t\tpeerConnection.ontrack =\n\t\t\t\t() => {};\n\n\t\tconst peerConnectionNotClosed = peerConnection.signalingState !== \"closed\";\n\t\tlet dataChannelNotClosed = false;\n\n\t\tconst dataChannel = this.connection.dataChannel;\n\n\t\tif (dataChannel) {\n\t\t\tdataChannelNotClosed =\n\t\t\t\t!!dataChannel.readyState && dataChannel.readyState !== \"closed\";\n\t\t}\n\n\t\tif (peerConnectionNotClosed || dataChannelNotClosed) {\n\t\t\tpeerConnection.close();\n\t\t}\n\t}\n\n\tprivate async _makeOffer(): Promise<void> {\n\t\tconst peerConnection = this.connection.peerConnection;\n\t\tconst provider = this.connection.provider;\n\n\t\ttry {\n\t\t\tconst offer = await peerConnection.createOffer(\n\t\t\t\tthis.connection.options.constraints,\n\t\t\t);\n\n\t\t\tlogger.log(\"Created offer.\");\n\n\t\t\tif (\n\t\t\t\tthis.connection.options.sdpTransform &&\n\t\t\t\ttypeof this.connection.options.sdpTransform === \"function\"\n\t\t\t) {\n\t\t\t\toffer.sdp =\n\t\t\t\t\tthis.connection.options.sdpTransform(offer.sdp) || offer.sdp;\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tawait peerConnection.setLocalDescription(offer);\n\n\t\t\t\tlogger.log(\n\t\t\t\t\t\"Set localDescription:\",\n\t\t\t\t\toffer,\n\t\t\t\t\t`for:${this.connection.peer}`,\n\t\t\t\t);\n\n\t\t\t\tlet payload: any = {\n\t\t\t\t\tsdp: offer,\n\t\t\t\t\ttype: this.connection.type,\n\t\t\t\t\tconnectionId: this.connection.connectionId,\n\t\t\t\t\tmetadata: this.connection.metadata,\n\t\t\t\t};\n\n\t\t\t\tif (this.connection.type === ConnectionType.Data) {\n\t\t\t\t\tconst dataConnection = <DataConnection>(<unknown>this.connection);\n\n\t\t\t\t\tpayload = {\n\t\t\t\t\t\t...payload,\n\t\t\t\t\t\tlabel: dataConnection.label,\n\t\t\t\t\t\treliable: dataConnection.reliable,\n\t\t\t\t\t\tserialization: dataConnection.serialization,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tprovider.socket.send({\n\t\t\t\t\ttype: ServerMessageType.Offer,\n\t\t\t\t\tpayload,\n\t\t\t\t\tdst: this.connection.peer,\n\t\t\t\t});\n\t\t\t} catch (err) {\n\t\t\t\t// TODO: investigate why _makeOffer is being called from the answer\n\t\t\t\tif (\n\t\t\t\t\terr !=\n\t\t\t\t\t\"OperationError: Failed to set local offer sdp: Called in wrong state: kHaveRemoteOffer\"\n\t\t\t\t) {\n\t\t\t\t\tprovider.emitError(PeerErrorType.WebRTC, err);\n\t\t\t\t\tlogger.log(\"Failed to setLocalDescription, \", err);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (err_1) {\n\t\t\tprovider.emitError(PeerErrorType.WebRTC, err_1);\n\t\t\tlogger.log(\"Failed to createOffer, \", err_1);\n\t\t}\n\t}\n\n\tprivate async _makeAnswer(): Promise<void> {\n\t\tconst peerConnection = this.connection.peerConnection;\n\t\tconst provider = this.connection.provider;\n\n\t\ttry {\n\t\t\tconst answer = await peerConnection.createAnswer();\n\t\t\tlogger.log(\"Created answer.\");\n\n\t\t\tif (\n\t\t\t\tthis.connection.options.sdpTransform &&\n\t\t\t\ttypeof this.connection.options.sdpTransform === \"function\"\n\t\t\t) {\n\t\t\t\tanswer.sdp =\n\t\t\t\t\tthis.connection.options.sdpTransform(answer.sdp) || answer.sdp;\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tawait peerConnection.setLocalDescription(answer);\n\n\t\t\t\tlogger.log(\n\t\t\t\t\t`Set localDescription:`,\n\t\t\t\t\tanswer,\n\t\t\t\t\t`for:${this.connection.peer}`,\n\t\t\t\t);\n\n\t\t\t\tprovider.socket.send({\n\t\t\t\t\ttype: ServerMessageType.Answer,\n\t\t\t\t\tpayload: {\n\t\t\t\t\t\tsdp: answer,\n\t\t\t\t\t\ttype: this.connection.type,\n\t\t\t\t\t\tconnectionId: this.connection.connectionId,\n\t\t\t\t\t},\n\t\t\t\t\tdst: this.connection.peer,\n\t\t\t\t});\n\t\t\t} catch (err) {\n\t\t\t\tprovider.emitError(PeerErrorType.WebRTC, err);\n\t\t\t\tlogger.log(\"Failed to setLocalDescription, \", err);\n\t\t\t}\n\t\t} catch (err_1) {\n\t\t\tprovider.emitError(PeerErrorType.WebRTC, err_1);\n\t\t\tlogger.log(\"Failed to create answer, \", err_1);\n\t\t}\n\t}\n\n\t/** Handle an SDP. */\n\tasync handleSDP(type: string, sdp: any): Promise<void> {\n\t\tsdp = new RTCSessionDescription(sdp);\n\t\tconst peerConnection = this.connection.peerConnection;\n\t\tconst provider = this.connection.provider;\n\n\t\tlogger.log(\"Setting remote description\", sdp);\n\n\t\tconst self = this;\n\n\t\ttry {\n\t\t\tawait peerConnection.setRemoteDescription(sdp);\n\t\t\tlogger.log(`Set remoteDescription:${type} for:${this.connection.peer}`);\n\t\t\tif (type === \"OFFER\") {\n\t\t\t\tawait self._makeAnswer();\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tprovider.emitError(PeerErrorType.WebRTC, err);\n\t\t\tlogger.log(\"Failed to setRemoteDescription, \", err);\n\t\t}\n\t}\n\n\t/** Handle a candidate. */\n\tasync handleCandidate(ice: RTCIceCandidate) {\n\t\tlogger.log(`handleCandidate:`, ice);\n\n\t\ttry {\n\t\t\tawait this.connection.peerConnection.addIceCandidate(ice);\n\t\t\tlogger.log(`Added ICE candidate for:${this.connection.peer}`);\n\t\t} catch (err) {\n\t\t\tthis.connection.provider.emitError(PeerErrorType.WebRTC, err);\n\t\t\tlogger.log(\"Failed to handleCandidate, \", err);\n\t\t}\n\t}\n\n\tprivate _addTracksToConnection(\n\t\tstream: MediaStream,\n\t\tpeerConnection: RTCPeerConnection,\n\t): void {\n\t\tlogger.log(`add tracks from stream ${stream.id} to peer connection`);\n\n\t\tif (!peerConnection.addTrack) {\n\t\t\treturn logger.error(\n\t\t\t\t`Your browser does't support RTCPeerConnection#addTrack. Ignored.`,\n\t\t\t);\n\t\t}\n\n\t\tstream.getTracks().forEach((track) => {\n\t\t\tpeerConnection.addTrack(track, stream);\n\t\t});\n\t}\n\n\tprivate _addStreamToMediaConnection(\n\t\tstream: MediaStream,\n\t\tmediaConnection: MediaConnection,\n\t): void {\n\t\tlogger.log(\n\t\t\t`add stream ${stream.id} to media connection ${mediaConnection.connectionId}`,\n\t\t);\n\n\t\tmediaConnection.addStream(stream);\n\t}\n}\n", "import type { Peer } from \"./peer\";\nimport type { ServerMessage } from \"./servermessage\";\nimport type { ConnectionType } from \"./enums\";\nimport { BaseConnectionErrorType } from \"./enums\";\nimport {\n\tEventEmitterWithError,\n\ttype EventsWithError,\n\tPeerError,\n} from \"./peerError\";\nimport type { ValidEventTypes } from \"eventemitter3\";\n\nexport interface BaseConnectionEvents<\n\tErrorType extends string = BaseConnectionErrorType,\n> extends EventsWithError<ErrorType> {\n\t/**\n\t * Emitted when either you or the remote peer closes the connection.\n\t *\n\t * ```ts\n\t * connection.on('close', () => { ... });\n\t * ```\n\t */\n\tclose: () => void;\n\t/**\n\t * ```ts\n\t * connection.on('error', (error) => { ... });\n\t * ```\n\t */\n\terror: (error: PeerError<`${ErrorType}`>) => void;\n\ticeStateChanged: (state: RTCIceConnectionState) => void;\n}\n\nexport abstract class BaseConnection<\n\tSubClassEvents extends ValidEventTypes,\n\tErrorType extends string = never,\n> extends EventEmitterWithError<\n\tErrorType | BaseConnectionErrorType,\n\tSubClassEvents & BaseConnectionEvents<BaseConnectionErrorType | ErrorType>\n> {\n\tprotected _open = false;\n\n\t/**\n\t * Any type of metadata associated with the connection,\n\t * passed in by whoever initiated the connection.\n\t */\n\treadonly metadata: any;\n\tconnectionId: string;\n\n\tpeerConnection: RTCPeerConnection;\n\tdataChannel: RTCDataChannel;\n\n\tabstract get type(): ConnectionType;\n\n\t/**\n\t * The optional label passed in or assigned by PeerJS when the connection was initiated.\n\t */\n\tlabel: string;\n\n\t/**\n\t * Whether the media connection is active (e.g. your call has been answered).\n\t * You can check this if you want to set a maximum wait time for a one-sided call.\n\t */\n\tget open() {\n\t\treturn this._open;\n\t}\n\n\tprotected constructor(\n\t\t/**\n\t\t * The ID of the peer on the other end of this connection.\n\t\t */\n\t\treadonly peer: string,\n\t\tpublic provider: Peer,\n\t\treadonly options: any,\n\t) {\n\t\tsuper();\n\n\t\tthis.metadata = options.metadata;\n\t}\n\n\tabstract close(): void;\n\n\t/**\n\t * @internal\n\t */\n\tabstract handleMessage(message: ServerMessage): void;\n\n\t/**\n\t * Called by the Negotiator when the DataChannel is ready.\n\t * @internal\n\t * */\n\tabstract _initializeDataChannel(dc: RTCDataChannel): void;\n}\n", "import { EventEmitter } from \"eventemitter3\";\nimport logger from \"./logger\";\n\nexport interface EventsWithError<ErrorType extends string> {\n\terror: (error: PeerError<`${ErrorType}`>) => void;\n}\n\nexport class EventEmitterWithError<\n\tErrorType extends string,\n\tEvents extends EventsWithError<ErrorType>,\n> extends EventEmitter<Events, never> {\n\t/**\n\t * Emits a typed error message.\n\t *\n\t * @internal\n\t */\n\temitError(type: ErrorType, err: string | Error): void {\n\t\tlogger.error(\"Error:\", err);\n\n\t\t// @ts-ignore\n\t\tthis.emit(\"error\", new PeerError<`${ErrorType}`>(`${type}`, err));\n\t}\n}\n/**\n * A PeerError is emitted whenever an error occurs.\n * It always has a `.type`, which can be used to identify the error.\n */\nexport class PeerError<T extends string> extends Error {\n\t/**\n\t * @internal\n\t */\n\tconstructor(type: T, err: Error | string) {\n\t\tif (typeof err === \"string\") {\n\t\t\tsuper(err);\n\t\t} else {\n\t\t\tsuper();\n\t\t\tObject.assign(this, err);\n\t\t}\n\n\t\tthis.type = type;\n\t}\n\n\tpublic type: T;\n}\n", "import { util } from \"./util\";\nimport logger from \"./logger\";\nimport type { PeerJSOption } from \"./optionInterfaces\";\nimport { version } from \"./version\";\n\nexport class API {\n\tconstructor(private readonly _options: PeerJSOption) {}\n\n\tprivate _buildRequest(method: string): Promise<Response> {\n\t\tconst protocol = this._options.secure ? \"https\" : \"http\";\n\t\tconst { host, port, path, key } = this._options;\n\t\tconst url = new URL(`${protocol}://${host}:${port}${path}${key}/${method}`);\n\t\t// TODO: Why timestamp, why random?\n\t\turl.searchParams.set(\"ts\", `${Date.now()}${Math.random()}`);\n\t\turl.searchParams.set(\"version\", version);\n\t\treturn fetch(url.href, {\n\t\t\treferrerPolicy: this._options.referrerPolicy,\n\t\t});\n\t}\n\n\t/** Get a unique ID from the server via XHR and initialize with it. */\n\tasync retrieveId(): Promise<string> {\n\t\ttry {\n\t\t\tconst response = await this._buildRequest(\"id\");\n\n\t\t\tif (response.status !== 200) {\n\t\t\t\tthrow new Error(`Error. Status:${response.status}`);\n\t\t\t}\n\n\t\t\treturn response.text();\n\t\t} catch (error) {\n\t\t\tlogger.error(\"Error retrieving ID\", error);\n\n\t\t\tlet pathError = \"\";\n\n\t\t\tif (\n\t\t\t\tthis._options.path === \"/\" &&\n\t\t\t\tthis._options.host !== util.CLOUD_HOST\n\t\t\t) {\n\t\t\t\tpathError =\n\t\t\t\t\t\" If you passed in a `path` to your self-hosted PeerServer, \" +\n\t\t\t\t\t\"you'll also need to pass in that same path when creating a new \" +\n\t\t\t\t\t\"Peer.\";\n\t\t\t}\n\n\t\t\tthrow new Error(\"Could not get an ID from the server.\" + pathError);\n\t\t}\n\t}\n\n\t/** @deprecated */\n\tasync listAllPeers(): Promise<any[]> {\n\t\ttry {\n\t\t\tconst response = await this._buildRequest(\"peers\");\n\n\t\t\tif (response.status !== 200) {\n\t\t\t\tif (response.status === 401) {\n\t\t\t\t\tlet helpfulError = \"\";\n\n\t\t\t\t\tif (this._options.host === util.CLOUD_HOST) {\n\t\t\t\t\t\thelpfulError =\n\t\t\t\t\t\t\t\"It looks like you're using the cloud server. You can email \" +\n\t\t\t\t\t\t\t\"team@peerjs.com to enable peer listing for your API key.\";\n\t\t\t\t\t} else {\n\t\t\t\t\t\thelpfulError =\n\t\t\t\t\t\t\t\"You need to enable `allow_discovery` on your self-hosted \" +\n\t\t\t\t\t\t\t\"PeerServer to use this feature.\";\n\t\t\t\t\t}\n\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\"It doesn't look like you have permission to list peers IDs. \" +\n\t\t\t\t\t\t\thelpfulError,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tthrow new Error(`Error. Status:${response.status}`);\n\t\t\t}\n\n\t\t\treturn response.json();\n\t\t} catch (error) {\n\t\t\tlogger.error(\"Error retrieving list peers\", error);\n\n\t\t\tthrow new Error(\"Could not get list peers from the server.\" + error);\n\t\t}\n\t}\n}\n", "import { BinaryPackChunker, concatArrayBuffers } from \"./binaryPackChunker\";\nimport logger from \"../../logger\";\nimport type { Peer } from \"../../peer\";\nimport { BufferedConnection } from \"./BufferedConnection\";\nimport { SerializationType } from \"../../enums\";\nimport { pack, type Packable, unpack } from \"peerjs-js-binarypack\";\n\nexport class BinaryPack extends BufferedConnection {\n\tprivate readonly chunker = new BinaryPackChunker();\n\treadonly serialization = SerializationType.Binary;\n\n\tprivate _chunkedData: {\n\t\t[id: number]: {\n\t\t\tdata: Uint8Array[];\n\t\t\tcount: number;\n\t\t\ttotal: number;\n\t\t};\n\t} = {};\n\n\tpublic override close(options?: { flush?: boolean }) {\n\t\tsuper.close(options);\n\t\tthis._chunkedData = {};\n\t}\n\n\tconstructor(peerId: string, provider: Peer, options: any) {\n\t\tsuper(peerId, provider, options);\n\t}\n\n\t// Handles a DataChannel message.\n\tprotected override _handleDataMessage({ data }: { data: Uint8Array }): void {\n\t\tconst deserializedData = unpack(data);\n\n\t\t// PeerJS specific message\n\t\tconst peerData = deserializedData[\"__peerData\"];\n\t\tif (peerData) {\n\t\t\tif (peerData.type === \"close\") {\n\t\t\t\tthis.close();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Chunked data -- piece things back together.\n\t\t\t// @ts-ignore\n\t\t\tthis._handleChunk(deserializedData);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.emit(\"data\", deserializedData);\n\t}\n\n\tprivate _handleChunk(data: {\n\t\t__peerData: number;\n\t\tn: number;\n\t\ttotal: number;\n\t\tdata: ArrayBuffer;\n\t}): void {\n\t\tconst id = data.__peerData;\n\t\tconst chunkInfo = this._chunkedData[id] || {\n\t\t\tdata: [],\n\t\t\tcount: 0,\n\t\t\ttotal: data.total,\n\t\t};\n\n\t\tchunkInfo.data[data.n] = new Uint8Array(data.data);\n\t\tchunkInfo.count++;\n\t\tthis._chunkedData[id] = chunkInfo;\n\n\t\tif (chunkInfo.total === chunkInfo.count) {\n\t\t\t// Clean up before making the recursive call to `_handleDataMessage`.\n\t\t\tdelete this._chunkedData[id];\n\n\t\t\t// We've received all the chunks--time to construct the complete data.\n\t\t\t// const data = new Blob(chunkInfo.data);\n\t\t\tconst data = concatArrayBuffers(chunkInfo.data);\n\t\t\tthis._handleDataMessage({ data });\n\t\t}\n\t}\n\n\tprotected override _send(data: Packable, chunked: boolean) {\n\t\tconst blob = pack(data);\n\t\tif (blob instanceof Promise) {\n\t\t\treturn this._send_blob(blob);\n\t\t}\n\n\t\tif (!chunked && blob.byteLength > this.chunker.chunkedMTU) {\n\t\t\tthis._sendChunks(blob);\n\t\t\treturn;\n\t\t}\n\n\t\tthis._bufferedSend(blob);\n\t}\n\tprivate async _send_blob(blobPromise: Promise<ArrayBufferLike>) {\n\t\tconst blob = await blobPromise;\n\t\tif (blob.byteLength > this.chunker.chunkedMTU) {\n\t\t\tthis._sendChunks(blob);\n\t\t\treturn;\n\t\t}\n\n\t\tthis._bufferedSend(blob);\n\t}\n\n\tprivate _sendChunks(blob: ArrayBuffer) {\n\t\tconst blobs = this.chunker.chunk(blob);\n\t\tlogger.log(`DC#${this.connectionId} Try to send ${blobs.length} chunks...`);\n\n\t\tfor (const blob of blobs) {\n\t\t\tthis.send(blob, true);\n\t\t}\n\t}\n}\n", "import logger from \"../../logger\";\nimport { DataConnection } from \"../DataConnection\";\n\nexport abstract class BufferedConnection extends DataConnection {\n\tprivate _buffer: any[] = [];\n\tprivate _bufferSize = 0;\n\tprivate _buffering = false;\n\n\tpublic get bufferSize(): number {\n\t\treturn this._bufferSize;\n\t}\n\n\tpublic override _initializeDataChannel(dc: RTCDataChannel) {\n\t\tsuper._initializeDataChannel(dc);\n\t\tthis.dataChannel.binaryType = \"arraybuffer\";\n\t\tthis.dataChannel.addEventListener(\"message\", (e) =>\n\t\t\tthis._handleDataMessage(e),\n\t\t);\n\t}\n\n\tprotected abstract _handleDataMessage(e: MessageEvent): void;\n\n\tprotected _bufferedSend(msg: ArrayBuffer): void {\n\t\tif (this._buffering || !this._trySend(msg)) {\n\t\t\tthis._buffer.push(msg);\n\t\t\tthis._bufferSize = this._buffer.length;\n\t\t}\n\t}\n\n\t// Returns true if the send succeeds.\n\tprivate _trySend(msg: ArrayBuffer): boolean {\n\t\tif (!this.open) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (this.dataChannel.bufferedAmount > DataConnection.MAX_BUFFERED_AMOUNT) {\n\t\t\tthis._buffering = true;\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis._buffering = false;\n\t\t\t\tthis._tryBuffer();\n\t\t\t}, 50);\n\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\tthis.dataChannel.send(msg);\n\t\t} catch (e) {\n\t\t\tlogger.error(`DC#:${this.connectionId} Error when sending:`, e);\n\t\t\tthis._buffering = true;\n\n\t\t\tthis.close();\n\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\t// Try to send the first message in the buffer.\n\tprivate _tryBuffer(): void {\n\t\tif (!this.open) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this._buffer.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst msg = this._buffer[0];\n\n\t\tif (this._trySend(msg)) {\n\t\t\tthis._buffer.shift();\n\t\t\tthis._bufferSize = this._buffer.length;\n\t\t\tthis._tryBuffer();\n\t\t}\n\t}\n\n\tpublic override close(options?: { flush?: boolean }) {\n\t\tif (options?.flush) {\n\t\t\tthis.send({\n\t\t\t\t__peerData: {\n\t\t\t\t\ttype: \"close\",\n\t\t\t\t},\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tthis._buffer = [];\n\t\tthis._bufferSize = 0;\n\t\tsuper.close();\n\t}\n}\n", "import logger from \"../logger\";\nimport { Negotiator } from \"../negotiator\";\nimport {\n\tBaseConnectionErrorType,\n\tConnectionType,\n\tDataConnectionErrorType,\n\tServerMessageType,\n} from \"../enums\";\nimport type { Peer } from \"../peer\";\nimport { BaseConnection, type BaseConnectionEvents } from \"../baseconnection\";\nimport type { ServerMessage } from \"../servermessage\";\nimport type { EventsWithError } from \"../peerError\";\nimport { randomToken } from \"../utils/randomToken\";\n\nexport interface DataConnectionEvents\n\textends EventsWithError<DataConnectionErrorType | BaseConnectionErrorType>,\n\t\tBaseConnectionEvents<DataConnectionErrorType | BaseConnectionErrorType> {\n\t/**\n\t * Emitted when data is received from the remote peer.\n\t */\n\tdata: (data: unknown) => void;\n\t/**\n\t * Emitted when the connection is established and ready-to-use.\n\t */\n\topen: () => void;\n}\n\n/**\n * Wraps a DataChannel between two Peers.\n */\nexport abstract class DataConnection extends BaseConnection<\n\tDataConnectionEvents,\n\tDataConnectionErrorType\n> {\n\tprotected static readonly ID_PREFIX = \"dc_\";\n\tprotected static readonly MAX_BUFFERED_AMOUNT = 8 * 1024 * 1024;\n\n\tprivate _negotiator: Negotiator<DataConnectionEvents, this>;\n\tabstract readonly serialization: string;\n\treadonly reliable: boolean;\n\n\tpublic get type() {\n\t\treturn ConnectionType.Data;\n\t}\n\n\tconstructor(peerId: string, provider: Peer, options: any) {\n\t\tsuper(peerId, provider, options);\n\n\t\tthis.connectionId =\n\t\t\tthis.options.connectionId || DataConnection.ID_PREFIX + randomToken();\n\n\t\tthis.label = this.options.label || this.connectionId;\n\t\tthis.reliable = !!this.options.reliable;\n\n\t\tthis._negotiator = new Negotiator(this);\n\n\t\tthis._negotiator.startConnection(\n\t\t\tthis.options._payload || {\n\t\t\t\toriginator: true,\n\t\t\t\treliable: this.reliable,\n\t\t\t},\n\t\t);\n\t}\n\n\t/** Called by the Negotiator when the DataChannel is ready. */\n\toverride _initializeDataChannel(dc: RTCDataChannel): void {\n\t\tthis.dataChannel = dc;\n\n\t\tthis.dataChannel.onopen = () => {\n\t\t\tlogger.log(`DC#${this.connectionId} dc connection success`);\n\t\t\tthis._open = true;\n\t\t\tthis.emit(\"open\");\n\t\t};\n\n\t\tthis.dataChannel.onmessage = (e) => {\n\t\t\tlogger.log(`DC#${this.connectionId} dc onmessage:`, e.data);\n\t\t\t// this._handleDataMessage(e);\n\t\t};\n\n\t\tthis.dataChannel.onclose = () => {\n\t\t\tlogger.log(`DC#${this.connectionId} dc closed for:`, this.peer);\n\t\t\tthis.close();\n\t\t};\n\t}\n\n\t/**\n\t * Exposed functionality for users.\n\t */\n\n\t/** Allows user to close connection. */\n\tclose(options?: { flush?: boolean }): void {\n\t\tif (options?.flush) {\n\t\t\tthis.send({\n\t\t\t\t__peerData: {\n\t\t\t\t\ttype: \"close\",\n\t\t\t\t},\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tif (this._negotiator) {\n\t\t\tthis._negotiator.cleanup();\n\t\t\tthis._negotiator = null;\n\t\t}\n\n\t\tif (this.provider) {\n\t\t\tthis.provider._removeConnection(this);\n\n\t\t\tthis.provider = null;\n\t\t}\n\n\t\tif (this.dataChannel) {\n\t\t\tthis.dataChannel.onopen = null;\n\t\t\tthis.dataChannel.onmessage = null;\n\t\t\tthis.dataChannel.onclose = null;\n\t\t\tthis.dataChannel = null;\n\t\t}\n\n\t\tif (!this.open) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._open = false;\n\n\t\tsuper.emit(\"close\");\n\t}\n\n\tprotected abstract _send(data: any, chunked: boolean): void | Promise<void>;\n\n\t/** Allows user to send data. */\n\tpublic send(data: any, chunked = false) {\n\t\tif (!this.open) {\n\t\t\tthis.emitError(\n\t\t\t\tDataConnectionErrorType.NotOpenYet,\n\t\t\t\t\"Connection is not open. You should listen for the `open` event before sending messages.\",\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\treturn this._send(data, chunked);\n\t}\n\n\tasync handleMessage(message: ServerMessage) {\n\t\tconst payload = message.payload;\n\n\t\tswitch (message.type) {\n\t\t\tcase ServerMessageType.Answer:\n\t\t\t\tawait this._negotiator.handleSDP(message.type, payload.sdp);\n\t\t\t\tbreak;\n\t\t\tcase ServerMessageType.Candidate:\n\t\t\t\tawait this._negotiator.handleCandidate(payload.candidate);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tlogger.warn(\n\t\t\t\t\t\"Unrecognized message type:\",\n\t\t\t\t\tmessage.type,\n\t\t\t\t\t\"from peer:\",\n\t\t\t\t\tthis.peer,\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t}\n\t}\n}\n", "import { BufferedConnection } from \"./BufferedConnection\";\nimport { SerializationType } from \"../../enums\";\n\nexport class Raw extends BufferedConnection {\n\treadonly serialization = SerializationType.None;\n\n\tprotected _handleDataMessage({ data }) {\n\t\tsuper.emit(\"data\", data);\n\t}\n\n\toverride _send(data, _chunked) {\n\t\tthis._bufferedSend(data);\n\t}\n}\n", "import { BufferedConnection } from \"./BufferedConnection\";\nimport { DataConnectionErrorType, SerializationType } from \"../../enums\";\nimport { util } from \"../../util\";\n\nexport class Json extends BufferedConnection {\n\treadonly serialization = SerializationType.JSON;\n\tprivate readonly encoder = new TextEncoder();\n\tprivate readonly decoder = new TextDecoder();\n\n\tstringify: (data: any) => string = JSON.stringify;\n\tparse: (data: string) => any = JSON.parse;\n\n\t// Handles a DataChannel message.\n\tprotected override _handleDataMessage({ data }: { data: Uint8Array }): void {\n\t\tconst deserializedData = this.parse(this.decoder.decode(data));\n\n\t\t// PeerJS specific message\n\t\tconst peerData = deserializedData[\"__peerData\"];\n\t\tif (peerData && peerData.type === \"close\") {\n\t\t\tthis.close();\n\t\t\treturn;\n\t\t}\n\n\t\tthis.emit(\"data\", deserializedData);\n\t}\n\n\toverride _send(data, _chunked) {\n\t\tconst encodedData = this.encoder.encode(this.stringify(data));\n\t\tif (encodedData.byteLength >= util.chunkedMTU) {\n\t\t\tthis.emitError(\n\t\t\t\tDataConnectionErrorType.MessageToBig,\n\t\t\t\t\"Message too big for JSON channel\",\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tthis._bufferedSend(encodedData);\n\t}\n}\n", "import { Peer, type SerializerMapping } from \"./peer\";\nimport { MsgPack } from \"./exports\";\n\n/**\n * @experimental\n */\nexport class MsgPackPeer extends Peer {\n\toverride _serializers: SerializerMapping = {\n\t\tMsgPack,\n\t\tdefault: MsgPack,\n\t};\n}\n", "import { decodeMultiStream, Encoder } from \"@msgpack/msgpack\";\nimport { StreamConnection } from \"./StreamConnection.js\";\nimport type { Peer } from \"../../peer.js\";\n\nexport class MsgPack extends StreamConnection {\n\treadonly serialization = \"MsgPack\";\n\tprivate _encoder = new Encoder();\n\n\tconstructor(peerId: string, provider: Peer, options: any) {\n\t\tsuper(peerId, provider, options);\n\n\t\t(async () => {\n\t\t\tfor await (const msg of decodeMultiStream(this._rawReadStream)) {\n\t\t\t\t// @ts-ignore\n\t\t\t\tif (msg.__peerData?.type === \"close\") {\n\t\t\t\t\tthis.close();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.emit(\"data\", msg);\n\t\t\t}\n\t\t})();\n\t}\n\n\tprotected override _send(data) {\n\t\treturn this.writer.write(this._encoder.encode(data));\n\t}\n}\n", "import logger from \"../../logger.js\";\nimport type { Peer } from \"../../peer.js\";\nimport { DataConnection } from \"../DataConnection.js\";\n\nexport abstract class StreamConnection extends DataConnection {\n\tprivate _CHUNK_SIZE = 1024 * 8 * 4;\n\tprivate _splitStream = new TransformStream<Uint8Array>({\n\t\ttransform: (chunk, controller) => {\n\t\t\tfor (let split = 0; split < chunk.length; split += this._CHUNK_SIZE) {\n\t\t\t\tcontroller.enqueue(chunk.subarray(split, split + this._CHUNK_SIZE));\n\t\t\t}\n\t\t},\n\t});\n\tprivate _rawSendStream = new WritableStream<ArrayBuffer>({\n\t\twrite: async (chunk, controller) => {\n\t\t\tconst openEvent = new Promise((resolve) =>\n\t\t\t\tthis.dataChannel.addEventListener(\"bufferedamountlow\", resolve, {\n\t\t\t\t\tonce: true,\n\t\t\t\t}),\n\t\t\t);\n\n\t\t\t// if we can send the chunk now, send it\n\t\t\t// if not, we wait until at least half of the sending buffer is free again\n\t\t\tawait (this.dataChannel.bufferedAmount <=\n\t\t\t\tDataConnection.MAX_BUFFERED_AMOUNT - chunk.byteLength || openEvent);\n\n\t\t\t// TODO: what can go wrong here?\n\t\t\ttry {\n\t\t\t\tthis.dataChannel.send(chunk);\n\t\t\t} catch (e) {\n\t\t\t\tlogger.error(`DC#:${this.connectionId} Error when sending:`, e);\n\t\t\t\tcontroller.error(e);\n\t\t\t\tthis.close();\n\t\t\t}\n\t\t},\n\t});\n\tprotected writer = this._splitStream.writable.getWriter();\n\n\tprotected _rawReadStream = new ReadableStream<ArrayBuffer>({\n\t\tstart: (controller) => {\n\t\t\tthis.once(\"open\", () => {\n\t\t\t\tthis.dataChannel.addEventListener(\"message\", (e) => {\n\t\t\t\t\tcontroller.enqueue(e.data);\n\t\t\t\t});\n\t\t\t});\n\t\t},\n\t});\n\n\tprotected constructor(peerId: string, provider: Peer, options: any) {\n\t\tsuper(peerId, provider, { ...options, reliable: true });\n\n\t\tvoid this._splitStream.readable.pipeTo(this._rawSendStream);\n\t}\n\n\tpublic override _initializeDataChannel(dc) {\n\t\tsuper._initializeDataChannel(dc);\n\t\tthis.dataChannel.binaryType = \"arraybuffer\";\n\t\tthis.dataChannel.bufferedAmountLowThreshold =\n\t\t\tDataConnection.MAX_BUFFERED_AMOUNT / 2;\n\t}\n}\n", "const WebSocketSignalingProvider = require('./websocket-signaling-provider');\n\nclass PeerJSSignalingProvider {\n constructor({ id, url, PeerImpl, WebSocketImpl, priority = 0, connectTimeoutMs = 10000 }) {\n if (!url) {\n throw new Error('PeerJS signaling provider requires a url');\n }\n\n this.id = id || url;\n this.url = url;\n this.priority = priority;\n this.isCustomPeerImpl = Boolean(PeerImpl);\n this.PeerImpl = PeerImpl || this.resolvePeerImplementation();\n this.WebSocketImpl = WebSocketImpl;\n this.connectTimeoutMs = connectTimeoutMs;\n this.peer = null;\n this.peerId = null;\n this.connections = new Map();\n this.messageHandlers = new Set();\n this.fallbackProvider = null;\n }\n\n resolvePeerImplementation() {\n try {\n const peerjs = require('peerjs');\n return peerjs.Peer || peerjs;\n } catch (error) {\n return null;\n }\n }\n\n parsePeerJsServerUrl() {\n const parsed = new URL(this.url);\n const secure = parsed.protocol === 'wss:';\n const host = parsed.hostname;\n const port = parsed.port ? Number(parsed.port) : secure ? 443 : 80;\n const path = parsed.pathname || '/';\n const key = parsed.searchParams.get('key') || 'peerjs';\n\n return { secure, host, port, path, key };\n }\n\n shouldUseWebSocketFallback() {\n return !this.isCustomPeerImpl && typeof globalThis.RTCPeerConnection !== 'function';\n }\n\n useWebSocketFallback() {\n if (!this.fallbackProvider) {\n this.fallbackProvider = new WebSocketSignalingProvider({\n id: `${this.id}-ws-fallback`,\n url: this.url,\n WebSocketImpl: this.WebSocketImpl,\n priority: this.priority\n });\n }\n return this.fallbackProvider;\n }\n\n async connect() {\n if (this.shouldUseWebSocketFallback()) {\n await this.useWebSocketFallback().connect();\n return;\n }\n\n if (!this.PeerImpl) {\n throw new Error('PeerJS implementation is not available');\n }\n\n const server = this.parsePeerJsServerUrl();\n const peerId = `dignityjs_${Math.random().toString(36).slice(2, 12)}`;\n\n await new Promise((resolve, reject) => {\n const peer = new this.PeerImpl(peerId, {\n host: server.host,\n port: server.port,\n path: server.path,\n secure: server.secure,\n key: server.key\n });\n\n const timeout = setTimeout(() => {\n reject(new Error(`Unable to connect to signaling url ${this.url}`));\n }, this.connectTimeoutMs);\n\n peer.on('open', () => {\n clearTimeout(timeout);\n this.peer = peer;\n this.peerId = peerId;\n resolve();\n });\n\n peer.on('connection', (connection) => {\n this.attachConnectionHandlers(connection);\n });\n\n peer.on('error', async (error) => {\n clearTimeout(timeout);\n if (error && error.type === 'browser-incompatible') {\n try {\n await this.useWebSocketFallback().connect();\n resolve();\n return;\n } catch (fallbackError) {\n reject(new Error(`Unable to connect to signaling url ${this.url}`));\n return;\n }\n }\n reject(new Error(`Unable to connect to signaling url ${this.url}`));\n });\n });\n }\n\n attachConnectionHandlers(connection) {\n const remoteId = connection.peer;\n this.connections.set(remoteId, connection);\n\n connection.on('data', (payload) => {\n for (const handler of this.messageHandlers) {\n handler(payload);\n }\n });\n\n connection.on('close', () => {\n this.connections.delete(remoteId);\n });\n }\n\n async openConnection(remotePeerId) {\n if (!this.peer) {\n throw new Error('PeerJS is not connected');\n }\n\n const existing = this.connections.get(remotePeerId);\n if (existing && existing.open) {\n return existing;\n }\n\n return await new Promise((resolve, reject) => {\n const connection = this.peer.connect(remotePeerId, { reliable: true, serialization: 'json' });\n const timeout = setTimeout(() => {\n reject(new Error(`Unable to connect peer ${remotePeerId} via ${this.url}`));\n }, this.connectTimeoutMs);\n\n connection.on('open', () => {\n clearTimeout(timeout);\n this.attachConnectionHandlers(connection);\n resolve(connection);\n });\n\n connection.on('error', () => {\n clearTimeout(timeout);\n reject(new Error(`Unable to connect peer ${remotePeerId} via ${this.url}`));\n });\n });\n }\n\n onMessage(handler) {\n if (this.fallbackProvider) {\n this.fallbackProvider.onMessage(handler);\n return;\n }\n this.messageHandlers.add(handler);\n }\n\n async send(message) {\n if (this.fallbackProvider) {\n await this.fallbackProvider.send(message);\n return;\n }\n\n if (!this.peer) {\n throw new Error(`Signaling socket is not open for ${this.url}`);\n }\n\n if (message && message.to) {\n const connection = await this.openConnection(message.to);\n connection.send(message);\n return;\n }\n\n for (const connection of this.connections.values()) {\n if (connection.open) {\n connection.send(message);\n }\n }\n }\n\n async disconnect() {\n if (this.fallbackProvider) {\n await this.fallbackProvider.disconnect();\n this.fallbackProvider = null;\n return;\n }\n\n for (const connection of this.connections.values()) {\n if (typeof connection.close === 'function') {\n connection.close();\n }\n }\n this.connections.clear();\n\n if (this.peer && typeof this.peer.destroy === 'function') {\n this.peer.destroy();\n }\n this.peer = null;\n this.peerId = null;\n }\n}\n\nmodule.exports = PeerJSSignalingProvider;\n", "const DEFAULT_CLOUDFLARE_SIGNALING_URLS = [\n 'wss://peerjs.92k.de/peerjs?key=peerjs',\n 'wss://0.peerjs.com/peerjs?key=peerjs'\n];\n\nconst DEFAULT_SIGNALING_FALLBACK_URLS = [\n 'wss://relay.dignity.dev/signaling',\n 'wss://backup-relay.dignity.dev/signaling'\n];\n\nmodule.exports = {\n DEFAULT_CLOUDFLARE_SIGNALING_URLS,\n DEFAULT_SIGNALING_FALLBACK_URLS\n};\n", "const SignalingPool = require('./signaling-pool');\nconst WebSocketSignalingProvider = require('./websocket-signaling-provider');\nconst PeerJSSignalingProvider = require('./peerjs-signaling-provider');\nconst {\n DEFAULT_CLOUDFLARE_SIGNALING_URLS,\n DEFAULT_SIGNALING_FALLBACK_URLS\n} = require('./default-signaling-config');\n\nfunction createDefaultSignalingPool(options = {}) {\n const cloudflareUrls = options.cloudflareUrls || DEFAULT_CLOUDFLARE_SIGNALING_URLS;\n const fallbackUrls = options.fallbackUrls || DEFAULT_SIGNALING_FALLBACK_URLS;\n const WebSocketImpl = options.WebSocketImpl;\n\n const providers = [];\n\n cloudflareUrls.forEach((url, index) => {\n const usePeerJsProvider = /^wss:\\/\\/(peerjs\\.92k\\.de|0\\.peerjs\\.com)(\\/|$)/.test(url);\n const ProviderClass = usePeerJsProvider ? PeerJSSignalingProvider : WebSocketSignalingProvider;\n\n providers.push(\n new ProviderClass({\n id: `cloudflare-${index + 1}`,\n url,\n WebSocketImpl,\n priority: index\n })\n );\n });\n\n fallbackUrls.forEach((url, index) => {\n providers.push(\n new WebSocketSignalingProvider({\n id: `fallback-${index + 1}`,\n url,\n WebSocketImpl,\n priority: cloudflareUrls.length + index\n })\n );\n });\n\n if (Array.isArray(options.customProviders)) {\n providers.push(...options.customProviders);\n }\n\n return new SignalingPool(providers);\n}\n\nmodule.exports = createDefaultSignalingPool;\n", "class InMemoryNetworkHub {\n constructor() {\n this.adapters = new Map();\n }\n\n register(adapter) {\n this.adapters.set(adapter.nodeId, adapter);\n }\n\n unregister(nodeId) {\n this.adapters.delete(nodeId);\n }\n\n async broadcast(senderId, message) {\n const deliveries = [];\n for (const [nodeId, adapter] of this.adapters.entries()) {\n if (nodeId !== senderId) {\n deliveries.push(adapter.receive(message));\n }\n }\n await Promise.all(deliveries);\n }\n}\n\nclass InMemoryNetworkAdapter {\n constructor(hub) {\n if (!hub) {\n throw new Error('InMemoryNetworkAdapter requires an InMemoryNetworkHub');\n }\n\n this.hub = hub;\n this.nodeId = null;\n this.messageHandlers = new Set();\n }\n\n async start(nodeId) {\n this.nodeId = nodeId;\n this.hub.register(this);\n }\n\n async stop() {\n if (this.nodeId) {\n this.hub.unregister(this.nodeId);\n }\n\n this.nodeId = null;\n }\n\n async broadcast(message) {\n if (!this.nodeId) {\n throw new Error('Network adapter has not been started');\n }\n\n await this.hub.broadcast(this.nodeId, message);\n }\n\n onMessage(handler) {\n this.messageHandlers.add(handler);\n }\n\n offMessage(handler) {\n this.messageHandlers.delete(handler);\n }\n\n async receive(message) {\n const deliveries = [];\n for (const handler of this.messageHandlers) {\n deliveries.push(handler(message));\n }\n await Promise.all(deliveries);\n }\n}\n\nmodule.exports = {\n InMemoryNetworkHub,\n InMemoryNetworkAdapter\n};\n", "class IndexedDBPersistence {\n constructor({\n dbName = 'dignity',\n storeName = 'records',\n collections = null,\n indexedDB = typeof globalThis !== 'undefined' ? globalThis.indexedDB : null\n } = {}) {\n this.dbName = dbName;\n this.storeName = storeName;\n this.collections = collections;\n this.indexedDB = indexedDB;\n this.node = null;\n this.changeHandler = null;\n }\n\n recordKey(collection, id) {\n return `${collection}:${id}`;\n }\n\n shouldPersist(collection) {\n if (!this.collections) {\n return true;\n }\n\n return this.collections.includes(collection);\n }\n\n openDb() {\n if (!this.indexedDB) {\n return Promise.reject(new Error('IndexedDB is not available'));\n }\n\n return new Promise((resolve, reject) => {\n const request = this.indexedDB.open(this.dbName, 1);\n\n request.onupgradeneeded = () => {\n const db = request.result;\n if (!db.objectStoreNames.contains(this.storeName)) {\n db.createObjectStore(this.storeName, { keyPath: 'key' });\n }\n };\n\n request.onsuccess = () => resolve(request.result);\n request.onerror = () => reject(request.error || new Error('Unable to open IndexedDB'));\n });\n }\n\n runTransaction(mode, handler) {\n return this.openDb().then((db) => new Promise((resolve, reject) => {\n const transaction = db.transaction(this.storeName, mode);\n const store = transaction.objectStore(this.storeName);\n\n Promise.resolve(handler(store))\n .then(resolve)\n .catch(reject);\n\n transaction.oncomplete = () => db.close();\n transaction.onerror = () => reject(transaction.error || new Error('IndexedDB transaction failed'));\n transaction.onabort = () => reject(transaction.error || new Error('IndexedDB transaction aborted'));\n }));\n }\n\n serializeRecord(collection, id) {\n const record = this.node.getCollection(collection).get(id);\n if (!record) {\n return null;\n }\n\n return {\n key: this.recordKey(collection, id),\n collection,\n id,\n ownerId: record.ownerId,\n data: { ...record.data },\n createdAt: record.createdAt,\n updatedAt: record.updatedAt,\n deletedAt: record.deletedAt,\n version: record.version\n };\n }\n\n async persistRecord(collection, id) {\n if (!this.node || !this.shouldPersist(collection)) {\n return;\n }\n\n const serialized = this.serializeRecord(collection, id);\n const key = this.recordKey(collection, id);\n\n if (!serialized) {\n await this.runTransaction('readwrite', (store) => new Promise((resolve, reject) => {\n const request = store.delete(key);\n request.onsuccess = () => resolve();\n request.onerror = () => reject(request.error);\n }));\n return;\n }\n\n await this.runTransaction('readwrite', (store) => new Promise((resolve, reject) => {\n const request = store.put(serialized);\n request.onsuccess = () => resolve();\n request.onerror = () => reject(request.error);\n }));\n }\n\n persistChange(event) {\n if (!event || !event.collection || !event.id) {\n return;\n }\n\n this.persistRecord(event.collection, event.id).catch((error) => {\n this.node.emit('warning', {\n type: 'persistence-failed',\n collection: event.collection,\n id: event.id,\n error\n });\n });\n }\n\n async loadAllRecords() {\n return this.runTransaction('readonly', (store) => new Promise((resolve, reject) => {\n const request = store.getAll();\n request.onsuccess = () => resolve(request.result || []);\n request.onerror = () => reject(request.error);\n }));\n }\n\n async hydrate() {\n if (!this.node) {\n throw new Error('IndexedDBPersistence requires an attached node before hydrate');\n }\n\n const storedRecords = await this.loadAllRecords();\n for (const stored of storedRecords) {\n if (!this.shouldPersist(stored.collection)) {\n continue;\n }\n\n this.node.restoreRecord(stored.collection, {\n id: stored.id,\n ownerId: stored.ownerId,\n data: stored.data,\n createdAt: stored.createdAt,\n updatedAt: stored.updatedAt,\n deletedAt: stored.deletedAt,\n version: stored.version\n });\n }\n }\n\n async attach(node) {\n if (!node) {\n throw new Error('IndexedDBPersistence.attach requires a DignityP2P node');\n }\n\n this.node = node;\n await this.hydrate();\n\n this.changeHandler = (event) => this.persistChange(event);\n node.on('change', this.changeHandler);\n }\n\n async detach() {\n if (this.node && this.changeHandler) {\n this.node.off('change', this.changeHandler);\n }\n\n this.changeHandler = null;\n this.node = null;\n }\n\n async clear() {\n await this.runTransaction('readwrite', (store) => new Promise((resolve, reject) => {\n const request = store.clear();\n request.onsuccess = () => resolve();\n request.onerror = () => reject(request.error);\n }));\n }\n}\n\nmodule.exports = IndexedDBPersistence;\n", "/**\n * dignity.js public API.\n *\n * This package exposes:\n * - `DignityP2P`: REST-like object CRUD over peer-to-peer operation replication\n * - signaling providers and pool helpers\n * - in-memory adapter utilities for tests and local prototyping\n */\nconst DignityP2P = require('./core/dignity-p2p');\nconst createDefaultSignalingPool = require('./signaling/create-default-signaling-pool');\nconst SignalingPool = require('./signaling/signaling-pool');\nconst WebSocketSignalingProvider = require('./signaling/websocket-signaling-provider');\nconst PeerJSSignalingProvider = require('./signaling/peerjs-signaling-provider');\nconst {\n InMemoryNetworkHub,\n InMemoryNetworkAdapter\n} = require('./network/in-memory-network');\nconst IndexedDBPersistence = require('./persistence/indexeddb-persistence');\nconst {\n DEFAULT_CLOUDFLARE_SIGNALING_URLS,\n DEFAULT_SIGNALING_FALLBACK_URLS\n} = require('./signaling/default-signaling-config');\nconst VDF = require('./security/vdf');\nconst SlothPermutation = require('./security/sloth-vdf');\nconst {\n MessageSecurityService,\n DEFAULT_SECURITY_OPTIONS\n} = require('./security/message-security-service');\n\nmodule.exports = {\n DignityP2P,\n createDefaultSignalingPool,\n SignalingPool,\n WebSocketSignalingProvider,\n PeerJSSignalingProvider,\n InMemoryNetworkHub,\n InMemoryNetworkAdapter,\n IndexedDBPersistence,\n DEFAULT_CLOUDFLARE_SIGNALING_URLS,\n DEFAULT_SIGNALING_FALLBACK_URLS,\n VDF,\n SlothPermutation,\n MessageSecurityService,\n DEFAULT_SECURITY_OPTIONS\n};\n"],
5
+ "mappings": "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AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,YAAI,EAAE,CAAC;AACP,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,YAAI,EAAE,CAAC;AACP,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,YAAI,EAAE,CAAC;AACP,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,YAAI,EAAE,CAAC;AACP,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,YAAI,EAAE,CAAC;AACP,cAAM,IAAI;AACV,cAAM,IAAI;AACV,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,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",
6
6
  "names": ["nonce", "encrypted", "o", "window", "wrappedCallback", "navigator", "_interopRequireWildcard", "e", "t", "o", "window", "navigator", "constraintsToChrome_", "oldname_", "shimConstraints_", "remap", "shimError_", "getUserMedia_", "_interopRequireWildcard", "e", "t", "o", "window", "shimSenderWithDtmf", "require_getusermedia", "_interopRequireWildcard", "e", "t", "o", "window", "navigator", "remap", "window", "_interopRequireWildcard", "e", "t", "o", "window", "_interopRequireWildcard", "e", "t", "o", "window", "withCallback", "navigator", "RTCPeerConnection", "_interopRequireWildcard", "e", "t", "o", "window", "sctpInDescription", "getRemoteFirefoxVersion", "getCanSendMaxMessageSize", "getMaxMessageSize", "o", "_interopRequireWildcard", "e", "t", "window", "self", "data", "blob", "id", "message"]
7
7
  }