topazcube 0.1.20 → 0.1.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/server.cjs +22 -0
- package/dist/server.cjs.map +1 -1
- package/dist/server.d.cts +3 -0
- package/dist/server.d.ts +3 -0
- package/dist/server.js +22 -0
- package/dist/server.js.map +1 -1
- package/package.json +1 -1
- package/src/server.ts +23 -0
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../node_modules/@roamhq/wrtc/lib/binding.js","../node_modules/@roamhq/wrtc/lib/eventtarget.js","../node_modules/@roamhq/wrtc/lib/mediadevices.js","../node_modules/webidl-conversions/lib/index.js","../node_modules/domexception/lib/utils.js","../node_modules/domexception/lib/legacy-error-codes.json","../node_modules/domexception/lib/DOMException-impl.js","../node_modules/domexception/lib/DOMException.js","../node_modules/domexception/webidl2js-wrapper.js","../node_modules/domexception/index.js","../node_modules/@roamhq/wrtc/lib/datachannelevent.js","../node_modules/@roamhq/wrtc/lib/icecandidate.js","../node_modules/@roamhq/wrtc/lib/rtcpeerconnectioniceevent.js","../node_modules/@roamhq/wrtc/lib/rtcpeerconnectioniceerrorevent.js","../node_modules/@roamhq/wrtc/lib/sessiondescription.js","../node_modules/@roamhq/wrtc/lib/peerconnection.js","../node_modules/@roamhq/wrtc/lib/index.js","../src/server.ts","../src/utils.ts","../src/compress-node.ts"],"sourcesContent":["\"use strict\";\n\nconst os = require(\"os\");\nconst triple = `${os.platform()}-${os.arch()}`;\nconst pathsToTry = [\n `../build-${triple}/wrtc.node`,\n `../build-${triple}/Debug/wrtc.node`,\n `../build-${triple}/Release/wrtc.node`,\n `@roamhq/wrtc-${triple}`,\n // For installations that can't resolve node_modules directly, like AWS Lambda\n `./node_modules/@roamhq/wrtc-${triple}`,\n `./node_modules/@roamhq/wrtc-${triple}/wrtc.node`,\n];\n\nlet succeeded = false;\nfor (const path of pathsToTry) {\n try {\n module.exports = require(path);\n succeeded = true;\n break;\n } catch (error) {\n // Ignore any errors, just continue\n void error;\n }\n}\n\nif (!succeeded) {\n throw new Error(\n `Could not find wrtc binary on any of the paths: ${pathsToTry}`,\n );\n}\n","\"use strict\";\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author Jesús Leganés Combarro \"Piranna\" <piranna@gmail.com>\n */\n\nfunction EventTarget() {\n this._listeners = {};\n}\n\nEventTarget.prototype.addEventListener = function addEventListener(\n type,\n listener,\n) {\n const listeners = (this._listeners = this._listeners || {});\n\n if (!listeners[type]) {\n listeners[type] = new Set();\n }\n\n listeners[type].add(listener);\n};\n\nEventTarget.prototype.dispatchEvent = function dispatchEvent(event) {\n let listeners = (this._listeners = this._listeners || {});\n\n process.nextTick(() => {\n listeners = new Set(listeners[event.type] || []);\n\n const dummyListener = this[\"on\" + event.type];\n if (typeof dummyListener === \"function\") {\n listeners.add(dummyListener);\n }\n\n listeners.forEach((listener) => {\n if (\n typeof listener === \"object\" &&\n typeof listener.handleEvent === \"function\"\n ) {\n listener.handleEvent(event);\n } else {\n listener.call(this, event);\n }\n });\n });\n};\n\nEventTarget.prototype.removeEventListener = function removeEventListener(\n type,\n listener,\n) {\n const listeners = (this._listeners = this._listeners || {});\n if (listeners[type]) {\n listeners[type].delete(listener);\n }\n};\n\nmodule.exports = EventTarget;\n","\"use strict\";\n\nvar inherits = require(\"util\").inherits;\n\nconst { getDisplayMedia, getUserMedia } = require(\"./binding\");\n\nvar EventTarget = require(\"./eventtarget\");\n\nfunction MediaDevices() {}\n\ninherits(MediaDevices, EventTarget);\n\nMediaDevices.prototype.enumerateDevices = function enumerateDevices() {\n throw new Error(\n \"Not yet implemented; file a feature request against node-webrtc\",\n );\n};\n\nMediaDevices.prototype.getSupportedConstraints =\n function getSupportedConstraints() {\n return {\n width: true,\n height: true,\n };\n };\n\nMediaDevices.prototype.getDisplayMedia = getDisplayMedia;\nMediaDevices.prototype.getUserMedia = getUserMedia;\n\nmodule.exports = MediaDevices;\n","\"use strict\";\n\nfunction makeException(ErrorType, message, options) {\n if (options.globals) {\n ErrorType = options.globals[ErrorType.name];\n }\n return new ErrorType(`${options.context ? options.context : \"Value\"} ${message}.`);\n}\n\nfunction toNumber(value, options) {\n if (typeof value === \"bigint\") {\n throw makeException(TypeError, \"is a BigInt which cannot be converted to a number\", options);\n }\n if (!options.globals) {\n return Number(value);\n }\n return options.globals.Number(value);\n}\n\n// Round x to the nearest integer, choosing the even integer if it lies halfway between two.\nfunction evenRound(x) {\n // There are four cases for numbers with fractional part being .5:\n //\n // case | x | floor(x) | round(x) | expected | x <> 0 | x % 1 | x & 1 | example\n // 1 | 2n + 0.5 | 2n | 2n + 1 | 2n | > | 0.5 | 0 | 0.5 -> 0\n // 2 | 2n + 1.5 | 2n + 1 | 2n + 2 | 2n + 2 | > | 0.5 | 1 | 1.5 -> 2\n // 3 | -2n - 0.5 | -2n - 1 | -2n | -2n | < | -0.5 | 0 | -0.5 -> 0\n // 4 | -2n - 1.5 | -2n - 2 | -2n - 1 | -2n - 2 | < | -0.5 | 1 | -1.5 -> -2\n // (where n is a non-negative integer)\n //\n // Branch here for cases 1 and 4\n if ((x > 0 && (x % 1) === +0.5 && (x & 1) === 0) ||\n (x < 0 && (x % 1) === -0.5 && (x & 1) === 1)) {\n return censorNegativeZero(Math.floor(x));\n }\n\n return censorNegativeZero(Math.round(x));\n}\n\nfunction integerPart(n) {\n return censorNegativeZero(Math.trunc(n));\n}\n\nfunction sign(x) {\n return x < 0 ? -1 : 1;\n}\n\nfunction modulo(x, y) {\n // https://tc39.github.io/ecma262/#eqn-modulo\n // Note that http://stackoverflow.com/a/4467559/3191 does NOT work for large modulos\n const signMightNotMatch = x % y;\n if (sign(y) !== sign(signMightNotMatch)) {\n return signMightNotMatch + y;\n }\n return signMightNotMatch;\n}\n\nfunction censorNegativeZero(x) {\n return x === 0 ? 0 : x;\n}\n\nfunction createIntegerConversion(bitLength, { unsigned }) {\n let lowerBound, upperBound;\n if (unsigned) {\n lowerBound = 0;\n upperBound = 2 ** bitLength - 1;\n } else {\n lowerBound = -(2 ** (bitLength - 1));\n upperBound = 2 ** (bitLength - 1) - 1;\n }\n\n const twoToTheBitLength = 2 ** bitLength;\n const twoToOneLessThanTheBitLength = 2 ** (bitLength - 1);\n\n return (value, options = {}) => {\n let x = toNumber(value, options);\n x = censorNegativeZero(x);\n\n if (options.enforceRange) {\n if (!Number.isFinite(x)) {\n throw makeException(TypeError, \"is not a finite number\", options);\n }\n\n x = integerPart(x);\n\n if (x < lowerBound || x > upperBound) {\n throw makeException(\n TypeError,\n `is outside the accepted range of ${lowerBound} to ${upperBound}, inclusive`,\n options\n );\n }\n\n return x;\n }\n\n if (!Number.isNaN(x) && options.clamp) {\n x = Math.min(Math.max(x, lowerBound), upperBound);\n x = evenRound(x);\n return x;\n }\n\n if (!Number.isFinite(x) || x === 0) {\n return 0;\n }\n x = integerPart(x);\n\n // Math.pow(2, 64) is not accurately representable in JavaScript, so try to avoid these per-spec operations if\n // possible. Hopefully it's an optimization for the non-64-bitLength cases too.\n if (x >= lowerBound && x <= upperBound) {\n return x;\n }\n\n // These will not work great for bitLength of 64, but oh well. See the README for more details.\n x = modulo(x, twoToTheBitLength);\n if (!unsigned && x >= twoToOneLessThanTheBitLength) {\n return x - twoToTheBitLength;\n }\n return x;\n };\n}\n\nfunction createLongLongConversion(bitLength, { unsigned }) {\n const upperBound = Number.MAX_SAFE_INTEGER;\n const lowerBound = unsigned ? 0 : Number.MIN_SAFE_INTEGER;\n const asBigIntN = unsigned ? BigInt.asUintN : BigInt.asIntN;\n\n return (value, options = {}) => {\n let x = toNumber(value, options);\n x = censorNegativeZero(x);\n\n if (options.enforceRange) {\n if (!Number.isFinite(x)) {\n throw makeException(TypeError, \"is not a finite number\", options);\n }\n\n x = integerPart(x);\n\n if (x < lowerBound || x > upperBound) {\n throw makeException(\n TypeError,\n `is outside the accepted range of ${lowerBound} to ${upperBound}, inclusive`,\n options\n );\n }\n\n return x;\n }\n\n if (!Number.isNaN(x) && options.clamp) {\n x = Math.min(Math.max(x, lowerBound), upperBound);\n x = evenRound(x);\n return x;\n }\n\n if (!Number.isFinite(x) || x === 0) {\n return 0;\n }\n\n let xBigInt = BigInt(integerPart(x));\n xBigInt = asBigIntN(bitLength, xBigInt);\n return Number(xBigInt);\n };\n}\n\nexports.any = value => {\n return value;\n};\n\nexports.undefined = () => {\n return undefined;\n};\n\nexports.boolean = value => {\n return Boolean(value);\n};\n\nexports.byte = createIntegerConversion(8, { unsigned: false });\nexports.octet = createIntegerConversion(8, { unsigned: true });\n\nexports.short = createIntegerConversion(16, { unsigned: false });\nexports[\"unsigned short\"] = createIntegerConversion(16, { unsigned: true });\n\nexports.long = createIntegerConversion(32, { unsigned: false });\nexports[\"unsigned long\"] = createIntegerConversion(32, { unsigned: true });\n\nexports[\"long long\"] = createLongLongConversion(64, { unsigned: false });\nexports[\"unsigned long long\"] = createLongLongConversion(64, { unsigned: true });\n\nexports.double = (value, options = {}) => {\n const x = toNumber(value, options);\n\n if (!Number.isFinite(x)) {\n throw makeException(TypeError, \"is not a finite floating-point value\", options);\n }\n\n return x;\n};\n\nexports[\"unrestricted double\"] = (value, options = {}) => {\n const x = toNumber(value, options);\n\n return x;\n};\n\nexports.float = (value, options = {}) => {\n const x = toNumber(value, options);\n\n if (!Number.isFinite(x)) {\n throw makeException(TypeError, \"is not a finite floating-point value\", options);\n }\n\n if (Object.is(x, -0)) {\n return x;\n }\n\n const y = Math.fround(x);\n\n if (!Number.isFinite(y)) {\n throw makeException(TypeError, \"is outside the range of a single-precision floating-point value\", options);\n }\n\n return y;\n};\n\nexports[\"unrestricted float\"] = (value, options = {}) => {\n const x = toNumber(value, options);\n\n if (isNaN(x)) {\n return x;\n }\n\n if (Object.is(x, -0)) {\n return x;\n }\n\n return Math.fround(x);\n};\n\nexports.DOMString = (value, options = {}) => {\n if (options.treatNullAsEmptyString && value === null) {\n return \"\";\n }\n\n if (typeof value === \"symbol\") {\n throw makeException(TypeError, \"is a symbol, which cannot be converted to a string\", options);\n }\n\n const StringCtor = options.globals ? options.globals.String : String;\n return StringCtor(value);\n};\n\nexports.ByteString = (value, options = {}) => {\n const x = exports.DOMString(value, options);\n let c;\n for (let i = 0; (c = x.codePointAt(i)) !== undefined; ++i) {\n if (c > 255) {\n throw makeException(TypeError, \"is not a valid ByteString\", options);\n }\n }\n\n return x;\n};\n\nexports.USVString = (value, options = {}) => {\n const S = exports.DOMString(value, options);\n const n = S.length;\n const U = [];\n for (let i = 0; i < n; ++i) {\n const c = S.charCodeAt(i);\n if (c < 0xD800 || c > 0xDFFF) {\n U.push(String.fromCodePoint(c));\n } else if (0xDC00 <= c && c <= 0xDFFF) {\n U.push(String.fromCodePoint(0xFFFD));\n } else if (i === n - 1) {\n U.push(String.fromCodePoint(0xFFFD));\n } else {\n const d = S.charCodeAt(i + 1);\n if (0xDC00 <= d && d <= 0xDFFF) {\n const a = c & 0x3FF;\n const b = d & 0x3FF;\n U.push(String.fromCodePoint((2 << 15) + ((2 << 9) * a) + b));\n ++i;\n } else {\n U.push(String.fromCodePoint(0xFFFD));\n }\n }\n }\n\n return U.join(\"\");\n};\n\nexports.object = (value, options = {}) => {\n if (value === null || (typeof value !== \"object\" && typeof value !== \"function\")) {\n throw makeException(TypeError, \"is not an object\", options);\n }\n\n return value;\n};\n\nconst abByteLengthGetter =\n Object.getOwnPropertyDescriptor(ArrayBuffer.prototype, \"byteLength\").get;\nconst sabByteLengthGetter =\n typeof SharedArrayBuffer === \"function\" ?\n Object.getOwnPropertyDescriptor(SharedArrayBuffer.prototype, \"byteLength\").get :\n null;\n\nfunction isNonSharedArrayBuffer(value) {\n try {\n // This will throw on SharedArrayBuffers, but not detached ArrayBuffers.\n // (The spec says it should throw, but the spec conflicts with implementations: https://github.com/tc39/ecma262/issues/678)\n abByteLengthGetter.call(value);\n\n return true;\n } catch {\n return false;\n }\n}\n\nfunction isSharedArrayBuffer(value) {\n try {\n sabByteLengthGetter.call(value);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction isArrayBufferDetached(value) {\n try {\n // eslint-disable-next-line no-new\n new Uint8Array(value);\n return false;\n } catch {\n return true;\n }\n}\n\nexports.ArrayBuffer = (value, options = {}) => {\n if (!isNonSharedArrayBuffer(value)) {\n if (options.allowShared && !isSharedArrayBuffer(value)) {\n throw makeException(TypeError, \"is not an ArrayBuffer or SharedArrayBuffer\", options);\n }\n throw makeException(TypeError, \"is not an ArrayBuffer\", options);\n }\n if (isArrayBufferDetached(value)) {\n throw makeException(TypeError, \"is a detached ArrayBuffer\", options);\n }\n\n return value;\n};\n\nconst dvByteLengthGetter =\n Object.getOwnPropertyDescriptor(DataView.prototype, \"byteLength\").get;\nexports.DataView = (value, options = {}) => {\n try {\n dvByteLengthGetter.call(value);\n } catch (e) {\n throw makeException(TypeError, \"is not a DataView\", options);\n }\n\n if (!options.allowShared && isSharedArrayBuffer(value.buffer)) {\n throw makeException(TypeError, \"is backed by a SharedArrayBuffer, which is not allowed\", options);\n }\n if (isArrayBufferDetached(value.buffer)) {\n throw makeException(TypeError, \"is backed by a detached ArrayBuffer\", options);\n }\n\n return value;\n};\n\n// Returns the unforgeable `TypedArray` constructor name or `undefined`,\n// if the `this` value isn't a valid `TypedArray` object.\n//\n// https://tc39.es/ecma262/#sec-get-%typedarray%.prototype-@@tostringtag\nconst typedArrayNameGetter = Object.getOwnPropertyDescriptor(\n Object.getPrototypeOf(Uint8Array).prototype,\n Symbol.toStringTag\n).get;\n[\n Int8Array,\n Int16Array,\n Int32Array,\n Uint8Array,\n Uint16Array,\n Uint32Array,\n Uint8ClampedArray,\n Float32Array,\n Float64Array\n].forEach(func => {\n const { name } = func;\n const article = /^[AEIOU]/u.test(name) ? \"an\" : \"a\";\n exports[name] = (value, options = {}) => {\n if (!ArrayBuffer.isView(value) || typedArrayNameGetter.call(value) !== name) {\n throw makeException(TypeError, `is not ${article} ${name} object`, options);\n }\n if (!options.allowShared && isSharedArrayBuffer(value.buffer)) {\n throw makeException(TypeError, \"is a view on a SharedArrayBuffer, which is not allowed\", options);\n }\n if (isArrayBufferDetached(value.buffer)) {\n throw makeException(TypeError, \"is a view on a detached ArrayBuffer\", options);\n }\n\n return value;\n };\n});\n\n// Common definitions\n\nexports.ArrayBufferView = (value, options = {}) => {\n if (!ArrayBuffer.isView(value)) {\n throw makeException(TypeError, \"is not a view on an ArrayBuffer or SharedArrayBuffer\", options);\n }\n\n if (!options.allowShared && isSharedArrayBuffer(value.buffer)) {\n throw makeException(TypeError, \"is a view on a SharedArrayBuffer, which is not allowed\", options);\n }\n\n if (isArrayBufferDetached(value.buffer)) {\n throw makeException(TypeError, \"is a view on a detached ArrayBuffer\", options);\n }\n return value;\n};\n\nexports.BufferSource = (value, options = {}) => {\n if (ArrayBuffer.isView(value)) {\n if (!options.allowShared && isSharedArrayBuffer(value.buffer)) {\n throw makeException(TypeError, \"is a view on a SharedArrayBuffer, which is not allowed\", options);\n }\n\n if (isArrayBufferDetached(value.buffer)) {\n throw makeException(TypeError, \"is a view on a detached ArrayBuffer\", options);\n }\n return value;\n }\n\n if (!options.allowShared && !isNonSharedArrayBuffer(value)) {\n throw makeException(TypeError, \"is not an ArrayBuffer or a view on one\", options);\n }\n if (options.allowShared && !isSharedArrayBuffer(value) && !isNonSharedArrayBuffer(value)) {\n throw makeException(TypeError, \"is not an ArrayBuffer, SharedArrayBuffer, or a view on one\", options);\n }\n if (isArrayBufferDetached(value)) {\n throw makeException(TypeError, \"is a detached ArrayBuffer\", options);\n }\n\n return value;\n};\n\nexports.DOMTimeStamp = exports[\"unsigned long long\"];\n","\"use strict\";\n\n// Returns \"Type(value) is Object\" in ES terminology.\nfunction isObject(value) {\n return (typeof value === \"object\" && value !== null) || typeof value === \"function\";\n}\n\nconst hasOwn = Function.prototype.call.bind(Object.prototype.hasOwnProperty);\n\n// Like `Object.assign`, but using `[[GetOwnProperty]]` and `[[DefineOwnProperty]]`\n// instead of `[[Get]]` and `[[Set]]` and only allowing objects\nfunction define(target, source) {\n for (const key of Reflect.ownKeys(source)) {\n const descriptor = Reflect.getOwnPropertyDescriptor(source, key);\n if (descriptor && !Reflect.defineProperty(target, key, descriptor)) {\n throw new TypeError(`Cannot redefine property: ${String(key)}`);\n }\n }\n}\n\nfunction newObjectInRealm(globalObject, object) {\n const ctorRegistry = initCtorRegistry(globalObject);\n return Object.defineProperties(\n Object.create(ctorRegistry[\"%Object.prototype%\"]),\n Object.getOwnPropertyDescriptors(object)\n );\n}\n\nconst wrapperSymbol = Symbol(\"wrapper\");\nconst implSymbol = Symbol(\"impl\");\nconst sameObjectCaches = Symbol(\"SameObject caches\");\nconst ctorRegistrySymbol = Symbol.for(\"[webidl2js] constructor registry\");\n\nconst AsyncIteratorPrototype = Object.getPrototypeOf(Object.getPrototypeOf(async function* () {}).prototype);\n\nfunction initCtorRegistry(globalObject) {\n if (hasOwn(globalObject, ctorRegistrySymbol)) {\n return globalObject[ctorRegistrySymbol];\n }\n\n const ctorRegistry = Object.create(null);\n\n // In addition to registering all the WebIDL2JS-generated types in the constructor registry,\n // we also register a few intrinsics that we make use of in generated code, since they are not\n // easy to grab from the globalObject variable.\n ctorRegistry[\"%Object.prototype%\"] = globalObject.Object.prototype;\n ctorRegistry[\"%IteratorPrototype%\"] = Object.getPrototypeOf(\n Object.getPrototypeOf(new globalObject.Array()[Symbol.iterator]())\n );\n\n try {\n ctorRegistry[\"%AsyncIteratorPrototype%\"] = Object.getPrototypeOf(\n Object.getPrototypeOf(\n globalObject.eval(\"(async function* () {})\").prototype\n )\n );\n } catch {\n ctorRegistry[\"%AsyncIteratorPrototype%\"] = AsyncIteratorPrototype;\n }\n\n globalObject[ctorRegistrySymbol] = ctorRegistry;\n return ctorRegistry;\n}\n\nfunction getSameObject(wrapper, prop, creator) {\n if (!wrapper[sameObjectCaches]) {\n wrapper[sameObjectCaches] = Object.create(null);\n }\n\n if (prop in wrapper[sameObjectCaches]) {\n return wrapper[sameObjectCaches][prop];\n }\n\n wrapper[sameObjectCaches][prop] = creator();\n return wrapper[sameObjectCaches][prop];\n}\n\nfunction wrapperForImpl(impl) {\n return impl ? impl[wrapperSymbol] : null;\n}\n\nfunction implForWrapper(wrapper) {\n return wrapper ? wrapper[implSymbol] : null;\n}\n\nfunction tryWrapperForImpl(impl) {\n const wrapper = wrapperForImpl(impl);\n return wrapper ? wrapper : impl;\n}\n\nfunction tryImplForWrapper(wrapper) {\n const impl = implForWrapper(wrapper);\n return impl ? impl : wrapper;\n}\n\nconst iterInternalSymbol = Symbol(\"internal\");\n\nfunction isArrayIndexPropName(P) {\n if (typeof P !== \"string\") {\n return false;\n }\n const i = P >>> 0;\n if (i === 2 ** 32 - 1) {\n return false;\n }\n const s = `${i}`;\n if (P !== s) {\n return false;\n }\n return true;\n}\n\nconst byteLengthGetter =\n Object.getOwnPropertyDescriptor(ArrayBuffer.prototype, \"byteLength\").get;\nfunction isArrayBuffer(value) {\n try {\n byteLengthGetter.call(value);\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction iteratorResult([key, value], kind) {\n let result;\n switch (kind) {\n case \"key\":\n result = key;\n break;\n case \"value\":\n result = value;\n break;\n case \"key+value\":\n result = [key, value];\n break;\n }\n return { value: result, done: false };\n}\n\nconst supportsPropertyIndex = Symbol(\"supports property index\");\nconst supportedPropertyIndices = Symbol(\"supported property indices\");\nconst supportsPropertyName = Symbol(\"supports property name\");\nconst supportedPropertyNames = Symbol(\"supported property names\");\nconst indexedGet = Symbol(\"indexed property get\");\nconst indexedSetNew = Symbol(\"indexed property set new\");\nconst indexedSetExisting = Symbol(\"indexed property set existing\");\nconst namedGet = Symbol(\"named property get\");\nconst namedSetNew = Symbol(\"named property set new\");\nconst namedSetExisting = Symbol(\"named property set existing\");\nconst namedDelete = Symbol(\"named property delete\");\n\nconst asyncIteratorNext = Symbol(\"async iterator get the next iteration result\");\nconst asyncIteratorReturn = Symbol(\"async iterator return steps\");\nconst asyncIteratorInit = Symbol(\"async iterator initialization steps\");\nconst asyncIteratorEOI = Symbol(\"async iterator end of iteration\");\n\nmodule.exports = exports = {\n isObject,\n hasOwn,\n define,\n newObjectInRealm,\n wrapperSymbol,\n implSymbol,\n getSameObject,\n ctorRegistrySymbol,\n initCtorRegistry,\n wrapperForImpl,\n implForWrapper,\n tryWrapperForImpl,\n tryImplForWrapper,\n iterInternalSymbol,\n isArrayBuffer,\n isArrayIndexPropName,\n supportsPropertyIndex,\n supportedPropertyIndices,\n supportsPropertyName,\n supportedPropertyNames,\n indexedGet,\n indexedSetNew,\n indexedSetExisting,\n namedGet,\n namedSetNew,\n namedSetExisting,\n namedDelete,\n asyncIteratorNext,\n asyncIteratorReturn,\n asyncIteratorInit,\n asyncIteratorEOI,\n iteratorResult\n};\n","{\n \"IndexSizeError\": 1,\n \"HierarchyRequestError\": 3,\n \"WrongDocumentError\": 4,\n \"InvalidCharacterError\": 5,\n \"NoModificationAllowedError\": 7,\n \"NotFoundError\": 8,\n \"NotSupportedError\": 9,\n \"InUseAttributeError\": 10,\n \"InvalidStateError\": 11,\n \"SyntaxError\": 12,\n \"InvalidModificationError\": 13,\n \"NamespaceError\": 14,\n \"InvalidAccessError\": 15,\n \"TypeMismatchError\": 17,\n \"SecurityError\": 18,\n \"NetworkError\": 19,\n \"AbortError\": 20,\n \"URLMismatchError\": 21,\n \"QuotaExceededError\": 22,\n \"TimeoutError\": 23,\n \"InvalidNodeTypeError\": 24,\n \"DataCloneError\": 25\n}\n","\"use strict\";\nconst legacyErrorCodes = require(\"./legacy-error-codes.json\");\nconst idlUtils = require(\"./utils.js\");\n\nexports.implementation = class DOMExceptionImpl {\n constructor(globalObject, [message, name]) {\n this.name = name;\n this.message = message;\n }\n\n get code() {\n return legacyErrorCodes[this.name] || 0;\n }\n};\n\n// A proprietary V8 extension that causes the stack property to appear.\nexports.init = impl => {\n if (Error.captureStackTrace) {\n const wrapper = idlUtils.wrapperForImpl(impl);\n Error.captureStackTrace(wrapper, wrapper.constructor);\n }\n};\n","\"use strict\";\n\nconst conversions = require(\"webidl-conversions\");\nconst utils = require(\"./utils.js\");\n\nconst implSymbol = utils.implSymbol;\nconst ctorRegistrySymbol = utils.ctorRegistrySymbol;\n\nconst interfaceName = \"DOMException\";\n\nexports.is = value => {\n return utils.isObject(value) && utils.hasOwn(value, implSymbol) && value[implSymbol] instanceof Impl.implementation;\n};\nexports.isImpl = value => {\n return utils.isObject(value) && value instanceof Impl.implementation;\n};\nexports.convert = (globalObject, value, { context = \"The provided value\" } = {}) => {\n if (exports.is(value)) {\n return utils.implForWrapper(value);\n }\n throw new globalObject.TypeError(`${context} is not of type 'DOMException'.`);\n};\n\nfunction makeWrapper(globalObject, newTarget) {\n let proto;\n if (newTarget !== undefined) {\n proto = newTarget.prototype;\n }\n\n if (!utils.isObject(proto)) {\n proto = globalObject[ctorRegistrySymbol][\"DOMException\"].prototype;\n }\n\n return Object.create(proto);\n}\n\nexports.create = (globalObject, constructorArgs, privateData) => {\n const wrapper = makeWrapper(globalObject);\n return exports.setup(wrapper, globalObject, constructorArgs, privateData);\n};\n\nexports.createImpl = (globalObject, constructorArgs, privateData) => {\n const wrapper = exports.create(globalObject, constructorArgs, privateData);\n return utils.implForWrapper(wrapper);\n};\n\nexports._internalSetup = (wrapper, globalObject) => {};\n\nexports.setup = (wrapper, globalObject, constructorArgs = [], privateData = {}) => {\n privateData.wrapper = wrapper;\n\n exports._internalSetup(wrapper, globalObject);\n Object.defineProperty(wrapper, implSymbol, {\n value: new Impl.implementation(globalObject, constructorArgs, privateData),\n configurable: true\n });\n\n wrapper[implSymbol][utils.wrapperSymbol] = wrapper;\n if (Impl.init) {\n Impl.init(wrapper[implSymbol]);\n }\n return wrapper;\n};\n\nexports.new = (globalObject, newTarget) => {\n const wrapper = makeWrapper(globalObject, newTarget);\n\n exports._internalSetup(wrapper, globalObject);\n Object.defineProperty(wrapper, implSymbol, {\n value: Object.create(Impl.implementation.prototype),\n configurable: true\n });\n\n wrapper[implSymbol][utils.wrapperSymbol] = wrapper;\n if (Impl.init) {\n Impl.init(wrapper[implSymbol]);\n }\n return wrapper[implSymbol];\n};\n\nconst exposed = new Set([\"Window\", \"Worker\"]);\n\nexports.install = (globalObject, globalNames) => {\n if (!globalNames.some(globalName => exposed.has(globalName))) {\n return;\n }\n\n const ctorRegistry = utils.initCtorRegistry(globalObject);\n class DOMException {\n constructor() {\n const args = [];\n {\n let curArg = arguments[0];\n if (curArg !== undefined) {\n curArg = conversions[\"DOMString\"](curArg, {\n context: \"Failed to construct 'DOMException': parameter 1\",\n globals: globalObject\n });\n } else {\n curArg = \"\";\n }\n args.push(curArg);\n }\n {\n let curArg = arguments[1];\n if (curArg !== undefined) {\n curArg = conversions[\"DOMString\"](curArg, {\n context: \"Failed to construct 'DOMException': parameter 2\",\n globals: globalObject\n });\n } else {\n curArg = \"Error\";\n }\n args.push(curArg);\n }\n return exports.setup(Object.create(new.target.prototype), globalObject, args);\n }\n\n get name() {\n const esValue = this !== null && this !== undefined ? this : globalObject;\n\n if (!exports.is(esValue)) {\n throw new globalObject.TypeError(\n \"'get name' called on an object that is not a valid instance of DOMException.\"\n );\n }\n\n return esValue[implSymbol][\"name\"];\n }\n\n get message() {\n const esValue = this !== null && this !== undefined ? this : globalObject;\n\n if (!exports.is(esValue)) {\n throw new globalObject.TypeError(\n \"'get message' called on an object that is not a valid instance of DOMException.\"\n );\n }\n\n return esValue[implSymbol][\"message\"];\n }\n\n get code() {\n const esValue = this !== null && this !== undefined ? this : globalObject;\n\n if (!exports.is(esValue)) {\n throw new globalObject.TypeError(\n \"'get code' called on an object that is not a valid instance of DOMException.\"\n );\n }\n\n return esValue[implSymbol][\"code\"];\n }\n }\n Object.defineProperties(DOMException.prototype, {\n name: { enumerable: true },\n message: { enumerable: true },\n code: { enumerable: true },\n [Symbol.toStringTag]: { value: \"DOMException\", configurable: true },\n INDEX_SIZE_ERR: { value: 1, enumerable: true },\n DOMSTRING_SIZE_ERR: { value: 2, enumerable: true },\n HIERARCHY_REQUEST_ERR: { value: 3, enumerable: true },\n WRONG_DOCUMENT_ERR: { value: 4, enumerable: true },\n INVALID_CHARACTER_ERR: { value: 5, enumerable: true },\n NO_DATA_ALLOWED_ERR: { value: 6, enumerable: true },\n NO_MODIFICATION_ALLOWED_ERR: { value: 7, enumerable: true },\n NOT_FOUND_ERR: { value: 8, enumerable: true },\n NOT_SUPPORTED_ERR: { value: 9, enumerable: true },\n INUSE_ATTRIBUTE_ERR: { value: 10, enumerable: true },\n INVALID_STATE_ERR: { value: 11, enumerable: true },\n SYNTAX_ERR: { value: 12, enumerable: true },\n INVALID_MODIFICATION_ERR: { value: 13, enumerable: true },\n NAMESPACE_ERR: { value: 14, enumerable: true },\n INVALID_ACCESS_ERR: { value: 15, enumerable: true },\n VALIDATION_ERR: { value: 16, enumerable: true },\n TYPE_MISMATCH_ERR: { value: 17, enumerable: true },\n SECURITY_ERR: { value: 18, enumerable: true },\n NETWORK_ERR: { value: 19, enumerable: true },\n ABORT_ERR: { value: 20, enumerable: true },\n URL_MISMATCH_ERR: { value: 21, enumerable: true },\n QUOTA_EXCEEDED_ERR: { value: 22, enumerable: true },\n TIMEOUT_ERR: { value: 23, enumerable: true },\n INVALID_NODE_TYPE_ERR: { value: 24, enumerable: true },\n DATA_CLONE_ERR: { value: 25, enumerable: true }\n });\n Object.defineProperties(DOMException, {\n INDEX_SIZE_ERR: { value: 1, enumerable: true },\n DOMSTRING_SIZE_ERR: { value: 2, enumerable: true },\n HIERARCHY_REQUEST_ERR: { value: 3, enumerable: true },\n WRONG_DOCUMENT_ERR: { value: 4, enumerable: true },\n INVALID_CHARACTER_ERR: { value: 5, enumerable: true },\n NO_DATA_ALLOWED_ERR: { value: 6, enumerable: true },\n NO_MODIFICATION_ALLOWED_ERR: { value: 7, enumerable: true },\n NOT_FOUND_ERR: { value: 8, enumerable: true },\n NOT_SUPPORTED_ERR: { value: 9, enumerable: true },\n INUSE_ATTRIBUTE_ERR: { value: 10, enumerable: true },\n INVALID_STATE_ERR: { value: 11, enumerable: true },\n SYNTAX_ERR: { value: 12, enumerable: true },\n INVALID_MODIFICATION_ERR: { value: 13, enumerable: true },\n NAMESPACE_ERR: { value: 14, enumerable: true },\n INVALID_ACCESS_ERR: { value: 15, enumerable: true },\n VALIDATION_ERR: { value: 16, enumerable: true },\n TYPE_MISMATCH_ERR: { value: 17, enumerable: true },\n SECURITY_ERR: { value: 18, enumerable: true },\n NETWORK_ERR: { value: 19, enumerable: true },\n ABORT_ERR: { value: 20, enumerable: true },\n URL_MISMATCH_ERR: { value: 21, enumerable: true },\n QUOTA_EXCEEDED_ERR: { value: 22, enumerable: true },\n TIMEOUT_ERR: { value: 23, enumerable: true },\n INVALID_NODE_TYPE_ERR: { value: 24, enumerable: true },\n DATA_CLONE_ERR: { value: 25, enumerable: true }\n });\n ctorRegistry[interfaceName] = DOMException;\n\n Object.defineProperty(globalObject, interfaceName, {\n configurable: true,\n writable: true,\n value: DOMException\n });\n};\n\nconst Impl = require(\"./DOMException-impl.js\");\n","\"use strict\";\nconst DOMException = require(\"./lib/DOMException.js\");\n\n// Special install function to make the DOMException inherit from Error.\n// https://heycam.github.io/webidl/#es-DOMException-specialness\nfunction installOverride(globalObject, globalNames) {\n if (typeof globalObject.Error !== \"function\") {\n throw new Error(\"Internal error: Error constructor is not present on the given global object.\");\n }\n\n DOMException.install(globalObject, globalNames);\n Object.setPrototypeOf(globalObject.DOMException.prototype, globalObject.Error.prototype);\n}\n\nmodule.exports = { ...DOMException, install: installOverride };\n","\"use strict\";\nconst DOMException = require(\"./webidl2js-wrapper.js\");\n\nconst sharedGlobalObject = { Array, Error, Object, Promise, String, TypeError };\nDOMException.install(sharedGlobalObject, [\"Window\"]);\n\nmodule.exports = sharedGlobalObject.DOMException;\n","\"use strict\";\n\nfunction RTCDataChannelEvent(type, eventInitDict) {\n Object.defineProperties(this, {\n bubbles: {\n value: false,\n },\n cancelable: {\n value: false,\n },\n type: {\n value: type,\n enumerable: true,\n },\n channel: {\n value: eventInitDict.channel,\n enumerable: true,\n },\n target: {\n value: eventInitDict.target,\n enumerable: true,\n },\n });\n}\n\nmodule.exports = RTCDataChannelEvent;\n","\"use strict\";\n\nfunction RTCIceCandidate(candidateInitDict) {\n [\n \"candidate\",\n \"sdpMid\",\n \"sdpMLineIndex\",\n \"foundation\",\n \"component\",\n \"priority\",\n \"address\",\n \"protocol\",\n \"port\",\n \"type\",\n \"tcpType\",\n \"relatedAddress\",\n \"relatedPort\",\n \"usernameFragment\",\n ].forEach((property) => {\n if (candidateInitDict && property in candidateInitDict) {\n this[property] = candidateInitDict[property];\n } else {\n this[property] = null;\n }\n });\n\n this.toJSON = () => {\n const { candidate, sdpMid, sdpMLineIndex, usernameFragment } = this;\n let json = {\n candidate,\n sdpMid,\n sdpMLineIndex,\n };\n\n if (usernameFragment) {\n json.usernameFragment = usernameFragment;\n }\n\n return json;\n };\n}\n\nmodule.exports = RTCIceCandidate;\n","\"use strict\";\n\nfunction RTCPeerConnectionIceEvent(type, eventInitDict) {\n Object.defineProperties(this, {\n type: {\n value: type,\n enumerable: true,\n },\n candidate: {\n value: eventInitDict.candidate,\n enumerable: true,\n },\n target: {\n value: eventInitDict.target,\n enumerable: true,\n },\n });\n}\n\nmodule.exports = RTCPeerConnectionIceEvent;\n","\"use strict\";\n\nfunction RTCPeerConnectionIceErrorEvent(type, eventInitDict) {\n Object.defineProperties(this, {\n type: {\n value: type,\n enumerable: true,\n },\n address: {\n value: eventInitDict.address,\n enumerable: true,\n },\n port: {\n value: eventInitDict.port,\n enumerable: true,\n },\n url: {\n value: eventInitDict.url,\n enumerable: true,\n },\n errorCode: {\n value: eventInitDict.errorCode,\n enumerable: true,\n },\n errorText: {\n value: eventInitDict.errorText,\n enumerable: true,\n },\n target: {\n value: eventInitDict.target,\n enumerable: true,\n },\n });\n}\n\nmodule.exports = RTCPeerConnectionIceErrorEvent;\n","\"use strict\";\n\nfunction RTCSessionDescription(descriptionInitDict) {\n if (descriptionInitDict) {\n this.type = descriptionInitDict.type;\n this.sdp = descriptionInitDict.sdp;\n }\n\n this.toJSON = () => {\n const { sdp, type } = this;\n\n return {\n sdp,\n type,\n };\n };\n}\n\nmodule.exports = RTCSessionDescription;\n","\"use strict\";\n\nvar inherits = require(\"util\").inherits;\n\nvar _webrtc = require(\"./binding\");\n\nvar EventTarget = require(\"./eventtarget\");\n\nvar RTCDataChannelEvent = require(\"./datachannelevent\");\nvar RTCIceCandidate = require(\"./icecandidate\");\nvar RTCPeerConnectionIceEvent = require(\"./rtcpeerconnectioniceevent\");\nvar RTCPeerConnectionIceErrorEvent = require(\"./rtcpeerconnectioniceerrorevent\");\nvar RTCSessionDescription = require(\"./sessiondescription\");\n\nfunction RTCPeerConnection() {\n var self = this;\n var pc = new _webrtc.RTCPeerConnection(arguments[0] || {});\n\n EventTarget.call(this);\n\n //\n // Attach events to the native PeerConnection object\n //\n pc.ontrack = function ontrack(receiver, streams, transceiver) {\n self.dispatchEvent({\n type: \"track\",\n track: receiver.track,\n receiver: receiver,\n streams: streams,\n transceiver: transceiver,\n target: self,\n });\n };\n\n pc.onconnectionstatechange = function onconnectionstatechange() {\n self.dispatchEvent({ type: \"connectionstatechange\", target: self });\n };\n\n pc.onicecandidate = function onicecandidate(candidate) {\n var icecandidate = new RTCIceCandidate(candidate);\n self.dispatchEvent(\n new RTCPeerConnectionIceEvent(\"icecandidate\", {\n candidate: icecandidate,\n target: self,\n }),\n );\n };\n\n pc.onicecandidateerror = function onicecandidateerror(eventInitDict) {\n eventInitDict.target = self;\n var icecandidateerror = new RTCPeerConnectionIceErrorEvent(\n \"icecandidateerror\",\n eventInitDict,\n );\n self.dispatchEvent(icecandidateerror);\n };\n\n pc.onsignalingstatechange = function onsignalingstatechange() {\n self.dispatchEvent({ type: \"signalingstatechange\", target: self });\n };\n\n pc.oniceconnectionstatechange = function oniceconnectionstatechange() {\n self.dispatchEvent({ type: \"iceconnectionstatechange\", target: self });\n };\n\n pc.onicegatheringstatechange = function onicegatheringstatechange() {\n self.dispatchEvent({ type: \"icegatheringstatechange\", target: self });\n\n // if we have completed gathering candidates, trigger a null candidate event\n if (\n self.iceGatheringState === \"complete\" &&\n self.connectionState !== \"closed\"\n ) {\n self.dispatchEvent(\n new RTCPeerConnectionIceEvent(\"icecandidate\", {\n candidate: null,\n target: self,\n }),\n );\n }\n };\n\n pc.onnegotiationneeded = function onnegotiationneeded() {\n self.dispatchEvent({ type: \"negotiationneeded\", target: self });\n };\n\n // [ToDo] onnegotiationneeded\n\n pc.ondatachannel = function ondatachannel(channel) {\n self.dispatchEvent(\n new RTCDataChannelEvent(\"datachannel\", { channel, target: self }),\n );\n };\n\n //\n // PeerConnection properties & attributes\n //\n\n Object.defineProperties(this, {\n _pc: {\n value: pc,\n },\n canTrickleIceCandidates: {\n get: function getCanTrickleIceCandidates() {\n return pc.canTrickleIceCandidates;\n },\n enumerable: true,\n },\n connectionState: {\n get: function getConnectionState() {\n return pc.connectionState;\n },\n enumerable: true,\n },\n currentLocalDescription: {\n get: function getCurrentLocalDescription() {\n return pc.currentLocalDescription\n ? new RTCSessionDescription(pc.currentLocalDescription)\n : null;\n },\n enumerable: true,\n },\n localDescription: {\n get: function getLocalDescription() {\n return pc.localDescription\n ? new RTCSessionDescription(pc.localDescription)\n : null;\n },\n enumerable: true,\n },\n pendingLocalDescription: {\n get: function getPendingLocalDescription() {\n return pc.pendingLocalDescription\n ? new RTCSessionDescription(pc.pendingLocalDescription)\n : null;\n },\n enumerable: true,\n },\n currentRemoteDescription: {\n get: function getCurrentRemoteDescription() {\n return pc.currentRemoteDescription\n ? new RTCSessionDescription(pc.currentRemoteDescription)\n : null;\n },\n enumerable: true,\n },\n remoteDescription: {\n get: function getRemoteDescription() {\n return pc.remoteDescription\n ? new RTCSessionDescription(pc.remoteDescription)\n : null;\n },\n enumerable: true,\n },\n pendingRemoteDescription: {\n get: function getPendingRemoteDescription() {\n return pc.pendingRemoteDescription\n ? new RTCSessionDescription(pc.pendingRemoteDescription)\n : null;\n },\n enumerable: true,\n },\n signalingState: {\n get: function getSignalingState() {\n return pc.signalingState;\n },\n enumerable: true,\n },\n readyState: {\n get: function getReadyState() {\n return pc.getReadyState();\n },\n },\n sctp: {\n get: function () {\n return pc.sctp;\n },\n enumerable: true,\n },\n iceGatheringState: {\n get: function getIceGatheringState() {\n return pc.iceGatheringState;\n },\n enumerable: true,\n },\n iceConnectionState: {\n get: function getIceConnectionState() {\n return pc.iceConnectionState;\n },\n enumerable: true,\n },\n onconnectionstatechange: {\n value: null,\n writable: true,\n enumerable: true,\n },\n ondatachannel: {\n value: null,\n writable: true,\n enumerable: true,\n },\n oniceconnectionstatechange: {\n value: null,\n writable: true,\n enumerable: true,\n },\n onicegatheringstatechange: {\n value: null,\n writable: true,\n enumerable: true,\n },\n onnegotiationneeded: {\n value: null,\n writable: true,\n enumerable: true,\n },\n onsignalingstatechange: {\n value: null,\n writable: true,\n enumerable: true,\n },\n });\n}\n\ninherits(RTCPeerConnection, EventTarget);\n\n// NOTE(mroberts): This is a bit of a hack.\nRTCPeerConnection.prototype.ontrack = null;\n\nRTCPeerConnection.prototype.addIceCandidate = function addIceCandidate(\n candidate,\n) {\n if (!candidate?.candidate) {\n // The WebRTC specification says:\n // * if the `candidate` is undefined/missing\n // * if the `candidate` parameter is null\n // * if the `candidate` parameter has an undefined/missing `candidate` property\n // * if the `candidate` parameter has a `candidate: \"\"` property\n // Then, the message is treated as end-of-candidates.\n // This code normalizes all those conditions into a single value, for convenience.\n // eslint-disable-next-line no-undefined\n candidate = undefined;\n }\n var promise = this._pc.addIceCandidate(candidate);\n if (arguments.length === 3) {\n promise.then(arguments[1], arguments[2]);\n }\n return promise;\n};\n\nRTCPeerConnection.prototype.addTransceiver = function addTransceiver() {\n return this._pc.addTransceiver.apply(this._pc, arguments);\n};\n\nRTCPeerConnection.prototype.addTrack = function addTrack(track, ...streams) {\n return this._pc.addTrack(track, streams);\n};\n\nRTCPeerConnection.prototype.close = function close() {\n this._pc.close();\n};\n\nRTCPeerConnection.prototype.createDataChannel = function createDataChannel() {\n return this._pc.createDataChannel.apply(this._pc, arguments);\n};\n\nRTCPeerConnection.prototype.createOffer = function createOffer() {\n var options = arguments.length === 3 ? arguments[2] : arguments[0];\n var promise = this._pc.createOffer(options || {});\n if (arguments.length >= 2) {\n promise.then(arguments[0], arguments[1]);\n }\n return promise;\n};\n\nRTCPeerConnection.prototype.createAnswer = function createAnswer() {\n var options = arguments.length === 3 ? arguments[2] : arguments[0];\n var promise = this._pc.createAnswer(options || {});\n if (arguments.length >= 2) {\n promise.then(arguments[0], arguments[1]);\n }\n return promise;\n};\n\nRTCPeerConnection.prototype.getConfiguration = function getConfiguration() {\n return this._pc.getConfiguration();\n};\n\nRTCPeerConnection.prototype.getReceivers = function getReceivers() {\n return this._pc.getReceivers();\n};\n\nRTCPeerConnection.prototype.getSenders = function getSenders() {\n return this._pc.getSenders();\n};\n\nRTCPeerConnection.prototype.getTransceivers = function getTransceivers() {\n return this._pc.getTransceivers();\n};\n\nRTCPeerConnection.prototype.getStats = function getStats() {\n return this._pc.getStats(arguments[0]);\n};\n\nRTCPeerConnection.prototype.removeTrack = function removeTrack(sender) {\n this._pc.removeTrack(sender);\n};\n\nRTCPeerConnection.prototype.setConfiguration = function setConfiguration(\n configuration,\n) {\n return this._pc.setConfiguration(configuration);\n};\n\nRTCPeerConnection.prototype.setLocalDescription = function setLocalDescription(\n description,\n) {\n var promise = this._pc.setLocalDescription(description);\n if (arguments.length === 3) {\n promise.then(arguments[1], arguments[2]);\n }\n return promise;\n};\n\nRTCPeerConnection.prototype.setRemoteDescription =\n function setRemoteDescription(description) {\n var promise = this._pc.setRemoteDescription(description);\n if (arguments.length === 3) {\n promise.then(arguments[1], arguments[2]);\n }\n return promise;\n };\n\nRTCPeerConnection.prototype.restartIce = function restartIce() {\n return this._pc.restartIce();\n};\n\nmodule.exports = RTCPeerConnection;\n","\"use strict\";\n\nconst { inherits } = require(\"util\");\n\nconst {\n MediaStream,\n MediaStreamTrack,\n RTCAudioSink,\n RTCAudioSource,\n RTCDataChannel,\n RTCDtlsTransport,\n RTCIceTransport,\n RTCRtpReceiver,\n RTCRtpSender,\n RTCRtpTransceiver,\n RTCSctpTransport,\n RTCVideoSink,\n RTCVideoSource,\n getUserMedia,\n i420ToRgba,\n rgbaToI420,\n setDOMException,\n} = require(\"./binding\");\n\nconst EventTarget = require(\"./eventtarget\");\nconst MediaDevices = require(\"./mediadevices\");\n\ninherits(MediaStream, EventTarget);\ninherits(MediaStreamTrack, EventTarget);\ninherits(RTCAudioSink, EventTarget);\ninherits(RTCDataChannel, EventTarget);\ninherits(RTCDtlsTransport, EventTarget);\ninherits(RTCIceTransport, EventTarget);\ninherits(RTCSctpTransport, EventTarget);\ninherits(RTCVideoSink, EventTarget);\n\ntry {\n setDOMException(require(\"domexception\"));\n} catch (error) {\n // Do nothing\n void error;\n}\n\n// NOTE(mroberts): Here's a hack to support jsdom's Blob implementation.\nRTCDataChannel.prototype.send = function send(data) {\n const implSymbol = Object.getOwnPropertySymbols(data).find(\n (symbol) => symbol.toString() === \"Symbol(impl)\",\n );\n if (data[implSymbol] && data[implSymbol]._buffer) {\n data = data[implSymbol]._buffer;\n }\n this._send(data);\n};\n\nconst mediaDevices = new MediaDevices();\n\nconst nonstandard = {\n i420ToRgba,\n RTCAudioSink,\n RTCAudioSource,\n RTCVideoSink,\n RTCVideoSource,\n rgbaToI420,\n};\n\nmodule.exports = {\n MediaStream,\n MediaStreamTrack,\n RTCDataChannel,\n RTCDataChannelEvent: require(\"./datachannelevent\"),\n RTCDtlsTransport,\n RTCIceCandidate: require(\"./icecandidate\"),\n RTCIceTransport,\n RTCPeerConnection: require(\"./peerconnection\"),\n RTCPeerConnectionIceEvent: require(\"./rtcpeerconnectioniceevent\"),\n RTCPeerConnectionIceErrorEvent: require(\"./rtcpeerconnectioniceerrorevent\"),\n RTCRtpReceiver,\n RTCRtpSender,\n RTCRtpTransceiver,\n RTCSctpTransport,\n RTCSessionDescription: require(\"./sessiondescription\"),\n getUserMedia,\n mediaDevices,\n nonstandard,\n};\n","import * as https from 'node:https'\nimport * as fs from 'node:fs'\nimport {\n reactive,\n deepGet,\n clonewo_,\n opmsg,\n msgop,\n encode_uint32,\n encode_fp412,\n encode_fp168,\n encode_fp1616,\n limitPrecision,\n encode,\n decode\n} from './utils'\nimport { compress, decompress } from './compress-node'\nimport fastjsonpatch from 'fast-json-patch'\nimport { WebSocketServer, WebSocket } from 'ws'\nimport { MongoClient, Db } from 'mongodb'\nimport { glMatrix, vec3, quat } from 'gl-matrix'\n// WebRTC implementation loaded conditionally when needed\n\nglMatrix.setMatrixArrayType(Array)\n\n// entities/ID/\nconst fastPatchProperties: Record<string, boolean> = {\n 'type': true, // string 'enemy'\n 'status': true, // string 'idle'\n 'level': true, // number 2\n 'race': true, // string 'goblin'\n 'class': true, // string 'warrior'\n 'model': true, // string 'models/models.glb|goblin'\n 'animation': true, // string 'idle2'\n 'sound': true, // string 'sound/goblin.snd|snarl'\n 'effect': true, // 'selected'\n 'position': true, // [0, 0, 0] Vector (Number)\n 'rotation': true, // [0, 0, 0, 1] Quaternion (Number)\n 'scale': true, // [1, 1, 1] Vector (Number)\n}\n\nconst dictionaryProperties: Record<string, boolean> = {\n 'type': true,\n 'status': true,\n 'level': true,\n 'race': true,\n 'class': true,\n 'model': true,\n 'animation': true,\n 'sound': true,\n 'effect': true,\n}\n\nconst { applyOperation } = fastjsonpatch\nconst LITTLE_ENDIAN = (() => {\n const buffer = new ArrayBuffer(2)\n new DataView(buffer).setInt16(0, 256, true)\n return new Int16Array(buffer)[0] === 256\n})()\n\nconst MAX_PACKAGE_SIZE = 65400; // Slightly below the 65535 limit to allow for overhead\n\n\ntype ClientType = any\n\ninterface StatsType {\n tUpdate: number[]\n tPatch: number[]\n send: number\n sendRTC: number\n _sendRTCUpdate: number\n [key: string]: any\n}\n\nexport default class TopazCubeServer {\n name = 'TopazCubeServer'\n cycle = 100\n patchCycleDivider = 1\n port = 8799\n useHttps = false\n key = './cert/key.pem'\n cert = './cert/cert.pem'\n MongoUrl = 'mongodb://localhost:27017'\n mongoClient: MongoClient | null = null\n DB: Db | null = null\n database = 'topazcube'\n collection = 'documents'\n allowSave = true\n allowSync = true\n allowWebRTC = false\n allowFastPatch = false\n allowCompression = false\n simulateLatency = 0\n\n _lastUID = 100\n clients: ClientType[] = []\n documents: Record<string, any> = {}\n isLoading: Record<string, boolean> = {}\n _documentChanges: Record<string, any[]> = {}\n _documentState: Record<string, any> = {}\n\n update = 0\n lastUpdate = 0\n _loopiv: any = null\n _statsiv: any = null\n _stillUpdating = false\n stats: StatsType = {\n tUpdate: [],\n tPatch: [],\n send: 0,\n sendRTC: 0,\n _sendRTCUpdate: 0\n }\n\n _wss: WebSocketServer | null = null\n _exited = false\n\n log(...args: any[]) {\n console.log(this.name + ':', ...args);\n }\n\n warn(...args: any[]) {\n console.warn(this.name + ':', ...args);\n }\n\n error(...args: any[]) {\n console.error(this.name + ':', ...args);\n }\n\n constructor({\n name = 'TopazCubeServer',\n cycle = 100,\n port = 8799,\n useHttps = false,\n key = './cert/key.pem',\n cert = './cert/cert.pem',\n MongoUrl = 'mongodb://localhost:27017',\n database = 'topazcube',\n collection = 'documents',\n allowSave = true,\n allowSync = true,\n allowWebRTC = false,\n allowFastPatch = false,\n allowCompression = false,\n simulateLatency = 0,\n }: {\n name?: string\n cycle?: number\n port?: number\n useHttps?: boolean\n key?: string\n cert?: string\n MongoUrl?: string\n database?: string\n collection?: string\n allowSave?: boolean\n allowSync?: boolean\n allowWebRTC?: boolean\n allowFastPatch?: boolean\n allowCompression?: boolean\n simulateLatency?: number\n } = {}) {\n this.name = name\n this.cycle = cycle\n this.port = port\n this.useHttps = useHttps\n this.key = key\n this.cert = cert\n this.MongoUrl = MongoUrl\n this.database = database\n this.collection = collection\n this.allowSave = allowSave\n this.allowSync = allowSync\n this.allowWebRTC = allowWebRTC\n this.allowFastPatch = allowFastPatch\n this.allowCompression = allowCompression\n this.simulateLatency = simulateLatency\n\n this._initDB()\n\n if (useHttps) {\n let httpsServer: https.Server | null = https.createServer({\n key: fs.readFileSync(this.key),\n cert: fs.readFileSync(this.cert),\n }, (req, res) => {\n res.writeHead(200)\n res.end('<b>Hello World!</b>')\n }).listen(this.port)\n this._wss = new WebSocketServer({ server: httpsServer })\n httpsServer = null\n this.log(this.name + ' running on HTTPS port ' + this.port)\n } else {\n this._wss = new WebSocketServer({ port: this.port })\n this.log(this.name + ' running on port ' + this.port)\n }\n this._wss.on('connection', (client: WebSocket) => {\n this._onConnected(client)\n })\n\n process.stdin.resume()\n process.on('SIGINT', () => {\n this._exitSignal('SIGINT')\n })\n process.on('SIGQUIT', () => {\n this._exitSignal('SIGQUIT')\n })\n process.on('SIGTERM', () => {\n this._exitSignal('SIGTERM')\n })\n process.on('SIGUSR2', () => {\n this._exitSignal('SIGUSR2')\n })\n\n // Setup keypress handling for console input\n process.stdin.resume()\n process.stdin.setEncoding('utf8')\n\n process.stdin.on('data', (key: any) => {\n key = (''+key).trim()\n\n // ctrl-c ( end of text )\n if (key == '\\u0003') {\n this._exitSignal('SIGINT')\n return\n }\n\n // Process other keypresses\n this.log(`Key pressed: ${key}`)\n\n // Example: 's' to save all documents\n if (key == 's') {\n this.log('Saving all documents...')\n this._saveAllDocuments()\n }\n\n // Example: 'i' to print server info\n if (key == 'i') {\n this.log(\n `Server: ${this.name}, Clients: ${this.clients.length}, Documents: ${Object.keys(this.documents).length}`\n )\n }\n })\n this._startLoop()\n }\n\n /*= DOCUMENTS ==============================================================*/\n\n // to be redefined. Called before a new document is created. Returns true if\n // the client has the right to create an empty document\n canCreate(client: ClientType, name: string): boolean {\n return true\n }\n\n // to be redefined. Called when a new document is created\n // (returns an empty document)\n onCreate(name: string): any {\n return {\n data: {},\n }\n }\n\n // to be redefined. Called when a client wants to sync (modify) a document.\n // Returns true if the client has the right to sync that operation.\n canSync(client: ClientType, name: string, op: any): boolean {\n return true\n }\n\n // to be redefined. Called when a new document is hydrated\n // (created, or loaded from db)\n async onHydrate(name: string, document: any): Promise<void> {\n document.__hydrated = true\n }\n\n _makeReactive(name: string): void {\n //this.log(`Making document '${name}' reactive`, this.documents[name])\n let ep: any = false\n if (this.allowFastPatch) {\n ep = fastPatchProperties\n }\n this.documents[name] = reactive(\n name,\n this.documents[name],\n this._onDocumentChange.bind(this),\n '',\n ep\n )\n if (!this._documentChanges[name]) {\n this._documentChanges[name] = []\n }\n }\n\n _createEmptyDocument(name: string): void {\n let doc = this.onCreate(name)\n if (!doc) {\n return\n }\n this.documents[name] = doc\n }\n\n async _waitLoad(name: string): Promise<void> {\n if (this.isLoading[name]) {\n while (this.isLoading[name]) {\n await new Promise((resolve) => setTimeout(resolve, 50))\n }\n }\n }\n\n async _checkDocument(name: string, client: ClientType): Promise<void> {\n await this._waitLoad(name)\n if (!this.documents[name]) {\n this.isLoading[name] = true\n await this._loadDocument(name)\n if (!this.documents[name] && this.canCreate(client, name)) {\n this._createEmptyDocument(name)\n }\n if (this.documents[name]) {\n this._makeReactive(name)\n this.onHydrate(name, this.documents[name])\n }\n this.isLoading[name] = false\n this._documentState[name] = {\n subscibers: 0,\n lastModified: Date.now(),\n }\n }\n }\n\n _updateAllDocumentsState(): void {\n for (let name in this.documents) {\n if (name != '_server') {\n let doc = this.documents[name]\n this._documentState[name].subscibers = 0\n for (let client of this.clients) {\n if (client.subscribed && client.subscribed[name]) {\n this._documentState[name].subscibers++\n }\n }\n }\n }\n }\n\n /*= UPDATE LOOP ============================================================*/\n\n // to be redefined. called every this.cycle ms\n onUpdate(name: string, doc: any, dt: number): void {}\n\n _startLoop(): void {\n this.lastUpdate = Date.now()\n this._loop()\n this._statsiv = setInterval(() => {\n this._doStats()\n }, 1000)\n }\n\n _loop(): void {\n let now = Date.now()\n let dtms = (now - this.lastUpdate)\n let dt = dtms / 1000.0 // Convert to seconds\n this.lastUpdate = now\n\n /*\n if (this._stillUpdating) {\n return\n }\n */\n this._stillUpdating = true\n for (let name in this.documents) {\n this.onUpdate(name, this.documents[name], dt)\n }\n let t1 = Date.now()\n this._stillUpdating = false\n let updateTime = t1 - now\n this.stats.tUpdate.push(updateTime)\n\n //this.log(`update ${this.update} patch: ${this.update % this.patchCycleDivider}`, )\n\n let patchTime = 0\n if (this.update % this.patchCycleDivider == 0) {\n this._sendPatches()\n let t2 = Date.now()\n patchTime = t2 - t1\n this.stats.tPatch.push(patchTime)\n if (this.allowFastPatch) {\n this.log(`update ${this.update} dt:${dtms}ms RTC:${this.stats._sendRTCUpdate}bytes, tUpdate: ${updateTime}ms, tPatch: ${patchTime}ms`, )\n }\n this.stats._sendRTCUpdate = 0\n }\n\n this.update++\n let endUpdate = Date.now()\n let totalUpdate = endUpdate - now\n\n setTimeout(() => {\n this._loop()\n }, Math.max(this.cycle - totalUpdate, 10))\n }\n\n _doStats(): void {\n for (let key in this.stats) {\n let i = this.stats[key]\n if (Array.isArray(i) && i.length > 0) {\n while (i.length > 60) {\n i.shift()\n }\n this.stats['_avg_' + key] = i.reduce((a: number, b: number) => a + b, 0) / i.length\n } else if (!key.startsWith('_')) {\n this.stats['_persec_' + key] = i / 3.0\n this.stats[key] = 0\n }\n }\n //this.log('stats', this.stats)\n }\n\n /*= MESSAGES ===============================================================*/\n\n // to be redefined. Called on message (operation) from client\n onMessage(client: ClientType, message: any): void {}\n\n // to be redefined. Called when a client connects\n onConnect(client: ClientType): void {}\n\n // to be redefined. Called when a client disconnects\n onDisconnect(client: ClientType): void {}\n\n _onConnected(client: ClientType): void {\n client.ID = this.getUID()\n client.ping = 0\n client.ctdiff = 0\n client.subscribed = {}\n client.dataChannel = null\n client.peerConnection = null\n\n this.log('client connected', client.ID)\n this.clients.push(client)\n client.on('error', (...args: any[]) => {\n this._onError(client, args)\n })\n client.on('message', (message:any) => {\n let dec = decode(message)\n if (this.simulateLatency) {\n setTimeout(() => {\n this._onMessage(client, dec)\n }, this.simulateLatency)\n } else {\n this._onMessage(client, dec)\n }\n })\n client.on('close', (message:any) => {\n this._onDisconnected(client)\n this.onDisconnect(client)\n })\n this.onConnect(client)\n }\n\n async _onMessage(client: ClientType, message: any): Promise<void> {\n if (\n message.c == 'sync' &&\n this.allowSync &&\n client.subscribed &&\n client.subscribed[message.n] &&\n this.documents[message.n]\n ) {\n let name = message.n\n if (!this._documentChanges[name]) {\n this._documentChanges[name] = []\n }\n for (let op of message.p) {\n if (!this.canSync(client, name, op)) {\n continue\n }\n this._documentChanges[name].push(op)\n let dop = msgop(op)\n applyOperation(this.documents[name], dop)\n }\n } else if (message.c == 'ping') {\n this.send(client, {\n c: 'pong',\n t: Date.now(),\n ct: message.ct,\n ID: client.ID,\n })\n } else if (message.c == 'peng') {\n let time = Date.now()\n let ping = time - message.st\n client.ctdiff = message.ct + ping / 2 - time\n client.ping = ping\n //this.log(time, \"PENG ping, ctdiff\", message, ping, client.ctdiff, \"ms\")\n } else if (message.c == 'rtc-offer') {\n this._processOffer(client, message)\n } else if (message.c == 'rtc-candidate') {\n this._processICECandidate(client, message)\n } else if (message.c == 'sub') {\n await this._checkDocument(message.n, client)\n if (!this.documents[message.n]) {\n this.send(client, {\n c: 'error',\n t: Date.now(),\n message: 'Document not found',\n })\n return\n }\n if (client.subscribed) {\n client.subscribed[message.n] = true\n }\n this._sendFullState(message.n, client)\n } else if (message.c == 'unsub') {\n if (client.subscribed) {\n client.subscribed[message.n] = false\n }\n } else {\n this.onMessage(client, message)\n }\n }\n\n _onError(client: ClientType, args: any[]): void {\n this.error('onError:', args)\n }\n\n _onDisconnected(client: ClientType): void {\n if (client.dataChannel) {\n client.dataChannel.close()\n }\n if (client.peerConnection) {\n client.peerConnection.close()\n }\n this.log('client disconnected')\n let index = this.clients.indexOf(client)\n if (index !== -1) {\n this.clients.splice(index, 1)\n }\n }\n\n async send(client: ClientType, message: any): Promise<void> {\n try {\n let t1 = Date.now()\n let data = encode(message)\n let t2 = Date.now()\n let dl = data.byteLength\n if (this.allowCompression) {\n data = await compress(data)\n }\n let t3 = Date.now()\n if (data.length > 4096) {\n this.log(`Big message ${dl} -> ${data.length} (${(100.0 * data.length / dl).toFixed()}%) encoding:${t2 - t1}ms compression:${t3 - t1}ms`)\n }\n this.stats.send += data.byteLength\n if (this.simulateLatency) {\n setTimeout(() => {\n client.send(data)\n }, this.simulateLatency)\n } else {\n client.send(data)\n }\n } catch (e) {\n this.error('Error sending message:', e, message)\n }\n }\n\n async broadcast(message: object, clients: ClientType[] | false = false): Promise<void> {\n if (!clients) {\n clients = this.clients\n }\n let data = encode(message)\n if (this.allowCompression) {\n data = await compress(data)\n }\n for (let client of this.clients) {\n this.stats.send += data.byteLength\n if (this.simulateLatency) {\n setTimeout(() => {\n client.send(data)\n }, this.simulateLatency)\n } else {\n client.send(data)\n }\n }\n }\n\n async _sendFullState(name: string, client: ClientType): Promise<void> {\n await this._waitLoad(name)\n let excluded: any = '_'\n if (this.allowFastPatch) {\n excluded = fastPatchProperties\n }\n let doc = clonewo_(this.documents[name], excluded)\n limitPrecision(doc)\n let fdata: any = false\n if (this.allowFastPatch) {\n fdata = this._encodeFastChanges(name, false)\n }\n let fullState = {\n c: 'full',\n le: LITTLE_ENDIAN,\n t: Date.now(),\n n: name,\n doc: doc,\n fdata: fdata\n }\n this.send(client, fullState)\n }\n\n _encodeFastChanges(name: string, changesOnly = true): any {\n let doc = this.documents[name]\n if (!doc) { return false }\n let origin = this.documents[name].origin\n if (!origin) {\n origin = [0, 0, 0]\n this.documents[name].origin = origin\n }\n\n let entities = doc.entities\n let ids = Object.keys(entities)\n if (!entities) { return false }\n let count: Record<string, number> = {}\n let changed: any = {}\n let hasChanges: any = {}\n let dictionary: any = {}\n let encodedChanges: any = {}\n\n for (let key in fastPatchProperties) {\n if (changesOnly) {\n count[key] = 0\n changed[key] = {}\n hasChanges[key] = false\n } else {\n count[key] = ids.length\n changed[key] = {}\n hasChanges[key] = true\n }\n dictionary[key] = {}\n }\n\n // search for changes\n\n if (changesOnly) {\n for (let id in entities) {\n let e = entities[id]\n for (let key in fastPatchProperties) {\n if (e['__changed_' + key]) {\n changed[''+key][''+id] = true\n count[''+key] = parseInt(''+count[''+key]) + 1\n hasChanges[''+key] = true\n e['__changed_' + key] = false\n }\n }\n }\n } else {\n for (let id in entities) {\n for (let key in fastPatchProperties) {\n changed[''+key][''+id] = true\n }\n }\n }\n\n // create dictionaries\n\n let dictUID = 1\n for (let key in hasChanges) {\n if (hasChanges[key] && dictionaryProperties[key]) {\n for (let id in changed[key]) {\n let e = entities[id]\n let value = e[key]\n if (!dictionary[key][value]) {\n dictionary[key][value] = dictUID++\n }\n }\n }\n }\n\n this.log(\"--------------------------------------------------\")\n //this.log(\"changed\", changed)\n //this.log(\"count\", count)\n\n // create encoded changes\n //\n for (let key in hasChanges) {\n if (hasChanges[key]) {\n let size = parseInt(''+count[''+key])\n let encoded: any = {}\n if (dictionaryProperties[key]) {\n encoded.dict = dictionary[key]\n\n let pdata = new Uint8Array(size * 8)\n let offset = 0\n for (let id in changed[key]) {\n let e = entities[id]\n let nid = parseInt(id)\n encode_uint32(nid, pdata, offset)\n offset += 4\n let value = e[key]\n let did = parseInt(dictionary[key][value])\n encode_uint32(did, pdata, offset)\n offset += 4\n }\n encoded.pdata = pdata\n } else {\n\n let pdata: Uint8Array\n if (key == 'position') {\n pdata = new Uint8Array(size * 13)\n } else if (key == 'rotation') {\n pdata = new Uint8Array(size * 16)\n } else if (key == 'scale') {\n pdata = new Uint8Array(size * 16)\n } else {\n pdata = new Uint8Array(0)\n }\n\n let offset = 0\n for (let id in changed[key]) {\n let e = entities[id]\n let nid = parseInt(id)\n encode_uint32(nid, pdata, offset)\n offset += 4\n if (key == 'position') {\n encode_fp168(e.position[0] - origin[0], pdata, offset)\n offset += 3\n encode_fp168(e.position[1] - origin[1], pdata, offset)\n offset += 3\n encode_fp168(e.position[2] - origin[2], pdata, offset)\n offset += 3\n } else if (key == 'rotation') {\n encode_fp412(e.rotation[0], pdata, offset)\n offset += 2\n encode_fp412(e.rotation[1], pdata, offset)\n offset += 2\n encode_fp412(e.rotation[2], pdata, offset)\n offset += 2\n encode_fp412(e.rotation[3], pdata, offset)\n offset += 2\n } else if (key == 'scale') {\n encode_fp1616(e.scale[0], pdata, offset)\n offset += 4\n encode_fp1616(e.scale[1], pdata, offset)\n offset += 4\n encode_fp1616(e.scale[2], pdata, offset)\n offset += 4\n }\n }\n encoded.pdata = pdata\n }\n encodedChanges[key] = encoded\n }\n }\n\n return encodedChanges\n }\n\n _sendPatches(): void {\n let now = Date.now()\n\n for (let name in this._documentChanges) {\n let dc = this._documentChanges[name]\n this._documentChanges[name] = []\n let sus = this.clients.filter((client) => client.subscribed && client.subscribed[name])\n if (sus.length > 0) {\n if (dc && dc.length > 0) {\n let record = {\n c: 'patch',\n t: now, // server time\n u: this.update,\n n: name,\n doc: dc,\n }\n this.broadcast(record, sus)\n }\n }\n\n if (this.allowFastPatch) {\n if (sus.length > 0) {\n let t1 = Date.now()\n let changes = this._encodeFastChanges(name)\n let t2 = Date.now()\n let record = {\n c: 'fpatch',\n t: now, // server time\n u: this.update,\n n: name,\n fdata: changes\n }\n //this.broadcastRTC(record, sus)\n let t3 = Date.now()\n this.log(`_sendPatches: ${name} encode_changes: ${t2-t1}ms broadcast:${t3-t2}ms`)\n }\n }\n }\n }\n\n _onDocumentChange(name: string, op: any, target: any, path: any, value: any): void {\n this._documentChanges[name]?.push(opmsg(op, target, path, value))\n }\n\n propertyChange(name: string, id: string | number, property: string): void {\n let doc = this.documents[name]\n if (!doc) { return }\n let entities = doc.entities\n if (!entities) { return }\n let e = entities[id]\n if (!e) { return }\n e['__changed_'+property] = true\n //this.log('propertyChange', e)\n }\n\n\n /*= WEBRTC ===================================================================*/\n\n private _wrtc: any = null\n\n private async _loadWebRTC(): Promise<any> {\n if (!this._wrtc) {\n try {\n this._wrtc = await import('@roamhq/wrtc')\n } catch (error) {\n this.error('WebRTC module not available:', error)\n throw new Error('WebRTC functionality requires @roamhq/wrtc and platform-specific binary packages')\n }\n }\n return this._wrtc\n }\n\n async _processOffer(client: ClientType, data: any): Promise<void> {\n if (!this.allowWebRTC) {\n this.warn('WebRTC is disabled')\n return\n }\n\n const wrtc = await this._loadWebRTC()\n //this.log(\"RTC: Offer received\", data);\n const peerConnection = new (wrtc as any).RTCPeerConnection({\n iceServers: [\n { urls: 'stun:stun.l.google.com:19302' },\n { urls: 'stun:stun.cloudflare.com:3478' },\n { urls: 'stun:freestun.net:3478' },\n ],\n iceCandidatePoolSize: 10,\n })\n\n client.peerConnection = peerConnection\n\n peerConnection.onicecandidate = (event: any) => {\n if (event.candidate) {\n //this.log(\"RTC: ICE candidate generated\", event.candidate.candidate.substring(0, 50) + \"...\");\n this.send(client, {\n c: 'rtc-candidate',\n type: 'ice-candidate',\n candidate: event.candidate, // .toJSON()\n })\n } else {\n //this.log(\"RTC: ICE candidate gathering complete\");\n }\n }\n\n peerConnection.onconnectionstatechange = () => {\n //this.log(`RTC: Connection state changed: ${peerConnection.connectionState}`);\n if (peerConnection.connectionState === 'connected') {\n client.webRTCConnected = true\n this.log(`RTC: Connection established with client ${client.ID}`)\n } else if (\n peerConnection.connectionState === 'failed' ||\n peerConnection.connectionState === 'disconnected' ||\n peerConnection.connectionState === 'closed'\n ) {\n client.webRTCConnected = false\n this.log(`RTC: Connection failed or closed with client ${client.ID}`)\n }\n }\n\n peerConnection.onicegatheringstatechange = () => {\n //this.log(`RTC: ICE gathering state: ${peerConnection.iceGatheringState}`);\n }\n\n peerConnection.oniceconnectionstatechange = () => {\n //this.log(`RTC: ICE connection state: ${peerConnection.iceConnectionState}`);\n if (\n peerConnection.iceConnectionState === 'connected' ||\n peerConnection.iceConnectionState === 'completed'\n ) {\n //this.log(`RTC: ICE connection established with client ${client.ID}`);\n }\n }\n\n try {\n await peerConnection.setRemoteDescription(\n new (wrtc as any).RTCSessionDescription(data)\n )\n //this.log(\"RTC: Remote description set successfully\");\n\n client.dataChannel = peerConnection.createDataChannel('serverchannel', {\n ordered: true,\n maxRetransmits: 1,\n })\n\n client.dataChannel.onopen = () => {\n //this.log(`RTC: Data channel opened for client ${client.ID}`);\n // Try sending a test message\n try {\n const testData = { c: 'test', message: 'Hello WebRTC' }\n this.sendRTC(client, testData)\n } catch (e) {\n this.error(\n `RTC: Error sending test message to client ${client.ID}`,\n e\n )\n }\n }\n\n client.dataChannel.onclose = () => {\n this.log(`RTC: Data channel closed for client ${client.ID}`)\n }\n\n client.dataChannel.onerror = (error: Event) => {\n this.error(`RTC: Data channel error for client ${client.ID}:`, error)\n }\n\n client.dataChannel.onmessage = (event: MessageEvent) => {\n try {\n const data = decode(event.data)\n this.log(\n `RTC: Data channel message from client ${client.ID}:`,\n data\n )\n //this.onMessage(client, data);\n } catch (error) {\n this.error(\n `RTC: Error decoding message from client ${client.ID}:`,\n error\n )\n }\n }\n\n // Create and send answer\n const answer = await peerConnection.createAnswer()\n await peerConnection.setLocalDescription(answer)\n\n //this.log(`RTC: Sending answer to client ${client.ID}`);\n this.send(client, {\n c: 'rtc-answer',\n type: answer.type,\n sdp: answer.sdp,\n })\n } catch (error) {\n this.error(\n `RTC: Error processing offer from client ${client.ID}:`,\n error\n )\n }\n }\n\n async _processICECandidate(client: ClientType, data: any): Promise<void> {\n //this.log(`RTC: Processing ICE candidate from client ${client.ID}`);\n try {\n if (client.peerConnection && data.candidate) {\n await client.peerConnection.addIceCandidate(\n data.candidate\n //new wrtc.RTCIceCandidate(data.candidate)\n )\n //this.log(`RTC: ICE candidate added successfully for client ${client.ID}`);\n } else {\n //this.warn(`RTC: Cannot add ICE candidate for client ${client.ID} - peerConnection not ready or candidate missing`);\n }\n } catch (error) {\n this.error(`RTC: Error adding ICE candidate for client ${client.ID}`)\n }\n }\n\n _clientRTCOpen(client: ClientType): boolean {\n return client.dataChannel !== null && client.dataChannel !== undefined && client.dataChannel.readyState === 'open'\n }\n\n async sendRTC(client: ClientType, message: any): Promise<void> {\n let data = encode(message)\n if (this.allowCompression) {\n data = await compress(data)\n }\n this.stats.sendRTC += data.byteLength\n this.stats._sendRTCUpdate += data.byteLength\n\n let packages = this._splitRTCMessage(data)\n\n if (this.simulateLatency) {\n setTimeout(() => {\n if (this._clientRTCOpen(client)) {\n packages.forEach((p) => {\n client.dataChannel!.send(p)\n })\n }\n }, this.simulateLatency)\n } else {\n if (this._clientRTCOpen(client)) {\n packages.forEach((p) => {\n client.dataChannel!.send(p)\n })\n }\n }\n }\n\n async broadcastRTC(message: any, clients: ClientType[] = []): Promise<void> {\n if (clients.length == 0) {\n clients = this.clients\n }\n let t1 = Date.now()\n let data = encode(message)\n let dl = data.byteLength\n let t2 = Date.now()\n if (this.allowCompression) {\n data = await compress(data)\n }\n let t3 = Date.now()\n\n\n if (data.length > 16384) {\n this.log(`BroadcastRTC message ${dl} -> ${data.length} (${(100.0 * data.length / dl).toFixed()}%) encoding:${t2 - t1}ms compression:${t3 - t1}ms`)\n }\n\n let packages = this._splitRTCMessage(data)\n\n for (let client of this.clients) {\n this.stats.sendRTC += data.byteLength\n this.stats._sendRTCUpdate += data.byteLength\n if (this.simulateLatency) {\n setTimeout(() => {\n if (client.dataChannel && client.dataChannel.readyState === 'open') {\n packages.forEach((p) => {\n client?.dataChannel?.send(p)\n })\n }\n }, this.simulateLatency)\n } else {\n if (client.dataChannel && client.dataChannel.readyState === 'open') {\n packages.forEach((p) => {\n client?.dataChannel?.send(p)\n })\n }\n }\n }\n }\n\n _splitRTCMessage(data: Uint8Array): Uint8Array[] {\n let packages: Uint8Array[]\n if (data.byteLength > 65535) {\n const now = Date.now()\n this.warn(`RTC: Message too large: ${data.byteLength} bytes`)\n // Split the message into smaller packages\n packages = [];\n let offset = 0;\n let mid = this.update +'-'+ now\n let seq = 0\n\n // Create subsequent packages if needed\n while (offset < data.byteLength) {\n const remaining = data.byteLength - offset;\n const chunkSize = Math.min(remaining, MAX_PACKAGE_SIZE);\n const chunk = new Uint8Array(data.buffer, offset, chunkSize);\n let cmessage = {\n c: 'chunk',\n t: now,\n mid: mid,\n seq: seq,\n ofs: offset,\n chs: chunkSize,\n ts: data.byteLength,\n data: chunk,\n last: remaining <= MAX_PACKAGE_SIZE,\n }\n packages.push(encode(cmessage))\n offset += chunkSize;\n seq++;\n }\n\n this.log(`RTC: Large message split into ${packages.length} packages`);\n } else {\n packages = [data]\n this.log(`RTC: Message - ${data.byteLength} bytes`)\n }\n return packages\n }\n\n\n /*= DATABASE =================================================================*/\n // properties (of the documents) that starts with __ are not saved to the database.\n // __properties are restored on hydration. (for example __physicsBody or __bigObject)\n\n getUID(): number {\n this.documents['_server'].nextUID++\n return this.documents['_server'].nextUID\n }\n\n async _initDB(): Promise<void> {\n await this._connectDB()\n await this._loadDocument('_server')\n if (!this.documents['_server']) {\n this._initServerDocument()\n }\n }\n\n async _connectDB(): Promise<void> {\n this.mongoClient = new MongoClient(this.MongoUrl)\n try {\n await this.mongoClient.connect()\n this.log('Connected to MongoDB')\n const db = this.mongoClient.db(this.database)\n this.DB = db\n } catch (error) {\n this.error('Error connecting to MongoDB:', error)\n this.mongoClient = null\n }\n }\n\n async _loadDocument(name: string): Promise<void> {\n this.log(`Loading document '${name}' from MongoDB`)\n if (this.DB) {\n try {\n const doc = await this.DB.collection(this.collection).findOne({\n name: name,\n })\n if (doc) {\n delete (doc as any)._id\n this.documents[name] = doc\n }\n } catch (error) {\n this.error('Error loading document from MongoDB:', error)\n }\n } else {\n this.warn('MongoDB client not initialized. Document not loaded.')\n }\n }\n\n async _saveDocument(name: string): Promise<void> {\n if (this.DB) {\n try {\n const doc = this.documents[name]\n let newdoc = clonewo_(doc, '__')\n this.log(`Saving document '${name}' to MongoDB`)\n await this.DB.collection(this.collection).updateOne(\n { name: name },\n { $set: newdoc },\n { upsert: true }\n )\n this.log('Document saved to MongoDB')\n } catch (error) {\n this.error('Error saving document to MongoDB:', error)\n }\n } else {\n this.warn('MongoDB client not initialized. Document not saved.')\n }\n }\n\n async _saveAllDocuments(): Promise<void> {\n if (!this.allowSave) {\n return\n }\n for (let name in this.documents) {\n await this._saveDocument(name)\n }\n }\n\n _initServerDocument(): void {\n this.documents['_server'] = {\n nextUID: 100,\n }\n }\n\n /*= EXIT ===================================================================*/\n\n _exitSignal(signal: string): void {\n if (!this._exited) {\n this.log('\\nEXIT: Caught interrupt signal ' + signal)\n this._exited = true\n clearInterval(this._loopiv)\n this.onBeforeExit()\n this.broadcast({ server: 'Going down' })\n this._saveAllDocuments()\n this._wss!.close()\n setTimeout(() => process.exit(0), 1000)\n }\n }\n\n // To be redefined. Called BEFORE program exit, and saving all documents\n onBeforeExit(): void {}\n}\n","import { Packr } from 'msgpackr';\nimport { FLOAT32_OPTIONS } from 'msgpackr';\nconst { ALWAYS } = FLOAT32_OPTIONS;\n\nlet packr = new Packr({\n useFloat32: ALWAYS\n});\n\nexport function encode(obj: any): Uint8Array {\n return packr.pack(obj)\n}\n\nexport function decode(data: Uint8Array): any {\n return packr.unpack(data)\n}\n\ntype ReactiveCallback = (name: string, operation: string, target: any, path: string, value: any) => void;\n\nexport function reactive(name: string, object: any, callback: ReactiveCallback, path: string = '', excludedProperties: Record<string, boolean> | false = false): any {\n if (object === null || typeof object !== 'object') {\n //console.log('--- Type not object', typeof object)\n return object\n }\n\n function isReactive(p: string): boolean {\n let r = true\n if (p.startsWith('_')) {\n r = false\n }\n if (excludedProperties) {\n if (excludedProperties[p]) {\n r = false\n }\n }\n if (path == '/entities') {\n r = false\n }\n return r\n }\n\n for (const property in object) {\n if (isReactive(property)) {\n //console.log(`path '${path}', prop '${property}' is reactive`)\n object[property] = reactive(\n name,\n object[property],\n callback,\n path + '/' + property,\n excludedProperties\n )\n } else {\n //console.log(`--- path '${path}', property '${property}' is NOT reactive`)\n }\n }\n //console.log(`path '${path}' is reactive`)\n return new Proxy(object, {\n get(target: any, property: string | symbol, receiver: any): any { // ...arguments\n return Reflect.get(target, property, receiver)\n },\n set(target: any, property: string | symbol, value: any): boolean {\n let newvalue: any\n let pn = path + '/' + String(property)\n if (isReactive(String(property))) {\n newvalue = reactive(name, value, callback, pn, excludedProperties)\n callback(name, 'replace', target, pn, newvalue)\n } else {\n newvalue = value\n }\n return Reflect.set(target, property, newvalue)\n },\n deleteProperty(target: any, property: string | symbol): boolean {\n let pn = path + '/' + String(property)\n if (isReactive(String(property))) {\n callback(name, 'remove', target, pn, null)\n }\n delete target[property]\n return true\n },\n })\n\n}\n\nexport function deepGet(obj: any, path: string): any {\n //path = path.replace(/^\\/+/, '')\n let paths = ('' + path).split('/').filter((p) => p)\n let len = paths.length\n for (let i = 0; i < len; i++) {\n if (obj[paths[i]!] == undefined) {\n return undefined\n } else {\n obj = obj[paths[i]!]\n }\n }\n return obj\n}\n\nexport function deepSet(obj: any, path: string, value: any): void {\n //path = path.replace(/^\\/+/, '')\n let paths = ('' + path).split('/').filter((p) => p)\n let len = paths.length\n let i: number\n for (i = 0; i < len - 1; i++) {\n obj = obj[paths[i]!]\n }\n obj[paths[i]!] = value\n}\n\n// recursive clone oject, without properties that starts with _ (or __)\n\nexport function clonewo_(obj: any, excludeStart: string | Record<string, boolean> = '_'): any {\n if (obj === null || typeof obj !== 'object') {\n return obj\n }\n\n function isExcluded(key: string): boolean {\n let e = false\n if (typeof (excludeStart) == 'string' && key.startsWith(excludeStart)) {\n e = true\n } else if (typeof(excludeStart) == 'object') {\n if (excludeStart[key] || key.startsWith('_')) {\n e = true\n }\n }\n return e\n }\n\n if (obj instanceof Map) {\n const mapClone = new Map()\n Array.from(obj.entries()).forEach(([key, value]) => {\n mapClone.set(clonewo_(key, excludeStart), clonewo_(value, excludeStart))\n })\n return mapClone\n }\n\n let clone: any\n if (Array.isArray(obj)) {\n clone = []\n for (let i = 0; i < obj.length; i++) {\n clone[i] = clonewo_(obj[i], excludeStart)\n }\n } else {\n clone = {} as Record<string, any>\n for (let key in obj) {\n if (obj.hasOwnProperty(key) && !isExcluded(key)) {\n if (typeof obj[key] === 'object') {\n clone[key] = clonewo_(obj[key], excludeStart)\n } else {\n clone[key] = obj[key]\n }\n }\n }\n }\n\n return clone\n}\n\nexport function limitPrecision(obj: any): any {\n if (Array.isArray(obj)) {\n return obj.map(limitPrecision)\n } else if (obj !== null && typeof obj === 'object') {\n const result: Record<string, any> = {}\n for (const key in obj) {\n result[key] = limitPrecision(obj[key])\n }\n return result\n } else if (typeof obj === 'number') {\n if (Number.isInteger(obj)) {\n return obj\n } else {\n // Limit to max 3 decimal digits, not fixed\n return parseFloat(obj.toFixed(3))\n }\n } else {\n return obj\n }\n}\n\nexport function msgop(op: any): any {\n let nop: any = {}\n if (!op.o) {\n nop.op = 'replace'\n } else {\n nop.op = ({\n a: 'add',\n r: 'remove',\n d: 'delete',\n t: 'test',\n } as Record<string, string>)[op.o]\n }\n nop.path = op.p\n nop.value = op.v\n return nop\n}\n\nexport function opmsg(op: string, target: any, path: string, value: any): any {\n let c: any = { p: path, v: value }\n if (op != 'replace') {\n c.o = ({\n add: 'a',\n remove: 'r',\n delete: 'd',\n test: 't',\n } as Record<string, string>)[op]\n }\n return c\n}\n\n// a function that converts an int to a hexa string\n// (8 characters long)\nexport function int2hex(int: number): string {\n return int.toString(16)\n}\n\n// a function that converts a hexa string to an int\nexport function hex2int(str: string): bigint {\n if (str.length % 2) {\n str = '0' + str\n }\n return BigInt('0x' + str)\n}\n\n// - Fixed point encoding/decoding functions\n\n// 32-bit unsigned integer encoding\nexport function encode_uint32(uint: number, byteArray?: Uint8Array, offset: number = 0): Uint8Array {\n if (!byteArray) {\n byteArray = new Uint8Array(4)\n }\n let p = offset + 3\n byteArray[p--] = uint & 0xff\n uint >>= 8\n byteArray[p--] = uint & 0xff\n uint >>= 8\n byteArray[p--] = uint & 0xff\n uint >>= 8\n byteArray[p] = uint\n return byteArray\n}\n// 32-bit unsigned integer decoding\nexport function decode_uint32(byteArray: Uint8Array, offset: number = 0): number {\n let p = offset\n return (\n ((byteArray[p++]! & 0x7f) << 24) |\n (byteArray[p++]! << 16) |\n (byteArray[p++]! << 8) |\n byteArray[p]!\n )\n}\n\n// 24-bit unsigned integer encoding\nexport function encode_uint24(uint: number, byteArray?: Uint8Array, offset: number = 0): Uint8Array {\n if (!byteArray) {\n byteArray = new Uint8Array(3)\n }\n let p = offset + 2\n byteArray[p--] = uint & 0xff\n uint >>= 8\n byteArray[p--] = uint & 0xff\n uint >>= 8\n byteArray[p] = uint\n return byteArray\n}\n\n// 24-bit unsigned integer decoding\nexport function decode_uint24(byteArray: Uint8Array, offset: number = 0): number {\n let p = offset\n return (\n (byteArray[p++]! << 16) |\n (byteArray[p++]! << 8) |\n byteArray[p]!\n )\n}\n\n// 16-bit unsigned integer encoding\nexport function encode_uint16(uint: number, byteArray?: Uint8Array, offset: number = 0): Uint8Array {\n if (!byteArray) {\n byteArray = new Uint8Array(2)\n }\n let p = offset + 1\n byteArray[p--] = uint & 0xff\n uint >>= 8\n byteArray[p] = uint\n return byteArray\n}\n\n// 16-bit unsigned integer decoding\nexport function decode_uint16(byteArray: Uint8Array, offset: number = 0): number {\n let p = offset\n return (byteArray[p++]! << 8) | byteArray[p]!\n}\n\n// 24.8 bit ====================================================================\n\n// 24.8-bit fixed point encoding\nexport function encode_fp248(float: number, byteArray?: Uint8Array, offset: number = 0): void {\n const fp = Math.round(Math.abs(float) * 256)\n encode_uint32(fp, byteArray, offset)\n if (float < 0 && byteArray) {\n byteArray[offset]! |= 0x80\n }\n}\n\n// 24.8-bit fixed point decoding\nexport function decode_fp248(byteArray: Uint8Array, offset: number = 0): number {\n const divider = (byteArray[offset]! & 0x80) === 0x80 ? -256 : 256\n byteArray[offset]! &= 0x7f\n const fp = decode_uint32(byteArray, offset)\n return fp / divider\n}\n\n// 16.8 bit ====================================================================\n\n// 16.8-bit fixed point encoding (3 bytes)\nexport function encode_fp168(float: number, byteArray?: Uint8Array, offset: number = 0): void {\n const fp = Math.round(Math.abs(float) * 256)\n encode_uint24(fp, byteArray, offset)\n if (float < 0 && byteArray) {\n byteArray[offset]! |= 0x80\n }\n}\n\n// 16.8-bit fixed point decoding (3 bytes)\nexport function decode_fp168(byteArray: Uint8Array, offset: number = 0): number {\n const divider = (byteArray[offset]! & 0x80) === 0x80 ? -256 : 256\n byteArray[offset]! &= 0x7f\n const fp = decode_uint24(byteArray, offset)\n return fp / divider\n}\n\n// 16.16 bit ===================================================================\n\n// 16.16-bit fixed point encoding\nexport function encode_fp1616(float: number, byteArray?: Uint8Array, offset: number = 0): void {\n const fp = Math.round(Math.abs(float) * 65536)\n encode_uint32(fp, byteArray, offset)\n if (float < 0 && byteArray) {\n byteArray[offset]! |= 0x80\n }\n}\n\n// 16.16-bit fixed point decoding\nexport function decode_fp1616(byteArray: Uint8Array, offset: number = 0): number {\n const divider = (byteArray[offset]! & 0x80) === 0x80 ? -65536 : 65536\n byteArray[offset]! &= 0x7f\n const fp = decode_uint32(byteArray, offset)\n return fp / divider\n}\n\n// 8.8 bit =====================================================================\n\n// 8.8-bit fixed point encoding\nexport function encode_fp88(float: number, byteArray?: Uint8Array, offset: number = 0): void {\n const fp = Math.round(Math.abs(float) * 256)\n encode_uint16(fp, byteArray, offset)\n if (float < 0 && byteArray) {\n byteArray[offset]! |= 0x80\n }\n}\n\n// 8.8-bit fixed point decoding\nexport function decode_fp88(byteArray: Uint8Array, offset: number = 0): number {\n const divider = (byteArray[offset]! & 0x80) === 0x80 ? -256 : 256\n byteArray[offset]! &= 0x7f\n const fp = decode_uint16(byteArray, offset)\n return fp / divider\n}\n\n// 4.12 bit ====================================================================\n\n// 4.12-bit fixed point encoding\nexport function encode_fp412(float: number, byteArray?: Uint8Array, offset: number = 0): void {\n const fp = Math.round(Math.abs(float) * 4096)\n encode_uint16(fp, byteArray, offset)\n if (float < 0 && byteArray) {\n byteArray[offset]! |= 0x80\n }\n}\n\n// 4.12-bit fixed point decoding\nexport function decode_fp412(byteArray: Uint8Array, offset: number = 0): number {\n const divider = (byteArray[offset]! & 0x80) === 0x80 ? -4096 : 4096\n byteArray[offset]! &= 0x7f\n const fp = decode_uint16(byteArray, offset)\n return fp / divider\n}\n\n// 1.7 bit =====================================================================\n\n// 1.7-bit fixed point encoding\nexport function encode_fp17(float: number, byteArray: Uint8Array, offset: number = 0): void {\n const fp = Math.round(Math.abs(float) * 128)\n byteArray[offset] = fp\n if (float < 0) {\n byteArray[offset] |= 0x80\n }\n}\n\n// 1.7-bit fixed point decoding\nexport function decode_fp17(byteArray: Uint8Array, offset: number = 0): number {\n const divider = (byteArray[offset]! & 0x80) === 0x80 ? -128.0 : 128.0\n byteArray[offset]! &= 0x7f\n return byteArray[offset]! / divider\n}\n","import { promisify } from 'util'\nimport { gzip, gunzip, constants } from 'zlib'\n\nconst MIN_COMPRESSED_BUFFER_SIZE = 256\nconst MAX_COMPRESSED_BUFFER_SIZE = 999999\n\nconst lib_compress = promisify(gzip)\nconst lib_decompress = promisify(gunzip)\n\nexport async function compress(buffer:Uint8Array<ArrayBufferLike>) {\n if (buffer.byteLength <= MIN_COMPRESSED_BUFFER_SIZE || buffer.byteLength >= MAX_COMPRESSED_BUFFER_SIZE) return buffer\n try {\n let t1 = Date.now()\n let cbytes = await lib_compress(buffer, {\n level: constants.Z_BEST_SPEED\n })\n let t2 = Date.now()\n let cbuffer = Buffer.from(cbytes)\n let t3 = Date.now()\n\n //console.log(`Node compression ${buffer.byteLength} -> ${cbuffer.byteLength}, time: ${t2 - t1}ms`)\n\n return cbuffer\n } catch (error) {\n console.error('Error compressing buffer:', error)\n return buffer\n }\n}\n\nexport async function decompress(buffer:Uint8Array<ArrayBufferLike>) {\n try {\n let cbytes = await lib_decompress(buffer)\n let cbuffer = Buffer.from(cbytes)\n return cbuffer\n } catch (error) {\n console.error('Error decompressing buffer:', error)\n return buffer\n }\n}\n"],"mappings":"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","names":["require_lib","key","data"]}
|
|
1
|
+
{"version":3,"sources":["../node_modules/@roamhq/wrtc/lib/binding.js","../node_modules/@roamhq/wrtc/lib/eventtarget.js","../node_modules/@roamhq/wrtc/lib/mediadevices.js","../node_modules/webidl-conversions/lib/index.js","../node_modules/domexception/lib/utils.js","../node_modules/domexception/lib/legacy-error-codes.json","../node_modules/domexception/lib/DOMException-impl.js","../node_modules/domexception/lib/DOMException.js","../node_modules/domexception/webidl2js-wrapper.js","../node_modules/domexception/index.js","../node_modules/@roamhq/wrtc/lib/datachannelevent.js","../node_modules/@roamhq/wrtc/lib/icecandidate.js","../node_modules/@roamhq/wrtc/lib/rtcpeerconnectioniceevent.js","../node_modules/@roamhq/wrtc/lib/rtcpeerconnectioniceerrorevent.js","../node_modules/@roamhq/wrtc/lib/sessiondescription.js","../node_modules/@roamhq/wrtc/lib/peerconnection.js","../node_modules/@roamhq/wrtc/lib/index.js","../src/server.ts","../src/utils.ts","../src/compress-node.ts"],"sourcesContent":["\"use strict\";\n\nconst os = require(\"os\");\nconst triple = `${os.platform()}-${os.arch()}`;\nconst pathsToTry = [\n `../build-${triple}/wrtc.node`,\n `../build-${triple}/Debug/wrtc.node`,\n `../build-${triple}/Release/wrtc.node`,\n `@roamhq/wrtc-${triple}`,\n // For installations that can't resolve node_modules directly, like AWS Lambda\n `./node_modules/@roamhq/wrtc-${triple}`,\n `./node_modules/@roamhq/wrtc-${triple}/wrtc.node`,\n];\n\nlet succeeded = false;\nfor (const path of pathsToTry) {\n try {\n module.exports = require(path);\n succeeded = true;\n break;\n } catch (error) {\n // Ignore any errors, just continue\n void error;\n }\n}\n\nif (!succeeded) {\n throw new Error(\n `Could not find wrtc binary on any of the paths: ${pathsToTry}`,\n );\n}\n","\"use strict\";\n\n/**\n * @author mrdoob / http://mrdoob.com/\n * @author Jesús Leganés Combarro \"Piranna\" <piranna@gmail.com>\n */\n\nfunction EventTarget() {\n this._listeners = {};\n}\n\nEventTarget.prototype.addEventListener = function addEventListener(\n type,\n listener,\n) {\n const listeners = (this._listeners = this._listeners || {});\n\n if (!listeners[type]) {\n listeners[type] = new Set();\n }\n\n listeners[type].add(listener);\n};\n\nEventTarget.prototype.dispatchEvent = function dispatchEvent(event) {\n let listeners = (this._listeners = this._listeners || {});\n\n process.nextTick(() => {\n listeners = new Set(listeners[event.type] || []);\n\n const dummyListener = this[\"on\" + event.type];\n if (typeof dummyListener === \"function\") {\n listeners.add(dummyListener);\n }\n\n listeners.forEach((listener) => {\n if (\n typeof listener === \"object\" &&\n typeof listener.handleEvent === \"function\"\n ) {\n listener.handleEvent(event);\n } else {\n listener.call(this, event);\n }\n });\n });\n};\n\nEventTarget.prototype.removeEventListener = function removeEventListener(\n type,\n listener,\n) {\n const listeners = (this._listeners = this._listeners || {});\n if (listeners[type]) {\n listeners[type].delete(listener);\n }\n};\n\nmodule.exports = EventTarget;\n","\"use strict\";\n\nvar inherits = require(\"util\").inherits;\n\nconst { getDisplayMedia, getUserMedia } = require(\"./binding\");\n\nvar EventTarget = require(\"./eventtarget\");\n\nfunction MediaDevices() {}\n\ninherits(MediaDevices, EventTarget);\n\nMediaDevices.prototype.enumerateDevices = function enumerateDevices() {\n throw new Error(\n \"Not yet implemented; file a feature request against node-webrtc\",\n );\n};\n\nMediaDevices.prototype.getSupportedConstraints =\n function getSupportedConstraints() {\n return {\n width: true,\n height: true,\n };\n };\n\nMediaDevices.prototype.getDisplayMedia = getDisplayMedia;\nMediaDevices.prototype.getUserMedia = getUserMedia;\n\nmodule.exports = MediaDevices;\n","\"use strict\";\n\nfunction makeException(ErrorType, message, options) {\n if (options.globals) {\n ErrorType = options.globals[ErrorType.name];\n }\n return new ErrorType(`${options.context ? options.context : \"Value\"} ${message}.`);\n}\n\nfunction toNumber(value, options) {\n if (typeof value === \"bigint\") {\n throw makeException(TypeError, \"is a BigInt which cannot be converted to a number\", options);\n }\n if (!options.globals) {\n return Number(value);\n }\n return options.globals.Number(value);\n}\n\n// Round x to the nearest integer, choosing the even integer if it lies halfway between two.\nfunction evenRound(x) {\n // There are four cases for numbers with fractional part being .5:\n //\n // case | x | floor(x) | round(x) | expected | x <> 0 | x % 1 | x & 1 | example\n // 1 | 2n + 0.5 | 2n | 2n + 1 | 2n | > | 0.5 | 0 | 0.5 -> 0\n // 2 | 2n + 1.5 | 2n + 1 | 2n + 2 | 2n + 2 | > | 0.5 | 1 | 1.5 -> 2\n // 3 | -2n - 0.5 | -2n - 1 | -2n | -2n | < | -0.5 | 0 | -0.5 -> 0\n // 4 | -2n - 1.5 | -2n - 2 | -2n - 1 | -2n - 2 | < | -0.5 | 1 | -1.5 -> -2\n // (where n is a non-negative integer)\n //\n // Branch here for cases 1 and 4\n if ((x > 0 && (x % 1) === +0.5 && (x & 1) === 0) ||\n (x < 0 && (x % 1) === -0.5 && (x & 1) === 1)) {\n return censorNegativeZero(Math.floor(x));\n }\n\n return censorNegativeZero(Math.round(x));\n}\n\nfunction integerPart(n) {\n return censorNegativeZero(Math.trunc(n));\n}\n\nfunction sign(x) {\n return x < 0 ? -1 : 1;\n}\n\nfunction modulo(x, y) {\n // https://tc39.github.io/ecma262/#eqn-modulo\n // Note that http://stackoverflow.com/a/4467559/3191 does NOT work for large modulos\n const signMightNotMatch = x % y;\n if (sign(y) !== sign(signMightNotMatch)) {\n return signMightNotMatch + y;\n }\n return signMightNotMatch;\n}\n\nfunction censorNegativeZero(x) {\n return x === 0 ? 0 : x;\n}\n\nfunction createIntegerConversion(bitLength, { unsigned }) {\n let lowerBound, upperBound;\n if (unsigned) {\n lowerBound = 0;\n upperBound = 2 ** bitLength - 1;\n } else {\n lowerBound = -(2 ** (bitLength - 1));\n upperBound = 2 ** (bitLength - 1) - 1;\n }\n\n const twoToTheBitLength = 2 ** bitLength;\n const twoToOneLessThanTheBitLength = 2 ** (bitLength - 1);\n\n return (value, options = {}) => {\n let x = toNumber(value, options);\n x = censorNegativeZero(x);\n\n if (options.enforceRange) {\n if (!Number.isFinite(x)) {\n throw makeException(TypeError, \"is not a finite number\", options);\n }\n\n x = integerPart(x);\n\n if (x < lowerBound || x > upperBound) {\n throw makeException(\n TypeError,\n `is outside the accepted range of ${lowerBound} to ${upperBound}, inclusive`,\n options\n );\n }\n\n return x;\n }\n\n if (!Number.isNaN(x) && options.clamp) {\n x = Math.min(Math.max(x, lowerBound), upperBound);\n x = evenRound(x);\n return x;\n }\n\n if (!Number.isFinite(x) || x === 0) {\n return 0;\n }\n x = integerPart(x);\n\n // Math.pow(2, 64) is not accurately representable in JavaScript, so try to avoid these per-spec operations if\n // possible. Hopefully it's an optimization for the non-64-bitLength cases too.\n if (x >= lowerBound && x <= upperBound) {\n return x;\n }\n\n // These will not work great for bitLength of 64, but oh well. See the README for more details.\n x = modulo(x, twoToTheBitLength);\n if (!unsigned && x >= twoToOneLessThanTheBitLength) {\n return x - twoToTheBitLength;\n }\n return x;\n };\n}\n\nfunction createLongLongConversion(bitLength, { unsigned }) {\n const upperBound = Number.MAX_SAFE_INTEGER;\n const lowerBound = unsigned ? 0 : Number.MIN_SAFE_INTEGER;\n const asBigIntN = unsigned ? BigInt.asUintN : BigInt.asIntN;\n\n return (value, options = {}) => {\n let x = toNumber(value, options);\n x = censorNegativeZero(x);\n\n if (options.enforceRange) {\n if (!Number.isFinite(x)) {\n throw makeException(TypeError, \"is not a finite number\", options);\n }\n\n x = integerPart(x);\n\n if (x < lowerBound || x > upperBound) {\n throw makeException(\n TypeError,\n `is outside the accepted range of ${lowerBound} to ${upperBound}, inclusive`,\n options\n );\n }\n\n return x;\n }\n\n if (!Number.isNaN(x) && options.clamp) {\n x = Math.min(Math.max(x, lowerBound), upperBound);\n x = evenRound(x);\n return x;\n }\n\n if (!Number.isFinite(x) || x === 0) {\n return 0;\n }\n\n let xBigInt = BigInt(integerPart(x));\n xBigInt = asBigIntN(bitLength, xBigInt);\n return Number(xBigInt);\n };\n}\n\nexports.any = value => {\n return value;\n};\n\nexports.undefined = () => {\n return undefined;\n};\n\nexports.boolean = value => {\n return Boolean(value);\n};\n\nexports.byte = createIntegerConversion(8, { unsigned: false });\nexports.octet = createIntegerConversion(8, { unsigned: true });\n\nexports.short = createIntegerConversion(16, { unsigned: false });\nexports[\"unsigned short\"] = createIntegerConversion(16, { unsigned: true });\n\nexports.long = createIntegerConversion(32, { unsigned: false });\nexports[\"unsigned long\"] = createIntegerConversion(32, { unsigned: true });\n\nexports[\"long long\"] = createLongLongConversion(64, { unsigned: false });\nexports[\"unsigned long long\"] = createLongLongConversion(64, { unsigned: true });\n\nexports.double = (value, options = {}) => {\n const x = toNumber(value, options);\n\n if (!Number.isFinite(x)) {\n throw makeException(TypeError, \"is not a finite floating-point value\", options);\n }\n\n return x;\n};\n\nexports[\"unrestricted double\"] = (value, options = {}) => {\n const x = toNumber(value, options);\n\n return x;\n};\n\nexports.float = (value, options = {}) => {\n const x = toNumber(value, options);\n\n if (!Number.isFinite(x)) {\n throw makeException(TypeError, \"is not a finite floating-point value\", options);\n }\n\n if (Object.is(x, -0)) {\n return x;\n }\n\n const y = Math.fround(x);\n\n if (!Number.isFinite(y)) {\n throw makeException(TypeError, \"is outside the range of a single-precision floating-point value\", options);\n }\n\n return y;\n};\n\nexports[\"unrestricted float\"] = (value, options = {}) => {\n const x = toNumber(value, options);\n\n if (isNaN(x)) {\n return x;\n }\n\n if (Object.is(x, -0)) {\n return x;\n }\n\n return Math.fround(x);\n};\n\nexports.DOMString = (value, options = {}) => {\n if (options.treatNullAsEmptyString && value === null) {\n return \"\";\n }\n\n if (typeof value === \"symbol\") {\n throw makeException(TypeError, \"is a symbol, which cannot be converted to a string\", options);\n }\n\n const StringCtor = options.globals ? options.globals.String : String;\n return StringCtor(value);\n};\n\nexports.ByteString = (value, options = {}) => {\n const x = exports.DOMString(value, options);\n let c;\n for (let i = 0; (c = x.codePointAt(i)) !== undefined; ++i) {\n if (c > 255) {\n throw makeException(TypeError, \"is not a valid ByteString\", options);\n }\n }\n\n return x;\n};\n\nexports.USVString = (value, options = {}) => {\n const S = exports.DOMString(value, options);\n const n = S.length;\n const U = [];\n for (let i = 0; i < n; ++i) {\n const c = S.charCodeAt(i);\n if (c < 0xD800 || c > 0xDFFF) {\n U.push(String.fromCodePoint(c));\n } else if (0xDC00 <= c && c <= 0xDFFF) {\n U.push(String.fromCodePoint(0xFFFD));\n } else if (i === n - 1) {\n U.push(String.fromCodePoint(0xFFFD));\n } else {\n const d = S.charCodeAt(i + 1);\n if (0xDC00 <= d && d <= 0xDFFF) {\n const a = c & 0x3FF;\n const b = d & 0x3FF;\n U.push(String.fromCodePoint((2 << 15) + ((2 << 9) * a) + b));\n ++i;\n } else {\n U.push(String.fromCodePoint(0xFFFD));\n }\n }\n }\n\n return U.join(\"\");\n};\n\nexports.object = (value, options = {}) => {\n if (value === null || (typeof value !== \"object\" && typeof value !== \"function\")) {\n throw makeException(TypeError, \"is not an object\", options);\n }\n\n return value;\n};\n\nconst abByteLengthGetter =\n Object.getOwnPropertyDescriptor(ArrayBuffer.prototype, \"byteLength\").get;\nconst sabByteLengthGetter =\n typeof SharedArrayBuffer === \"function\" ?\n Object.getOwnPropertyDescriptor(SharedArrayBuffer.prototype, \"byteLength\").get :\n null;\n\nfunction isNonSharedArrayBuffer(value) {\n try {\n // This will throw on SharedArrayBuffers, but not detached ArrayBuffers.\n // (The spec says it should throw, but the spec conflicts with implementations: https://github.com/tc39/ecma262/issues/678)\n abByteLengthGetter.call(value);\n\n return true;\n } catch {\n return false;\n }\n}\n\nfunction isSharedArrayBuffer(value) {\n try {\n sabByteLengthGetter.call(value);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction isArrayBufferDetached(value) {\n try {\n // eslint-disable-next-line no-new\n new Uint8Array(value);\n return false;\n } catch {\n return true;\n }\n}\n\nexports.ArrayBuffer = (value, options = {}) => {\n if (!isNonSharedArrayBuffer(value)) {\n if (options.allowShared && !isSharedArrayBuffer(value)) {\n throw makeException(TypeError, \"is not an ArrayBuffer or SharedArrayBuffer\", options);\n }\n throw makeException(TypeError, \"is not an ArrayBuffer\", options);\n }\n if (isArrayBufferDetached(value)) {\n throw makeException(TypeError, \"is a detached ArrayBuffer\", options);\n }\n\n return value;\n};\n\nconst dvByteLengthGetter =\n Object.getOwnPropertyDescriptor(DataView.prototype, \"byteLength\").get;\nexports.DataView = (value, options = {}) => {\n try {\n dvByteLengthGetter.call(value);\n } catch (e) {\n throw makeException(TypeError, \"is not a DataView\", options);\n }\n\n if (!options.allowShared && isSharedArrayBuffer(value.buffer)) {\n throw makeException(TypeError, \"is backed by a SharedArrayBuffer, which is not allowed\", options);\n }\n if (isArrayBufferDetached(value.buffer)) {\n throw makeException(TypeError, \"is backed by a detached ArrayBuffer\", options);\n }\n\n return value;\n};\n\n// Returns the unforgeable `TypedArray` constructor name or `undefined`,\n// if the `this` value isn't a valid `TypedArray` object.\n//\n// https://tc39.es/ecma262/#sec-get-%typedarray%.prototype-@@tostringtag\nconst typedArrayNameGetter = Object.getOwnPropertyDescriptor(\n Object.getPrototypeOf(Uint8Array).prototype,\n Symbol.toStringTag\n).get;\n[\n Int8Array,\n Int16Array,\n Int32Array,\n Uint8Array,\n Uint16Array,\n Uint32Array,\n Uint8ClampedArray,\n Float32Array,\n Float64Array\n].forEach(func => {\n const { name } = func;\n const article = /^[AEIOU]/u.test(name) ? \"an\" : \"a\";\n exports[name] = (value, options = {}) => {\n if (!ArrayBuffer.isView(value) || typedArrayNameGetter.call(value) !== name) {\n throw makeException(TypeError, `is not ${article} ${name} object`, options);\n }\n if (!options.allowShared && isSharedArrayBuffer(value.buffer)) {\n throw makeException(TypeError, \"is a view on a SharedArrayBuffer, which is not allowed\", options);\n }\n if (isArrayBufferDetached(value.buffer)) {\n throw makeException(TypeError, \"is a view on a detached ArrayBuffer\", options);\n }\n\n return value;\n };\n});\n\n// Common definitions\n\nexports.ArrayBufferView = (value, options = {}) => {\n if (!ArrayBuffer.isView(value)) {\n throw makeException(TypeError, \"is not a view on an ArrayBuffer or SharedArrayBuffer\", options);\n }\n\n if (!options.allowShared && isSharedArrayBuffer(value.buffer)) {\n throw makeException(TypeError, \"is a view on a SharedArrayBuffer, which is not allowed\", options);\n }\n\n if (isArrayBufferDetached(value.buffer)) {\n throw makeException(TypeError, \"is a view on a detached ArrayBuffer\", options);\n }\n return value;\n};\n\nexports.BufferSource = (value, options = {}) => {\n if (ArrayBuffer.isView(value)) {\n if (!options.allowShared && isSharedArrayBuffer(value.buffer)) {\n throw makeException(TypeError, \"is a view on a SharedArrayBuffer, which is not allowed\", options);\n }\n\n if (isArrayBufferDetached(value.buffer)) {\n throw makeException(TypeError, \"is a view on a detached ArrayBuffer\", options);\n }\n return value;\n }\n\n if (!options.allowShared && !isNonSharedArrayBuffer(value)) {\n throw makeException(TypeError, \"is not an ArrayBuffer or a view on one\", options);\n }\n if (options.allowShared && !isSharedArrayBuffer(value) && !isNonSharedArrayBuffer(value)) {\n throw makeException(TypeError, \"is not an ArrayBuffer, SharedArrayBuffer, or a view on one\", options);\n }\n if (isArrayBufferDetached(value)) {\n throw makeException(TypeError, \"is a detached ArrayBuffer\", options);\n }\n\n return value;\n};\n\nexports.DOMTimeStamp = exports[\"unsigned long long\"];\n","\"use strict\";\n\n// Returns \"Type(value) is Object\" in ES terminology.\nfunction isObject(value) {\n return (typeof value === \"object\" && value !== null) || typeof value === \"function\";\n}\n\nconst hasOwn = Function.prototype.call.bind(Object.prototype.hasOwnProperty);\n\n// Like `Object.assign`, but using `[[GetOwnProperty]]` and `[[DefineOwnProperty]]`\n// instead of `[[Get]]` and `[[Set]]` and only allowing objects\nfunction define(target, source) {\n for (const key of Reflect.ownKeys(source)) {\n const descriptor = Reflect.getOwnPropertyDescriptor(source, key);\n if (descriptor && !Reflect.defineProperty(target, key, descriptor)) {\n throw new TypeError(`Cannot redefine property: ${String(key)}`);\n }\n }\n}\n\nfunction newObjectInRealm(globalObject, object) {\n const ctorRegistry = initCtorRegistry(globalObject);\n return Object.defineProperties(\n Object.create(ctorRegistry[\"%Object.prototype%\"]),\n Object.getOwnPropertyDescriptors(object)\n );\n}\n\nconst wrapperSymbol = Symbol(\"wrapper\");\nconst implSymbol = Symbol(\"impl\");\nconst sameObjectCaches = Symbol(\"SameObject caches\");\nconst ctorRegistrySymbol = Symbol.for(\"[webidl2js] constructor registry\");\n\nconst AsyncIteratorPrototype = Object.getPrototypeOf(Object.getPrototypeOf(async function* () {}).prototype);\n\nfunction initCtorRegistry(globalObject) {\n if (hasOwn(globalObject, ctorRegistrySymbol)) {\n return globalObject[ctorRegistrySymbol];\n }\n\n const ctorRegistry = Object.create(null);\n\n // In addition to registering all the WebIDL2JS-generated types in the constructor registry,\n // we also register a few intrinsics that we make use of in generated code, since they are not\n // easy to grab from the globalObject variable.\n ctorRegistry[\"%Object.prototype%\"] = globalObject.Object.prototype;\n ctorRegistry[\"%IteratorPrototype%\"] = Object.getPrototypeOf(\n Object.getPrototypeOf(new globalObject.Array()[Symbol.iterator]())\n );\n\n try {\n ctorRegistry[\"%AsyncIteratorPrototype%\"] = Object.getPrototypeOf(\n Object.getPrototypeOf(\n globalObject.eval(\"(async function* () {})\").prototype\n )\n );\n } catch {\n ctorRegistry[\"%AsyncIteratorPrototype%\"] = AsyncIteratorPrototype;\n }\n\n globalObject[ctorRegistrySymbol] = ctorRegistry;\n return ctorRegistry;\n}\n\nfunction getSameObject(wrapper, prop, creator) {\n if (!wrapper[sameObjectCaches]) {\n wrapper[sameObjectCaches] = Object.create(null);\n }\n\n if (prop in wrapper[sameObjectCaches]) {\n return wrapper[sameObjectCaches][prop];\n }\n\n wrapper[sameObjectCaches][prop] = creator();\n return wrapper[sameObjectCaches][prop];\n}\n\nfunction wrapperForImpl(impl) {\n return impl ? impl[wrapperSymbol] : null;\n}\n\nfunction implForWrapper(wrapper) {\n return wrapper ? wrapper[implSymbol] : null;\n}\n\nfunction tryWrapperForImpl(impl) {\n const wrapper = wrapperForImpl(impl);\n return wrapper ? wrapper : impl;\n}\n\nfunction tryImplForWrapper(wrapper) {\n const impl = implForWrapper(wrapper);\n return impl ? impl : wrapper;\n}\n\nconst iterInternalSymbol = Symbol(\"internal\");\n\nfunction isArrayIndexPropName(P) {\n if (typeof P !== \"string\") {\n return false;\n }\n const i = P >>> 0;\n if (i === 2 ** 32 - 1) {\n return false;\n }\n const s = `${i}`;\n if (P !== s) {\n return false;\n }\n return true;\n}\n\nconst byteLengthGetter =\n Object.getOwnPropertyDescriptor(ArrayBuffer.prototype, \"byteLength\").get;\nfunction isArrayBuffer(value) {\n try {\n byteLengthGetter.call(value);\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction iteratorResult([key, value], kind) {\n let result;\n switch (kind) {\n case \"key\":\n result = key;\n break;\n case \"value\":\n result = value;\n break;\n case \"key+value\":\n result = [key, value];\n break;\n }\n return { value: result, done: false };\n}\n\nconst supportsPropertyIndex = Symbol(\"supports property index\");\nconst supportedPropertyIndices = Symbol(\"supported property indices\");\nconst supportsPropertyName = Symbol(\"supports property name\");\nconst supportedPropertyNames = Symbol(\"supported property names\");\nconst indexedGet = Symbol(\"indexed property get\");\nconst indexedSetNew = Symbol(\"indexed property set new\");\nconst indexedSetExisting = Symbol(\"indexed property set existing\");\nconst namedGet = Symbol(\"named property get\");\nconst namedSetNew = Symbol(\"named property set new\");\nconst namedSetExisting = Symbol(\"named property set existing\");\nconst namedDelete = Symbol(\"named property delete\");\n\nconst asyncIteratorNext = Symbol(\"async iterator get the next iteration result\");\nconst asyncIteratorReturn = Symbol(\"async iterator return steps\");\nconst asyncIteratorInit = Symbol(\"async iterator initialization steps\");\nconst asyncIteratorEOI = Symbol(\"async iterator end of iteration\");\n\nmodule.exports = exports = {\n isObject,\n hasOwn,\n define,\n newObjectInRealm,\n wrapperSymbol,\n implSymbol,\n getSameObject,\n ctorRegistrySymbol,\n initCtorRegistry,\n wrapperForImpl,\n implForWrapper,\n tryWrapperForImpl,\n tryImplForWrapper,\n iterInternalSymbol,\n isArrayBuffer,\n isArrayIndexPropName,\n supportsPropertyIndex,\n supportedPropertyIndices,\n supportsPropertyName,\n supportedPropertyNames,\n indexedGet,\n indexedSetNew,\n indexedSetExisting,\n namedGet,\n namedSetNew,\n namedSetExisting,\n namedDelete,\n asyncIteratorNext,\n asyncIteratorReturn,\n asyncIteratorInit,\n asyncIteratorEOI,\n iteratorResult\n};\n","{\n \"IndexSizeError\": 1,\n \"HierarchyRequestError\": 3,\n \"WrongDocumentError\": 4,\n \"InvalidCharacterError\": 5,\n \"NoModificationAllowedError\": 7,\n \"NotFoundError\": 8,\n \"NotSupportedError\": 9,\n \"InUseAttributeError\": 10,\n \"InvalidStateError\": 11,\n \"SyntaxError\": 12,\n \"InvalidModificationError\": 13,\n \"NamespaceError\": 14,\n \"InvalidAccessError\": 15,\n \"TypeMismatchError\": 17,\n \"SecurityError\": 18,\n \"NetworkError\": 19,\n \"AbortError\": 20,\n \"URLMismatchError\": 21,\n \"QuotaExceededError\": 22,\n \"TimeoutError\": 23,\n \"InvalidNodeTypeError\": 24,\n \"DataCloneError\": 25\n}\n","\"use strict\";\nconst legacyErrorCodes = require(\"./legacy-error-codes.json\");\nconst idlUtils = require(\"./utils.js\");\n\nexports.implementation = class DOMExceptionImpl {\n constructor(globalObject, [message, name]) {\n this.name = name;\n this.message = message;\n }\n\n get code() {\n return legacyErrorCodes[this.name] || 0;\n }\n};\n\n// A proprietary V8 extension that causes the stack property to appear.\nexports.init = impl => {\n if (Error.captureStackTrace) {\n const wrapper = idlUtils.wrapperForImpl(impl);\n Error.captureStackTrace(wrapper, wrapper.constructor);\n }\n};\n","\"use strict\";\n\nconst conversions = require(\"webidl-conversions\");\nconst utils = require(\"./utils.js\");\n\nconst implSymbol = utils.implSymbol;\nconst ctorRegistrySymbol = utils.ctorRegistrySymbol;\n\nconst interfaceName = \"DOMException\";\n\nexports.is = value => {\n return utils.isObject(value) && utils.hasOwn(value, implSymbol) && value[implSymbol] instanceof Impl.implementation;\n};\nexports.isImpl = value => {\n return utils.isObject(value) && value instanceof Impl.implementation;\n};\nexports.convert = (globalObject, value, { context = \"The provided value\" } = {}) => {\n if (exports.is(value)) {\n return utils.implForWrapper(value);\n }\n throw new globalObject.TypeError(`${context} is not of type 'DOMException'.`);\n};\n\nfunction makeWrapper(globalObject, newTarget) {\n let proto;\n if (newTarget !== undefined) {\n proto = newTarget.prototype;\n }\n\n if (!utils.isObject(proto)) {\n proto = globalObject[ctorRegistrySymbol][\"DOMException\"].prototype;\n }\n\n return Object.create(proto);\n}\n\nexports.create = (globalObject, constructorArgs, privateData) => {\n const wrapper = makeWrapper(globalObject);\n return exports.setup(wrapper, globalObject, constructorArgs, privateData);\n};\n\nexports.createImpl = (globalObject, constructorArgs, privateData) => {\n const wrapper = exports.create(globalObject, constructorArgs, privateData);\n return utils.implForWrapper(wrapper);\n};\n\nexports._internalSetup = (wrapper, globalObject) => {};\n\nexports.setup = (wrapper, globalObject, constructorArgs = [], privateData = {}) => {\n privateData.wrapper = wrapper;\n\n exports._internalSetup(wrapper, globalObject);\n Object.defineProperty(wrapper, implSymbol, {\n value: new Impl.implementation(globalObject, constructorArgs, privateData),\n configurable: true\n });\n\n wrapper[implSymbol][utils.wrapperSymbol] = wrapper;\n if (Impl.init) {\n Impl.init(wrapper[implSymbol]);\n }\n return wrapper;\n};\n\nexports.new = (globalObject, newTarget) => {\n const wrapper = makeWrapper(globalObject, newTarget);\n\n exports._internalSetup(wrapper, globalObject);\n Object.defineProperty(wrapper, implSymbol, {\n value: Object.create(Impl.implementation.prototype),\n configurable: true\n });\n\n wrapper[implSymbol][utils.wrapperSymbol] = wrapper;\n if (Impl.init) {\n Impl.init(wrapper[implSymbol]);\n }\n return wrapper[implSymbol];\n};\n\nconst exposed = new Set([\"Window\", \"Worker\"]);\n\nexports.install = (globalObject, globalNames) => {\n if (!globalNames.some(globalName => exposed.has(globalName))) {\n return;\n }\n\n const ctorRegistry = utils.initCtorRegistry(globalObject);\n class DOMException {\n constructor() {\n const args = [];\n {\n let curArg = arguments[0];\n if (curArg !== undefined) {\n curArg = conversions[\"DOMString\"](curArg, {\n context: \"Failed to construct 'DOMException': parameter 1\",\n globals: globalObject\n });\n } else {\n curArg = \"\";\n }\n args.push(curArg);\n }\n {\n let curArg = arguments[1];\n if (curArg !== undefined) {\n curArg = conversions[\"DOMString\"](curArg, {\n context: \"Failed to construct 'DOMException': parameter 2\",\n globals: globalObject\n });\n } else {\n curArg = \"Error\";\n }\n args.push(curArg);\n }\n return exports.setup(Object.create(new.target.prototype), globalObject, args);\n }\n\n get name() {\n const esValue = this !== null && this !== undefined ? this : globalObject;\n\n if (!exports.is(esValue)) {\n throw new globalObject.TypeError(\n \"'get name' called on an object that is not a valid instance of DOMException.\"\n );\n }\n\n return esValue[implSymbol][\"name\"];\n }\n\n get message() {\n const esValue = this !== null && this !== undefined ? this : globalObject;\n\n if (!exports.is(esValue)) {\n throw new globalObject.TypeError(\n \"'get message' called on an object that is not a valid instance of DOMException.\"\n );\n }\n\n return esValue[implSymbol][\"message\"];\n }\n\n get code() {\n const esValue = this !== null && this !== undefined ? this : globalObject;\n\n if (!exports.is(esValue)) {\n throw new globalObject.TypeError(\n \"'get code' called on an object that is not a valid instance of DOMException.\"\n );\n }\n\n return esValue[implSymbol][\"code\"];\n }\n }\n Object.defineProperties(DOMException.prototype, {\n name: { enumerable: true },\n message: { enumerable: true },\n code: { enumerable: true },\n [Symbol.toStringTag]: { value: \"DOMException\", configurable: true },\n INDEX_SIZE_ERR: { value: 1, enumerable: true },\n DOMSTRING_SIZE_ERR: { value: 2, enumerable: true },\n HIERARCHY_REQUEST_ERR: { value: 3, enumerable: true },\n WRONG_DOCUMENT_ERR: { value: 4, enumerable: true },\n INVALID_CHARACTER_ERR: { value: 5, enumerable: true },\n NO_DATA_ALLOWED_ERR: { value: 6, enumerable: true },\n NO_MODIFICATION_ALLOWED_ERR: { value: 7, enumerable: true },\n NOT_FOUND_ERR: { value: 8, enumerable: true },\n NOT_SUPPORTED_ERR: { value: 9, enumerable: true },\n INUSE_ATTRIBUTE_ERR: { value: 10, enumerable: true },\n INVALID_STATE_ERR: { value: 11, enumerable: true },\n SYNTAX_ERR: { value: 12, enumerable: true },\n INVALID_MODIFICATION_ERR: { value: 13, enumerable: true },\n NAMESPACE_ERR: { value: 14, enumerable: true },\n INVALID_ACCESS_ERR: { value: 15, enumerable: true },\n VALIDATION_ERR: { value: 16, enumerable: true },\n TYPE_MISMATCH_ERR: { value: 17, enumerable: true },\n SECURITY_ERR: { value: 18, enumerable: true },\n NETWORK_ERR: { value: 19, enumerable: true },\n ABORT_ERR: { value: 20, enumerable: true },\n URL_MISMATCH_ERR: { value: 21, enumerable: true },\n QUOTA_EXCEEDED_ERR: { value: 22, enumerable: true },\n TIMEOUT_ERR: { value: 23, enumerable: true },\n INVALID_NODE_TYPE_ERR: { value: 24, enumerable: true },\n DATA_CLONE_ERR: { value: 25, enumerable: true }\n });\n Object.defineProperties(DOMException, {\n INDEX_SIZE_ERR: { value: 1, enumerable: true },\n DOMSTRING_SIZE_ERR: { value: 2, enumerable: true },\n HIERARCHY_REQUEST_ERR: { value: 3, enumerable: true },\n WRONG_DOCUMENT_ERR: { value: 4, enumerable: true },\n INVALID_CHARACTER_ERR: { value: 5, enumerable: true },\n NO_DATA_ALLOWED_ERR: { value: 6, enumerable: true },\n NO_MODIFICATION_ALLOWED_ERR: { value: 7, enumerable: true },\n NOT_FOUND_ERR: { value: 8, enumerable: true },\n NOT_SUPPORTED_ERR: { value: 9, enumerable: true },\n INUSE_ATTRIBUTE_ERR: { value: 10, enumerable: true },\n INVALID_STATE_ERR: { value: 11, enumerable: true },\n SYNTAX_ERR: { value: 12, enumerable: true },\n INVALID_MODIFICATION_ERR: { value: 13, enumerable: true },\n NAMESPACE_ERR: { value: 14, enumerable: true },\n INVALID_ACCESS_ERR: { value: 15, enumerable: true },\n VALIDATION_ERR: { value: 16, enumerable: true },\n TYPE_MISMATCH_ERR: { value: 17, enumerable: true },\n SECURITY_ERR: { value: 18, enumerable: true },\n NETWORK_ERR: { value: 19, enumerable: true },\n ABORT_ERR: { value: 20, enumerable: true },\n URL_MISMATCH_ERR: { value: 21, enumerable: true },\n QUOTA_EXCEEDED_ERR: { value: 22, enumerable: true },\n TIMEOUT_ERR: { value: 23, enumerable: true },\n INVALID_NODE_TYPE_ERR: { value: 24, enumerable: true },\n DATA_CLONE_ERR: { value: 25, enumerable: true }\n });\n ctorRegistry[interfaceName] = DOMException;\n\n Object.defineProperty(globalObject, interfaceName, {\n configurable: true,\n writable: true,\n value: DOMException\n });\n};\n\nconst Impl = require(\"./DOMException-impl.js\");\n","\"use strict\";\nconst DOMException = require(\"./lib/DOMException.js\");\n\n// Special install function to make the DOMException inherit from Error.\n// https://heycam.github.io/webidl/#es-DOMException-specialness\nfunction installOverride(globalObject, globalNames) {\n if (typeof globalObject.Error !== \"function\") {\n throw new Error(\"Internal error: Error constructor is not present on the given global object.\");\n }\n\n DOMException.install(globalObject, globalNames);\n Object.setPrototypeOf(globalObject.DOMException.prototype, globalObject.Error.prototype);\n}\n\nmodule.exports = { ...DOMException, install: installOverride };\n","\"use strict\";\nconst DOMException = require(\"./webidl2js-wrapper.js\");\n\nconst sharedGlobalObject = { Array, Error, Object, Promise, String, TypeError };\nDOMException.install(sharedGlobalObject, [\"Window\"]);\n\nmodule.exports = sharedGlobalObject.DOMException;\n","\"use strict\";\n\nfunction RTCDataChannelEvent(type, eventInitDict) {\n Object.defineProperties(this, {\n bubbles: {\n value: false,\n },\n cancelable: {\n value: false,\n },\n type: {\n value: type,\n enumerable: true,\n },\n channel: {\n value: eventInitDict.channel,\n enumerable: true,\n },\n target: {\n value: eventInitDict.target,\n enumerable: true,\n },\n });\n}\n\nmodule.exports = RTCDataChannelEvent;\n","\"use strict\";\n\nfunction RTCIceCandidate(candidateInitDict) {\n [\n \"candidate\",\n \"sdpMid\",\n \"sdpMLineIndex\",\n \"foundation\",\n \"component\",\n \"priority\",\n \"address\",\n \"protocol\",\n \"port\",\n \"type\",\n \"tcpType\",\n \"relatedAddress\",\n \"relatedPort\",\n \"usernameFragment\",\n ].forEach((property) => {\n if (candidateInitDict && property in candidateInitDict) {\n this[property] = candidateInitDict[property];\n } else {\n this[property] = null;\n }\n });\n\n this.toJSON = () => {\n const { candidate, sdpMid, sdpMLineIndex, usernameFragment } = this;\n let json = {\n candidate,\n sdpMid,\n sdpMLineIndex,\n };\n\n if (usernameFragment) {\n json.usernameFragment = usernameFragment;\n }\n\n return json;\n };\n}\n\nmodule.exports = RTCIceCandidate;\n","\"use strict\";\n\nfunction RTCPeerConnectionIceEvent(type, eventInitDict) {\n Object.defineProperties(this, {\n type: {\n value: type,\n enumerable: true,\n },\n candidate: {\n value: eventInitDict.candidate,\n enumerable: true,\n },\n target: {\n value: eventInitDict.target,\n enumerable: true,\n },\n });\n}\n\nmodule.exports = RTCPeerConnectionIceEvent;\n","\"use strict\";\n\nfunction RTCPeerConnectionIceErrorEvent(type, eventInitDict) {\n Object.defineProperties(this, {\n type: {\n value: type,\n enumerable: true,\n },\n address: {\n value: eventInitDict.address,\n enumerable: true,\n },\n port: {\n value: eventInitDict.port,\n enumerable: true,\n },\n url: {\n value: eventInitDict.url,\n enumerable: true,\n },\n errorCode: {\n value: eventInitDict.errorCode,\n enumerable: true,\n },\n errorText: {\n value: eventInitDict.errorText,\n enumerable: true,\n },\n target: {\n value: eventInitDict.target,\n enumerable: true,\n },\n });\n}\n\nmodule.exports = RTCPeerConnectionIceErrorEvent;\n","\"use strict\";\n\nfunction RTCSessionDescription(descriptionInitDict) {\n if (descriptionInitDict) {\n this.type = descriptionInitDict.type;\n this.sdp = descriptionInitDict.sdp;\n }\n\n this.toJSON = () => {\n const { sdp, type } = this;\n\n return {\n sdp,\n type,\n };\n };\n}\n\nmodule.exports = RTCSessionDescription;\n","\"use strict\";\n\nvar inherits = require(\"util\").inherits;\n\nvar _webrtc = require(\"./binding\");\n\nvar EventTarget = require(\"./eventtarget\");\n\nvar RTCDataChannelEvent = require(\"./datachannelevent\");\nvar RTCIceCandidate = require(\"./icecandidate\");\nvar RTCPeerConnectionIceEvent = require(\"./rtcpeerconnectioniceevent\");\nvar RTCPeerConnectionIceErrorEvent = require(\"./rtcpeerconnectioniceerrorevent\");\nvar RTCSessionDescription = require(\"./sessiondescription\");\n\nfunction RTCPeerConnection() {\n var self = this;\n var pc = new _webrtc.RTCPeerConnection(arguments[0] || {});\n\n EventTarget.call(this);\n\n //\n // Attach events to the native PeerConnection object\n //\n pc.ontrack = function ontrack(receiver, streams, transceiver) {\n self.dispatchEvent({\n type: \"track\",\n track: receiver.track,\n receiver: receiver,\n streams: streams,\n transceiver: transceiver,\n target: self,\n });\n };\n\n pc.onconnectionstatechange = function onconnectionstatechange() {\n self.dispatchEvent({ type: \"connectionstatechange\", target: self });\n };\n\n pc.onicecandidate = function onicecandidate(candidate) {\n var icecandidate = new RTCIceCandidate(candidate);\n self.dispatchEvent(\n new RTCPeerConnectionIceEvent(\"icecandidate\", {\n candidate: icecandidate,\n target: self,\n }),\n );\n };\n\n pc.onicecandidateerror = function onicecandidateerror(eventInitDict) {\n eventInitDict.target = self;\n var icecandidateerror = new RTCPeerConnectionIceErrorEvent(\n \"icecandidateerror\",\n eventInitDict,\n );\n self.dispatchEvent(icecandidateerror);\n };\n\n pc.onsignalingstatechange = function onsignalingstatechange() {\n self.dispatchEvent({ type: \"signalingstatechange\", target: self });\n };\n\n pc.oniceconnectionstatechange = function oniceconnectionstatechange() {\n self.dispatchEvent({ type: \"iceconnectionstatechange\", target: self });\n };\n\n pc.onicegatheringstatechange = function onicegatheringstatechange() {\n self.dispatchEvent({ type: \"icegatheringstatechange\", target: self });\n\n // if we have completed gathering candidates, trigger a null candidate event\n if (\n self.iceGatheringState === \"complete\" &&\n self.connectionState !== \"closed\"\n ) {\n self.dispatchEvent(\n new RTCPeerConnectionIceEvent(\"icecandidate\", {\n candidate: null,\n target: self,\n }),\n );\n }\n };\n\n pc.onnegotiationneeded = function onnegotiationneeded() {\n self.dispatchEvent({ type: \"negotiationneeded\", target: self });\n };\n\n // [ToDo] onnegotiationneeded\n\n pc.ondatachannel = function ondatachannel(channel) {\n self.dispatchEvent(\n new RTCDataChannelEvent(\"datachannel\", { channel, target: self }),\n );\n };\n\n //\n // PeerConnection properties & attributes\n //\n\n Object.defineProperties(this, {\n _pc: {\n value: pc,\n },\n canTrickleIceCandidates: {\n get: function getCanTrickleIceCandidates() {\n return pc.canTrickleIceCandidates;\n },\n enumerable: true,\n },\n connectionState: {\n get: function getConnectionState() {\n return pc.connectionState;\n },\n enumerable: true,\n },\n currentLocalDescription: {\n get: function getCurrentLocalDescription() {\n return pc.currentLocalDescription\n ? new RTCSessionDescription(pc.currentLocalDescription)\n : null;\n },\n enumerable: true,\n },\n localDescription: {\n get: function getLocalDescription() {\n return pc.localDescription\n ? new RTCSessionDescription(pc.localDescription)\n : null;\n },\n enumerable: true,\n },\n pendingLocalDescription: {\n get: function getPendingLocalDescription() {\n return pc.pendingLocalDescription\n ? new RTCSessionDescription(pc.pendingLocalDescription)\n : null;\n },\n enumerable: true,\n },\n currentRemoteDescription: {\n get: function getCurrentRemoteDescription() {\n return pc.currentRemoteDescription\n ? new RTCSessionDescription(pc.currentRemoteDescription)\n : null;\n },\n enumerable: true,\n },\n remoteDescription: {\n get: function getRemoteDescription() {\n return pc.remoteDescription\n ? new RTCSessionDescription(pc.remoteDescription)\n : null;\n },\n enumerable: true,\n },\n pendingRemoteDescription: {\n get: function getPendingRemoteDescription() {\n return pc.pendingRemoteDescription\n ? new RTCSessionDescription(pc.pendingRemoteDescription)\n : null;\n },\n enumerable: true,\n },\n signalingState: {\n get: function getSignalingState() {\n return pc.signalingState;\n },\n enumerable: true,\n },\n readyState: {\n get: function getReadyState() {\n return pc.getReadyState();\n },\n },\n sctp: {\n get: function () {\n return pc.sctp;\n },\n enumerable: true,\n },\n iceGatheringState: {\n get: function getIceGatheringState() {\n return pc.iceGatheringState;\n },\n enumerable: true,\n },\n iceConnectionState: {\n get: function getIceConnectionState() {\n return pc.iceConnectionState;\n },\n enumerable: true,\n },\n onconnectionstatechange: {\n value: null,\n writable: true,\n enumerable: true,\n },\n ondatachannel: {\n value: null,\n writable: true,\n enumerable: true,\n },\n oniceconnectionstatechange: {\n value: null,\n writable: true,\n enumerable: true,\n },\n onicegatheringstatechange: {\n value: null,\n writable: true,\n enumerable: true,\n },\n onnegotiationneeded: {\n value: null,\n writable: true,\n enumerable: true,\n },\n onsignalingstatechange: {\n value: null,\n writable: true,\n enumerable: true,\n },\n });\n}\n\ninherits(RTCPeerConnection, EventTarget);\n\n// NOTE(mroberts): This is a bit of a hack.\nRTCPeerConnection.prototype.ontrack = null;\n\nRTCPeerConnection.prototype.addIceCandidate = function addIceCandidate(\n candidate,\n) {\n if (!candidate?.candidate) {\n // The WebRTC specification says:\n // * if the `candidate` is undefined/missing\n // * if the `candidate` parameter is null\n // * if the `candidate` parameter has an undefined/missing `candidate` property\n // * if the `candidate` parameter has a `candidate: \"\"` property\n // Then, the message is treated as end-of-candidates.\n // This code normalizes all those conditions into a single value, for convenience.\n // eslint-disable-next-line no-undefined\n candidate = undefined;\n }\n var promise = this._pc.addIceCandidate(candidate);\n if (arguments.length === 3) {\n promise.then(arguments[1], arguments[2]);\n }\n return promise;\n};\n\nRTCPeerConnection.prototype.addTransceiver = function addTransceiver() {\n return this._pc.addTransceiver.apply(this._pc, arguments);\n};\n\nRTCPeerConnection.prototype.addTrack = function addTrack(track, ...streams) {\n return this._pc.addTrack(track, streams);\n};\n\nRTCPeerConnection.prototype.close = function close() {\n this._pc.close();\n};\n\nRTCPeerConnection.prototype.createDataChannel = function createDataChannel() {\n return this._pc.createDataChannel.apply(this._pc, arguments);\n};\n\nRTCPeerConnection.prototype.createOffer = function createOffer() {\n var options = arguments.length === 3 ? arguments[2] : arguments[0];\n var promise = this._pc.createOffer(options || {});\n if (arguments.length >= 2) {\n promise.then(arguments[0], arguments[1]);\n }\n return promise;\n};\n\nRTCPeerConnection.prototype.createAnswer = function createAnswer() {\n var options = arguments.length === 3 ? arguments[2] : arguments[0];\n var promise = this._pc.createAnswer(options || {});\n if (arguments.length >= 2) {\n promise.then(arguments[0], arguments[1]);\n }\n return promise;\n};\n\nRTCPeerConnection.prototype.getConfiguration = function getConfiguration() {\n return this._pc.getConfiguration();\n};\n\nRTCPeerConnection.prototype.getReceivers = function getReceivers() {\n return this._pc.getReceivers();\n};\n\nRTCPeerConnection.prototype.getSenders = function getSenders() {\n return this._pc.getSenders();\n};\n\nRTCPeerConnection.prototype.getTransceivers = function getTransceivers() {\n return this._pc.getTransceivers();\n};\n\nRTCPeerConnection.prototype.getStats = function getStats() {\n return this._pc.getStats(arguments[0]);\n};\n\nRTCPeerConnection.prototype.removeTrack = function removeTrack(sender) {\n this._pc.removeTrack(sender);\n};\n\nRTCPeerConnection.prototype.setConfiguration = function setConfiguration(\n configuration,\n) {\n return this._pc.setConfiguration(configuration);\n};\n\nRTCPeerConnection.prototype.setLocalDescription = function setLocalDescription(\n description,\n) {\n var promise = this._pc.setLocalDescription(description);\n if (arguments.length === 3) {\n promise.then(arguments[1], arguments[2]);\n }\n return promise;\n};\n\nRTCPeerConnection.prototype.setRemoteDescription =\n function setRemoteDescription(description) {\n var promise = this._pc.setRemoteDescription(description);\n if (arguments.length === 3) {\n promise.then(arguments[1], arguments[2]);\n }\n return promise;\n };\n\nRTCPeerConnection.prototype.restartIce = function restartIce() {\n return this._pc.restartIce();\n};\n\nmodule.exports = RTCPeerConnection;\n","\"use strict\";\n\nconst { inherits } = require(\"util\");\n\nconst {\n MediaStream,\n MediaStreamTrack,\n RTCAudioSink,\n RTCAudioSource,\n RTCDataChannel,\n RTCDtlsTransport,\n RTCIceTransport,\n RTCRtpReceiver,\n RTCRtpSender,\n RTCRtpTransceiver,\n RTCSctpTransport,\n RTCVideoSink,\n RTCVideoSource,\n getUserMedia,\n i420ToRgba,\n rgbaToI420,\n setDOMException,\n} = require(\"./binding\");\n\nconst EventTarget = require(\"./eventtarget\");\nconst MediaDevices = require(\"./mediadevices\");\n\ninherits(MediaStream, EventTarget);\ninherits(MediaStreamTrack, EventTarget);\ninherits(RTCAudioSink, EventTarget);\ninherits(RTCDataChannel, EventTarget);\ninherits(RTCDtlsTransport, EventTarget);\ninherits(RTCIceTransport, EventTarget);\ninherits(RTCSctpTransport, EventTarget);\ninherits(RTCVideoSink, EventTarget);\n\ntry {\n setDOMException(require(\"domexception\"));\n} catch (error) {\n // Do nothing\n void error;\n}\n\n// NOTE(mroberts): Here's a hack to support jsdom's Blob implementation.\nRTCDataChannel.prototype.send = function send(data) {\n const implSymbol = Object.getOwnPropertySymbols(data).find(\n (symbol) => symbol.toString() === \"Symbol(impl)\",\n );\n if (data[implSymbol] && data[implSymbol]._buffer) {\n data = data[implSymbol]._buffer;\n }\n this._send(data);\n};\n\nconst mediaDevices = new MediaDevices();\n\nconst nonstandard = {\n i420ToRgba,\n RTCAudioSink,\n RTCAudioSource,\n RTCVideoSink,\n RTCVideoSource,\n rgbaToI420,\n};\n\nmodule.exports = {\n MediaStream,\n MediaStreamTrack,\n RTCDataChannel,\n RTCDataChannelEvent: require(\"./datachannelevent\"),\n RTCDtlsTransport,\n RTCIceCandidate: require(\"./icecandidate\"),\n RTCIceTransport,\n RTCPeerConnection: require(\"./peerconnection\"),\n RTCPeerConnectionIceEvent: require(\"./rtcpeerconnectioniceevent\"),\n RTCPeerConnectionIceErrorEvent: require(\"./rtcpeerconnectioniceerrorevent\"),\n RTCRtpReceiver,\n RTCRtpSender,\n RTCRtpTransceiver,\n RTCSctpTransport,\n RTCSessionDescription: require(\"./sessiondescription\"),\n getUserMedia,\n mediaDevices,\n nonstandard,\n};\n","import * as https from 'node:https'\nimport * as fs from 'node:fs'\nimport {\n reactive,\n deepGet,\n clonewo_,\n opmsg,\n msgop,\n encode_uint32,\n encode_fp412,\n encode_fp168,\n encode_fp1616,\n limitPrecision,\n encode,\n decode\n} from './utils'\nimport { compress, decompress } from './compress-node'\nimport fastjsonpatch from 'fast-json-patch'\nimport { WebSocketServer, WebSocket } from 'ws'\nimport { MongoClient, Db } from 'mongodb'\nimport { glMatrix, vec3, quat } from 'gl-matrix'\n// WebRTC implementation loaded conditionally when needed\n\nglMatrix.setMatrixArrayType(Array)\n\n// entities/ID/\nconst fastPatchProperties: Record<string, boolean> = {\n 'type': true, // string 'enemy'\n 'status': true, // string 'idle'\n 'level': true, // number 2\n 'race': true, // string 'goblin'\n 'class': true, // string 'warrior'\n 'model': true, // string 'models/models.glb|goblin'\n 'animation': true, // string 'idle2'\n 'sound': true, // string 'sound/goblin.snd|snarl'\n 'effect': true, // 'selected'\n 'position': true, // [0, 0, 0] Vector (Number)\n 'rotation': true, // [0, 0, 0, 1] Quaternion (Number)\n 'scale': true, // [1, 1, 1] Vector (Number)\n}\n\nconst dictionaryProperties: Record<string, boolean> = {\n 'type': true,\n 'status': true,\n 'level': true,\n 'race': true,\n 'class': true,\n 'model': true,\n 'animation': true,\n 'sound': true,\n 'effect': true,\n}\n\nconst { applyOperation } = fastjsonpatch\nconst LITTLE_ENDIAN = (() => {\n const buffer = new ArrayBuffer(2)\n new DataView(buffer).setInt16(0, 256, true)\n return new Int16Array(buffer)[0] === 256\n})()\n\nconst MAX_PACKAGE_SIZE = 65400; // Slightly below the 65535 limit to allow for overhead\n\n\ntype ClientType = any\n\ninterface StatsType {\n tUpdate: number[]\n tPatch: number[]\n send: number\n sendRTC: number\n _sendRTCUpdate: number\n [key: string]: any\n}\n\nexport default class TopazCubeServer {\n name = 'TopazCubeServer'\n cycle = 100\n patchCycleDivider = 1\n port = 8799\n useHttps = false\n key = './cert/key.pem'\n cert = './cert/cert.pem'\n MongoUrl = 'mongodb://localhost:27017'\n mongoClient: MongoClient | null = null\n DB: Db | null = null\n database = 'topazcube'\n collection = 'documents'\n allowSave = true\n allowSync = true\n allowWebRTC = false\n allowFastPatch = false\n allowCompression = false\n simulateLatency = 0\n\n _lastUID = 100\n clients: ClientType[] = []\n documents: Record<string, any> = {}\n isLoading: Record<string, boolean> = {}\n _documentChanges: Record<string, any[]> = {}\n _documentChanged: Record<string, boolean> = {}\n _documentState: Record<string, any> = {}\n\n update = 0\n lastUpdate = 0\n _saveiv: any = null\n _loopiv: any = null\n _statsiv: any = null\n _stillUpdating = false\n stats: StatsType = {\n tUpdate: [],\n tPatch: [],\n send: 0,\n sendRTC: 0,\n _sendRTCUpdate: 0\n }\n\n _wss: WebSocketServer | null = null\n _exited = false\n\n log(...args: any[]) {\n console.log(this.name + ':', ...args);\n }\n\n warn(...args: any[]) {\n console.warn(this.name + ':', ...args);\n }\n\n error(...args: any[]) {\n console.error(this.name + ':', ...args);\n }\n\n constructor({\n name = 'TopazCubeServer',\n cycle = 100,\n port = 8799,\n useHttps = false,\n key = './cert/key.pem',\n cert = './cert/cert.pem',\n MongoUrl = 'mongodb://localhost:27017',\n database = 'topazcube',\n collection = 'documents',\n allowSave = true,\n allowSync = true,\n allowWebRTC = false,\n allowFastPatch = false,\n allowCompression = false,\n simulateLatency = 0,\n }: {\n name?: string\n cycle?: number\n port?: number\n useHttps?: boolean\n key?: string\n cert?: string\n MongoUrl?: string\n database?: string\n collection?: string\n allowSave?: boolean\n allowSync?: boolean\n allowWebRTC?: boolean\n allowFastPatch?: boolean\n allowCompression?: boolean\n simulateLatency?: number\n } = {}) {\n this.name = name\n this.cycle = cycle\n this.port = port\n this.useHttps = useHttps\n this.key = key\n this.cert = cert\n this.MongoUrl = MongoUrl\n this.database = database\n this.collection = collection\n this.allowSave = allowSave\n this.allowSync = allowSync\n this.allowWebRTC = allowWebRTC\n this.allowFastPatch = allowFastPatch\n this.allowCompression = allowCompression\n this.simulateLatency = simulateLatency\n\n this._initDB()\n\n if (useHttps) {\n let httpsServer: https.Server | null = https.createServer({\n key: fs.readFileSync(this.key),\n cert: fs.readFileSync(this.cert),\n }, (req, res) => {\n res.writeHead(200)\n res.end('<b>Hello World!</b>')\n }).listen(this.port)\n this._wss = new WebSocketServer({ server: httpsServer })\n httpsServer = null\n this.log(this.name + ' running on HTTPS port ' + this.port)\n } else {\n this._wss = new WebSocketServer({ port: this.port })\n this.log(this.name + ' running on port ' + this.port)\n }\n this._wss.on('connection', (client: WebSocket) => {\n this._onConnected(client)\n })\n\n process.stdin.resume()\n process.on('SIGINT', () => {\n this._exitSignal('SIGINT')\n })\n process.on('SIGQUIT', () => {\n this._exitSignal('SIGQUIT')\n })\n process.on('SIGTERM', () => {\n this._exitSignal('SIGTERM')\n })\n process.on('SIGUSR2', () => {\n this._exitSignal('SIGUSR2')\n })\n\n // Setup keypress handling for console input\n process.stdin.resume()\n process.stdin.setEncoding('utf8')\n\n process.stdin.on('data', (key: any) => {\n key = (''+key).trim()\n\n // ctrl-c ( end of text )\n if (key == '\\u0003') {\n this._exitSignal('SIGINT')\n return\n }\n\n // Process other keypresses\n this.log(`Key pressed: ${key}`)\n\n // Example: 's' to save all documents\n if (key == 's') {\n this.log('Saving all documents...')\n this._saveAllDocuments()\n }\n\n // Example: 'i' to print server info\n if (key == 'i') {\n this.log(\n `Server: ${this.name}, Clients: ${this.clients.length}, Documents: ${Object.keys(this.documents).length}`\n )\n }\n })\n this._startLoop()\n }\n\n /*= DOCUMENTS ==============================================================*/\n\n // to be redefined. Called before a new document is created. Returns true if\n // the client has the right to create an empty document\n canCreate(client: ClientType, name: string): boolean {\n return true\n }\n\n // to be redefined. Called when a new document is created\n // (returns an empty document)\n onCreate(name: string): any {\n return {\n data: {},\n }\n }\n\n // to be redefined. Called when a client wants to sync (modify) a document.\n // Returns true if the client has the right to sync that operation.\n canSync(client: ClientType, name: string, op: any): boolean {\n return true\n }\n\n // to be redefined. Called when a new document is hydrated\n // (created, or loaded from db)\n async onHydrate(name: string, document: any): Promise<void> {\n document.__hydrated = true\n }\n\n _makeReactive(name: string): void {\n //this.log(`Making document '${name}' reactive`, this.documents[name])\n let ep: any = false\n if (this.allowFastPatch) {\n ep = fastPatchProperties\n }\n this.documents[name] = reactive(\n name,\n this.documents[name],\n this._onDocumentChange.bind(this),\n '',\n ep\n )\n if (!this._documentChanges[name]) {\n this._documentChanges[name] = []\n this._documentChanged[name] = false\n }\n }\n\n _createEmptyDocument(name: string): void {\n let doc = this.onCreate(name)\n if (!doc) {\n return\n }\n this.documents[name] = doc\n }\n\n async _waitLoad(name: string): Promise<void> {\n if (this.isLoading[name]) {\n while (this.isLoading[name]) {\n await new Promise((resolve) => setTimeout(resolve, 50))\n }\n }\n }\n\n async _checkDocument(name: string, client: ClientType): Promise<void> {\n await this._waitLoad(name)\n if (!this.documents[name]) {\n this.isLoading[name] = true\n await this._loadDocument(name)\n if (!this.documents[name] && this.canCreate(client, name)) {\n this._createEmptyDocument(name)\n }\n if (this.documents[name]) {\n this._makeReactive(name)\n this.onHydrate(name, this.documents[name])\n }\n this.isLoading[name] = false\n this._documentState[name] = {\n subscibers: 0,\n lastModified: Date.now(),\n }\n }\n }\n\n _updateAllDocumentsState(): void {\n for (let name in this.documents) {\n if (name != '_server') {\n let doc = this.documents[name]\n this._documentState[name].subscibers = 0\n for (let client of this.clients) {\n if (client.subscribed && client.subscribed[name]) {\n this._documentState[name].subscibers++\n }\n }\n }\n }\n }\n\n /*= UPDATE LOOP ============================================================*/\n\n // to be redefined. called every this.cycle ms\n onUpdate(name: string, doc: any, dt: number): void {}\n\n _startLoop(): void {\n this.lastUpdate = Date.now()\n this._loop()\n this._statsiv = setInterval(() => {\n this._doStats()\n }, 1000)\n this._saveiv = setInterval(() => {\n this._saveChanges()\n }, 60000)\n }\n\n _loop(): void {\n let now = Date.now()\n let dtms = (now - this.lastUpdate)\n let dt = dtms / 1000.0 // Convert to seconds\n this.lastUpdate = now\n\n /*\n if (this._stillUpdating) {\n return\n }\n */\n this._stillUpdating = true\n for (let name in this.documents) {\n this.onUpdate(name, this.documents[name], dt)\n }\n let t1 = Date.now()\n this._stillUpdating = false\n let updateTime = t1 - now\n this.stats.tUpdate.push(updateTime)\n\n //this.log(`update ${this.update} patch: ${this.update % this.patchCycleDivider}`, )\n\n let patchTime = 0\n if (this.update % this.patchCycleDivider == 0) {\n this._sendPatches()\n let t2 = Date.now()\n patchTime = t2 - t1\n this.stats.tPatch.push(patchTime)\n if (this.allowFastPatch) {\n this.log(`update ${this.update} dt:${dtms}ms RTC:${this.stats._sendRTCUpdate}bytes, tUpdate: ${updateTime}ms, tPatch: ${patchTime}ms`, )\n }\n this.stats._sendRTCUpdate = 0\n }\n\n this.update++\n let endUpdate = Date.now()\n let totalUpdate = endUpdate - now\n\n setTimeout(() => {\n this._loop()\n }, Math.max(this.cycle - totalUpdate, 10))\n }\n\n _doStats(): void {\n for (let key in this.stats) {\n let i = this.stats[key]\n if (Array.isArray(i) && i.length > 0) {\n while (i.length > 60) {\n i.shift()\n }\n this.stats['_avg_' + key] = i.reduce((a: number, b: number) => a + b, 0) / i.length\n } else if (!key.startsWith('_')) {\n this.stats['_persec_' + key] = i / 3.0\n this.stats[key] = 0\n }\n }\n //this.log('stats', this.stats)\n }\n\n /*= MESSAGES ===============================================================*/\n\n // to be redefined. Called on message (operation) from client\n onMessage(client: ClientType, message: any): void {}\n\n // to be redefined. Called when a client connects\n onConnect(client: ClientType): void {}\n\n // to be redefined. Called when a client disconnects\n onDisconnect(client: ClientType): void {}\n\n _onConnected(client: ClientType): void {\n client.ID = this.getUID()\n client.ping = 0\n client.ctdiff = 0\n client.subscribed = {}\n client.dataChannel = null\n client.peerConnection = null\n\n this.log('client connected', client.ID)\n this.clients.push(client)\n client.on('error', (...args: any[]) => {\n this._onError(client, args)\n })\n client.on('message', (message:any) => {\n let dec = decode(message)\n if (this.simulateLatency) {\n setTimeout(() => {\n this._onMessage(client, dec)\n }, this.simulateLatency)\n } else {\n this._onMessage(client, dec)\n }\n })\n client.on('close', (message:any) => {\n this._onDisconnected(client)\n this.onDisconnect(client)\n })\n this.onConnect(client)\n }\n\n async _onMessage(client: ClientType, message: any): Promise<void> {\n if (\n message.c == 'sync' &&\n this.allowSync &&\n client.subscribed &&\n client.subscribed[message.n] &&\n this.documents[message.n]\n ) {\n let name = message.n\n if (!this._documentChanges[name]) {\n this._documentChanges[name] = []\n this._documentChanged[name] = false\n }\n for (let op of message.p) {\n if (!this.canSync(client, name, op)) {\n continue\n }\n this._documentChanges[name].push(op)\n this._documentChanged[name] = true\n let dop = msgop(op)\n applyOperation(this.documents[name], dop)\n }\n } else if (message.c == 'ping') {\n this.send(client, {\n c: 'pong',\n t: Date.now(),\n ct: message.ct,\n ID: client.ID,\n })\n } else if (message.c == 'peng') {\n let time = Date.now()\n let ping = time - message.st\n client.ctdiff = message.ct + ping / 2 - time\n client.ping = ping\n //this.log(time, \"PENG ping, ctdiff\", message, ping, client.ctdiff, \"ms\")\n } else if (message.c == 'rtc-offer') {\n this._processOffer(client, message)\n } else if (message.c == 'rtc-candidate') {\n this._processICECandidate(client, message)\n } else if (message.c == 'sub') {\n await this._checkDocument(message.n, client)\n if (!this.documents[message.n]) {\n this.send(client, {\n c: 'error',\n t: Date.now(),\n message: 'Document not found',\n })\n return\n }\n if (client.subscribed) {\n client.subscribed[message.n] = true\n }\n this._sendFullState(message.n, client)\n } else if (message.c == 'unsub') {\n if (client.subscribed) {\n client.subscribed[message.n] = false\n }\n } else {\n this.onMessage(client, message)\n }\n }\n\n _onError(client: ClientType, args: any[]): void {\n this.error('onError:', args)\n }\n\n _onDisconnected(client: ClientType): void {\n if (client.dataChannel) {\n client.dataChannel.close()\n }\n if (client.peerConnection) {\n client.peerConnection.close()\n }\n this.log('client disconnected')\n let index = this.clients.indexOf(client)\n if (index !== -1) {\n this.clients.splice(index, 1)\n }\n }\n\n async send(client: ClientType, message: any): Promise<void> {\n try {\n let t1 = Date.now()\n let data = encode(message)\n let t2 = Date.now()\n let dl = data.byteLength\n if (this.allowCompression) {\n data = await compress(data)\n }\n let t3 = Date.now()\n if (data.length > 4096) {\n this.log(`Big message ${dl} -> ${data.length} (${(100.0 * data.length / dl).toFixed()}%) encoding:${t2 - t1}ms compression:${t3 - t1}ms`)\n }\n this.stats.send += data.byteLength\n if (this.simulateLatency) {\n setTimeout(() => {\n client.send(data)\n }, this.simulateLatency)\n } else {\n client.send(data)\n }\n } catch (e) {\n this.error('Error sending message:', e, message)\n }\n }\n\n async broadcast(message: object, clients: ClientType[] | false = false): Promise<void> {\n if (!clients) {\n clients = this.clients\n }\n let data = encode(message)\n if (this.allowCompression) {\n data = await compress(data)\n }\n for (let client of this.clients) {\n this.stats.send += data.byteLength\n if (this.simulateLatency) {\n setTimeout(() => {\n client.send(data)\n }, this.simulateLatency)\n } else {\n client.send(data)\n }\n }\n }\n\n async _sendFullState(name: string, client: ClientType): Promise<void> {\n await this._waitLoad(name)\n let excluded: any = '_'\n if (this.allowFastPatch) {\n excluded = fastPatchProperties\n }\n let doc = clonewo_(this.documents[name], excluded)\n limitPrecision(doc)\n let fdata: any = false\n if (this.allowFastPatch) {\n fdata = this._encodeFastChanges(name, false)\n }\n let fullState = {\n c: 'full',\n le: LITTLE_ENDIAN,\n t: Date.now(),\n n: name,\n doc: doc,\n fdata: fdata\n }\n this.send(client, fullState)\n }\n\n _encodeFastChanges(name: string, changesOnly = true): any {\n let doc = this.documents[name]\n if (!doc) { return false }\n let origin = this.documents[name].origin\n if (!origin) {\n origin = [0, 0, 0]\n this.documents[name].origin = origin\n }\n\n let entities = doc.entities\n let ids = Object.keys(entities)\n if (!entities) { return false }\n let count: Record<string, number> = {}\n let changed: any = {}\n let hasChanges: any = {}\n let dictionary: any = {}\n let encodedChanges: any = {}\n\n for (let key in fastPatchProperties) {\n if (changesOnly) {\n count[key] = 0\n changed[key] = {}\n hasChanges[key] = false\n } else {\n count[key] = ids.length\n changed[key] = {}\n hasChanges[key] = true\n }\n dictionary[key] = {}\n }\n\n // search for changes\n\n if (changesOnly) {\n for (let id in entities) {\n let e = entities[id]\n for (let key in fastPatchProperties) {\n if (e['__changed_' + key]) {\n changed[''+key][''+id] = true\n count[''+key] = parseInt(''+count[''+key]) + 1\n hasChanges[''+key] = true\n e['__changed_' + key] = false\n }\n }\n }\n } else {\n for (let id in entities) {\n for (let key in fastPatchProperties) {\n changed[''+key][''+id] = true\n }\n }\n }\n\n // create dictionaries\n\n let dictUID = 1\n for (let key in hasChanges) {\n if (hasChanges[key] && dictionaryProperties[key]) {\n for (let id in changed[key]) {\n let e = entities[id]\n let value = e[key]\n if (!dictionary[key][value]) {\n dictionary[key][value] = dictUID++\n }\n }\n }\n }\n\n this.log(\"--------------------------------------------------\")\n //this.log(\"changed\", changed)\n //this.log(\"count\", count)\n\n // create encoded changes\n //\n for (let key in hasChanges) {\n if (hasChanges[key]) {\n let size = parseInt(''+count[''+key])\n let encoded: any = {}\n if (dictionaryProperties[key]) {\n encoded.dict = dictionary[key]\n\n let pdata = new Uint8Array(size * 8)\n let offset = 0\n for (let id in changed[key]) {\n let e = entities[id]\n let nid = parseInt(id)\n encode_uint32(nid, pdata, offset)\n offset += 4\n let value = e[key]\n let did = parseInt(dictionary[key][value])\n encode_uint32(did, pdata, offset)\n offset += 4\n }\n encoded.pdata = pdata\n } else {\n\n let pdata: Uint8Array\n if (key == 'position') {\n pdata = new Uint8Array(size * 13)\n } else if (key == 'rotation') {\n pdata = new Uint8Array(size * 16)\n } else if (key == 'scale') {\n pdata = new Uint8Array(size * 16)\n } else {\n pdata = new Uint8Array(0)\n }\n\n let offset = 0\n for (let id in changed[key]) {\n let e = entities[id]\n let nid = parseInt(id)\n encode_uint32(nid, pdata, offset)\n offset += 4\n if (key == 'position') {\n encode_fp168(e.position[0] - origin[0], pdata, offset)\n offset += 3\n encode_fp168(e.position[1] - origin[1], pdata, offset)\n offset += 3\n encode_fp168(e.position[2] - origin[2], pdata, offset)\n offset += 3\n } else if (key == 'rotation') {\n encode_fp412(e.rotation[0], pdata, offset)\n offset += 2\n encode_fp412(e.rotation[1], pdata, offset)\n offset += 2\n encode_fp412(e.rotation[2], pdata, offset)\n offset += 2\n encode_fp412(e.rotation[3], pdata, offset)\n offset += 2\n } else if (key == 'scale') {\n encode_fp1616(e.scale[0], pdata, offset)\n offset += 4\n encode_fp1616(e.scale[1], pdata, offset)\n offset += 4\n encode_fp1616(e.scale[2], pdata, offset)\n offset += 4\n }\n }\n encoded.pdata = pdata\n }\n encodedChanges[key] = encoded\n }\n }\n\n return encodedChanges\n }\n\n _sendPatches(): void {\n let now = Date.now()\n\n for (let name in this._documentChanges) {\n let dc = this._documentChanges[name]\n this._documentChanges[name] = []\n let sus = this.clients.filter((client) => client.subscribed && client.subscribed[name])\n if (sus.length > 0) {\n if (dc && dc.length > 0) {\n let record = {\n c: 'patch',\n t: now, // server time\n u: this.update,\n n: name,\n doc: dc,\n }\n this.broadcast(record, sus)\n }\n }\n\n if (this.allowFastPatch) {\n if (sus.length > 0) {\n let t1 = Date.now()\n let changes = this._encodeFastChanges(name)\n let t2 = Date.now()\n let record = {\n c: 'fpatch',\n t: now, // server time\n u: this.update,\n n: name,\n fdata: changes\n }\n //this.broadcastRTC(record, sus)\n let t3 = Date.now()\n this.log(`_sendPatches: ${name} encode_changes: ${t2-t1}ms broadcast:${t3-t2}ms`)\n }\n }\n }\n }\n\n _onDocumentChange(name: string, op: any, target: any, path: any, value: any): void {\n this._documentChanges[name]?.push(opmsg(op, target, path, value))\n this._documentChanged[name] = true\n }\n\n propertyChange(name: string, id: string | number, property: string): void {\n let doc = this.documents[name]\n if (!doc) { return }\n let entities = doc.entities\n if (!entities) { return }\n let e = entities[id]\n if (!e) { return }\n e['__changed_'+property] = true\n //this.log('propertyChange', e)\n }\n\n\n /*= WEBRTC ===================================================================*/\n\n private _wrtc: any = null\n\n private async _loadWebRTC(): Promise<any> {\n if (!this._wrtc) {\n try {\n this._wrtc = await import('@roamhq/wrtc')\n } catch (error) {\n this.error('WebRTC module not available:', error)\n throw new Error('WebRTC functionality requires @roamhq/wrtc and platform-specific binary packages')\n }\n }\n return this._wrtc\n }\n\n async _processOffer(client: ClientType, data: any): Promise<void> {\n if (!this.allowWebRTC) {\n this.warn('WebRTC is disabled')\n return\n }\n\n const wrtc = await this._loadWebRTC()\n //this.log(\"RTC: Offer received\", data);\n const peerConnection = new (wrtc as any).RTCPeerConnection({\n iceServers: [\n { urls: 'stun:stun.l.google.com:19302' },\n { urls: 'stun:stun.cloudflare.com:3478' },\n { urls: 'stun:freestun.net:3478' },\n ],\n iceCandidatePoolSize: 10,\n })\n\n client.peerConnection = peerConnection\n\n peerConnection.onicecandidate = (event: any) => {\n if (event.candidate) {\n //this.log(\"RTC: ICE candidate generated\", event.candidate.candidate.substring(0, 50) + \"...\");\n this.send(client, {\n c: 'rtc-candidate',\n type: 'ice-candidate',\n candidate: event.candidate, // .toJSON()\n })\n } else {\n //this.log(\"RTC: ICE candidate gathering complete\");\n }\n }\n\n peerConnection.onconnectionstatechange = () => {\n //this.log(`RTC: Connection state changed: ${peerConnection.connectionState}`);\n if (peerConnection.connectionState === 'connected') {\n client.webRTCConnected = true\n this.log(`RTC: Connection established with client ${client.ID}`)\n } else if (\n peerConnection.connectionState === 'failed' ||\n peerConnection.connectionState === 'disconnected' ||\n peerConnection.connectionState === 'closed'\n ) {\n client.webRTCConnected = false\n this.log(`RTC: Connection failed or closed with client ${client.ID}`)\n }\n }\n\n peerConnection.onicegatheringstatechange = () => {\n //this.log(`RTC: ICE gathering state: ${peerConnection.iceGatheringState}`);\n }\n\n peerConnection.oniceconnectionstatechange = () => {\n //this.log(`RTC: ICE connection state: ${peerConnection.iceConnectionState}`);\n if (\n peerConnection.iceConnectionState === 'connected' ||\n peerConnection.iceConnectionState === 'completed'\n ) {\n //this.log(`RTC: ICE connection established with client ${client.ID}`);\n }\n }\n\n try {\n await peerConnection.setRemoteDescription(\n new (wrtc as any).RTCSessionDescription(data)\n )\n //this.log(\"RTC: Remote description set successfully\");\n\n client.dataChannel = peerConnection.createDataChannel('serverchannel', {\n ordered: true,\n maxRetransmits: 1,\n })\n\n client.dataChannel.onopen = () => {\n //this.log(`RTC: Data channel opened for client ${client.ID}`);\n // Try sending a test message\n try {\n const testData = { c: 'test', message: 'Hello WebRTC' }\n this.sendRTC(client, testData)\n } catch (e) {\n this.error(\n `RTC: Error sending test message to client ${client.ID}`,\n e\n )\n }\n }\n\n client.dataChannel.onclose = () => {\n this.log(`RTC: Data channel closed for client ${client.ID}`)\n }\n\n client.dataChannel.onerror = (error: Event) => {\n this.error(`RTC: Data channel error for client ${client.ID}:`, error)\n }\n\n client.dataChannel.onmessage = (event: MessageEvent) => {\n try {\n const data = decode(event.data)\n this.log(\n `RTC: Data channel message from client ${client.ID}:`,\n data\n )\n //this.onMessage(client, data);\n } catch (error) {\n this.error(\n `RTC: Error decoding message from client ${client.ID}:`,\n error\n )\n }\n }\n\n // Create and send answer\n const answer = await peerConnection.createAnswer()\n await peerConnection.setLocalDescription(answer)\n\n //this.log(`RTC: Sending answer to client ${client.ID}`);\n this.send(client, {\n c: 'rtc-answer',\n type: answer.type,\n sdp: answer.sdp,\n })\n } catch (error) {\n this.error(\n `RTC: Error processing offer from client ${client.ID}:`,\n error\n )\n }\n }\n\n async _processICECandidate(client: ClientType, data: any): Promise<void> {\n //this.log(`RTC: Processing ICE candidate from client ${client.ID}`);\n try {\n if (client.peerConnection && data.candidate) {\n await client.peerConnection.addIceCandidate(\n data.candidate\n //new wrtc.RTCIceCandidate(data.candidate)\n )\n //this.log(`RTC: ICE candidate added successfully for client ${client.ID}`);\n } else {\n //this.warn(`RTC: Cannot add ICE candidate for client ${client.ID} - peerConnection not ready or candidate missing`);\n }\n } catch (error) {\n this.error(`RTC: Error adding ICE candidate for client ${client.ID}`)\n }\n }\n\n _clientRTCOpen(client: ClientType): boolean {\n return client.dataChannel !== null && client.dataChannel !== undefined && client.dataChannel.readyState === 'open'\n }\n\n async sendRTC(client: ClientType, message: any): Promise<void> {\n let data = encode(message)\n if (this.allowCompression) {\n data = await compress(data)\n }\n this.stats.sendRTC += data.byteLength\n this.stats._sendRTCUpdate += data.byteLength\n\n let packages = this._splitRTCMessage(data)\n\n if (this.simulateLatency) {\n setTimeout(() => {\n if (this._clientRTCOpen(client)) {\n packages.forEach((p) => {\n client.dataChannel!.send(p)\n })\n }\n }, this.simulateLatency)\n } else {\n if (this._clientRTCOpen(client)) {\n packages.forEach((p) => {\n client.dataChannel!.send(p)\n })\n }\n }\n }\n\n async broadcastRTC(message: any, clients: ClientType[] = []): Promise<void> {\n if (clients.length == 0) {\n clients = this.clients\n }\n let t1 = Date.now()\n let data = encode(message)\n let dl = data.byteLength\n let t2 = Date.now()\n if (this.allowCompression) {\n data = await compress(data)\n }\n let t3 = Date.now()\n\n\n if (data.length > 16384) {\n this.log(`BroadcastRTC message ${dl} -> ${data.length} (${(100.0 * data.length / dl).toFixed()}%) encoding:${t2 - t1}ms compression:${t3 - t1}ms`)\n }\n\n let packages = this._splitRTCMessage(data)\n\n for (let client of this.clients) {\n this.stats.sendRTC += data.byteLength\n this.stats._sendRTCUpdate += data.byteLength\n if (this.simulateLatency) {\n setTimeout(() => {\n if (client.dataChannel && client.dataChannel.readyState === 'open') {\n packages.forEach((p) => {\n client?.dataChannel?.send(p)\n })\n }\n }, this.simulateLatency)\n } else {\n if (client.dataChannel && client.dataChannel.readyState === 'open') {\n packages.forEach((p) => {\n client?.dataChannel?.send(p)\n })\n }\n }\n }\n }\n\n _splitRTCMessage(data: Uint8Array): Uint8Array[] {\n let packages: Uint8Array[]\n if (data.byteLength > 65535) {\n const now = Date.now()\n this.warn(`RTC: Message too large: ${data.byteLength} bytes`)\n // Split the message into smaller packages\n packages = [];\n let offset = 0;\n let mid = this.update +'-'+ now\n let seq = 0\n\n // Create subsequent packages if needed\n while (offset < data.byteLength) {\n const remaining = data.byteLength - offset;\n const chunkSize = Math.min(remaining, MAX_PACKAGE_SIZE);\n const chunk = new Uint8Array(data.buffer, offset, chunkSize);\n let cmessage = {\n c: 'chunk',\n t: now,\n mid: mid,\n seq: seq,\n ofs: offset,\n chs: chunkSize,\n ts: data.byteLength,\n data: chunk,\n last: remaining <= MAX_PACKAGE_SIZE,\n }\n packages.push(encode(cmessage))\n offset += chunkSize;\n seq++;\n }\n\n this.log(`RTC: Large message split into ${packages.length} packages`);\n } else {\n packages = [data]\n this.log(`RTC: Message - ${data.byteLength} bytes`)\n }\n return packages\n }\n\n\n /*= DATABASE =================================================================*/\n // properties (of the documents) that starts with __ are not saved to the database.\n // __properties are restored on hydration. (for example __physicsBody or __bigObject)\n\n getUID(): number {\n this.documents['_server'].nextUID++\n return this.documents['_server'].nextUID\n }\n\n async _initDB(): Promise<void> {\n await this._connectDB()\n await this._loadDocument('_server')\n if (!this.documents['_server']) {\n this._initServerDocument()\n }\n }\n\n async _connectDB(): Promise<void> {\n this.mongoClient = new MongoClient(this.MongoUrl)\n try {\n await this.mongoClient.connect()\n this.log('Connected to MongoDB')\n const db = this.mongoClient.db(this.database)\n this.DB = db\n } catch (error) {\n this.error('Error connecting to MongoDB:', error)\n this.mongoClient = null\n }\n }\n\n async _loadDocument(name: string): Promise<void> {\n this.log(`Loading document '${name}' from MongoDB`)\n if (this.DB) {\n try {\n const doc = await this.DB.collection(this.collection).findOne({\n name: name,\n })\n if (doc) {\n delete (doc as any)._id\n this.documents[name] = doc\n }\n } catch (error) {\n this.error('Error loading document from MongoDB:', error)\n }\n } else {\n this.warn('MongoDB client not initialized. Document not loaded.')\n }\n }\n\n async _saveDocument(name: string): Promise<void> {\n if (this.DB) {\n try {\n const doc = this.documents[name]\n let newdoc = clonewo_(doc, '__')\n this.log(`Saving document '${name}' to MongoDB`)\n await this.DB.collection(this.collection).updateOne(\n { name: name },\n { $set: newdoc },\n { upsert: true }\n )\n this.log('Document saved to MongoDB')\n } catch (error) {\n this.error('Error saving document to MongoDB:', error)\n }\n } else {\n this.warn('MongoDB client not initialized. Document not saved.')\n }\n }\n\n async _saveAllDocuments(): Promise<void> {\n if (!this.allowSave) {\n return\n }\n for (let name in this.documents) {\n await this._saveDocument(name)\n }\n }\n\n async _saveChanges(): Promise<void> {\n if (!this.allowSave) {\n return\n }\n for (let name in this._documentChanged) {\n if (this._documentChanged[name]) {\n await this._saveDocument(name)\n this._documentChanged[name] = false\n }\n }\n }\n\n _initServerDocument(): void {\n this.documents['_server'] = {\n nextUID: 100,\n }\n }\n\n /*= EXIT ===================================================================*/\n\n _exitSignal(signal: string): void {\n if (!this._exited) {\n this.log('\\nEXIT: Caught interrupt signal ' + signal)\n this._exited = true\n clearInterval(this._loopiv)\n clearInterval(this._statsiv)\n clearInterval(this._saveiv)\n this.onBeforeExit()\n this.broadcast({ server: 'Going down' })\n this._saveAllDocuments()\n this._wss!.close()\n setTimeout(() => process.exit(0), 1000)\n }\n }\n\n // To be redefined. Called BEFORE program exit, and saving all documents\n onBeforeExit(): void {}\n}\n","import { Packr } from 'msgpackr';\nimport { FLOAT32_OPTIONS } from 'msgpackr';\nconst { ALWAYS } = FLOAT32_OPTIONS;\n\nlet packr = new Packr({\n useFloat32: ALWAYS\n});\n\nexport function encode(obj: any): Uint8Array {\n return packr.pack(obj)\n}\n\nexport function decode(data: Uint8Array): any {\n return packr.unpack(data)\n}\n\ntype ReactiveCallback = (name: string, operation: string, target: any, path: string, value: any) => void;\n\nexport function reactive(name: string, object: any, callback: ReactiveCallback, path: string = '', excludedProperties: Record<string, boolean> | false = false): any {\n if (object === null || typeof object !== 'object') {\n //console.log('--- Type not object', typeof object)\n return object\n }\n\n function isReactive(p: string): boolean {\n let r = true\n if (p.startsWith('_')) {\n r = false\n }\n if (excludedProperties) {\n if (excludedProperties[p]) {\n r = false\n }\n }\n if (path == '/entities') {\n r = false\n }\n return r\n }\n\n for (const property in object) {\n if (isReactive(property)) {\n //console.log(`path '${path}', prop '${property}' is reactive`)\n object[property] = reactive(\n name,\n object[property],\n callback,\n path + '/' + property,\n excludedProperties\n )\n } else {\n //console.log(`--- path '${path}', property '${property}' is NOT reactive`)\n }\n }\n //console.log(`path '${path}' is reactive`)\n return new Proxy(object, {\n get(target: any, property: string | symbol, receiver: any): any { // ...arguments\n return Reflect.get(target, property, receiver)\n },\n set(target: any, property: string | symbol, value: any): boolean {\n let newvalue: any\n let pn = path + '/' + String(property)\n if (isReactive(String(property))) {\n newvalue = reactive(name, value, callback, pn, excludedProperties)\n callback(name, 'replace', target, pn, newvalue)\n } else {\n newvalue = value\n }\n return Reflect.set(target, property, newvalue)\n },\n deleteProperty(target: any, property: string | symbol): boolean {\n let pn = path + '/' + String(property)\n if (isReactive(String(property))) {\n callback(name, 'remove', target, pn, null)\n }\n delete target[property]\n return true\n },\n })\n\n}\n\nexport function deepGet(obj: any, path: string): any {\n //path = path.replace(/^\\/+/, '')\n let paths = ('' + path).split('/').filter((p) => p)\n let len = paths.length\n for (let i = 0; i < len; i++) {\n if (obj[paths[i]!] == undefined) {\n return undefined\n } else {\n obj = obj[paths[i]!]\n }\n }\n return obj\n}\n\nexport function deepSet(obj: any, path: string, value: any): void {\n //path = path.replace(/^\\/+/, '')\n let paths = ('' + path).split('/').filter((p) => p)\n let len = paths.length\n let i: number\n for (i = 0; i < len - 1; i++) {\n obj = obj[paths[i]!]\n }\n obj[paths[i]!] = value\n}\n\n// recursive clone oject, without properties that starts with _ (or __)\n\nexport function clonewo_(obj: any, excludeStart: string | Record<string, boolean> = '_'): any {\n if (obj === null || typeof obj !== 'object') {\n return obj\n }\n\n function isExcluded(key: string): boolean {\n let e = false\n if (typeof (excludeStart) == 'string' && key.startsWith(excludeStart)) {\n e = true\n } else if (typeof(excludeStart) == 'object') {\n if (excludeStart[key] || key.startsWith('_')) {\n e = true\n }\n }\n return e\n }\n\n if (obj instanceof Map) {\n const mapClone = new Map()\n Array.from(obj.entries()).forEach(([key, value]) => {\n mapClone.set(clonewo_(key, excludeStart), clonewo_(value, excludeStart))\n })\n return mapClone\n }\n\n let clone: any\n if (Array.isArray(obj)) {\n clone = []\n for (let i = 0; i < obj.length; i++) {\n clone[i] = clonewo_(obj[i], excludeStart)\n }\n } else {\n clone = {} as Record<string, any>\n for (let key in obj) {\n if (obj.hasOwnProperty(key) && !isExcluded(key)) {\n if (typeof obj[key] === 'object') {\n clone[key] = clonewo_(obj[key], excludeStart)\n } else {\n clone[key] = obj[key]\n }\n }\n }\n }\n\n return clone\n}\n\nexport function limitPrecision(obj: any): any {\n if (Array.isArray(obj)) {\n return obj.map(limitPrecision)\n } else if (obj !== null && typeof obj === 'object') {\n const result: Record<string, any> = {}\n for (const key in obj) {\n result[key] = limitPrecision(obj[key])\n }\n return result\n } else if (typeof obj === 'number') {\n if (Number.isInteger(obj)) {\n return obj\n } else {\n // Limit to max 3 decimal digits, not fixed\n return parseFloat(obj.toFixed(3))\n }\n } else {\n return obj\n }\n}\n\nexport function msgop(op: any): any {\n let nop: any = {}\n if (!op.o) {\n nop.op = 'replace'\n } else {\n nop.op = ({\n a: 'add',\n r: 'remove',\n d: 'delete',\n t: 'test',\n } as Record<string, string>)[op.o]\n }\n nop.path = op.p\n nop.value = op.v\n return nop\n}\n\nexport function opmsg(op: string, target: any, path: string, value: any): any {\n let c: any = { p: path, v: value }\n if (op != 'replace') {\n c.o = ({\n add: 'a',\n remove: 'r',\n delete: 'd',\n test: 't',\n } as Record<string, string>)[op]\n }\n return c\n}\n\n// a function that converts an int to a hexa string\n// (8 characters long)\nexport function int2hex(int: number): string {\n return int.toString(16)\n}\n\n// a function that converts a hexa string to an int\nexport function hex2int(str: string): bigint {\n if (str.length % 2) {\n str = '0' + str\n }\n return BigInt('0x' + str)\n}\n\n// - Fixed point encoding/decoding functions\n\n// 32-bit unsigned integer encoding\nexport function encode_uint32(uint: number, byteArray?: Uint8Array, offset: number = 0): Uint8Array {\n if (!byteArray) {\n byteArray = new Uint8Array(4)\n }\n let p = offset + 3\n byteArray[p--] = uint & 0xff\n uint >>= 8\n byteArray[p--] = uint & 0xff\n uint >>= 8\n byteArray[p--] = uint & 0xff\n uint >>= 8\n byteArray[p] = uint\n return byteArray\n}\n// 32-bit unsigned integer decoding\nexport function decode_uint32(byteArray: Uint8Array, offset: number = 0): number {\n let p = offset\n return (\n ((byteArray[p++]! & 0x7f) << 24) |\n (byteArray[p++]! << 16) |\n (byteArray[p++]! << 8) |\n byteArray[p]!\n )\n}\n\n// 24-bit unsigned integer encoding\nexport function encode_uint24(uint: number, byteArray?: Uint8Array, offset: number = 0): Uint8Array {\n if (!byteArray) {\n byteArray = new Uint8Array(3)\n }\n let p = offset + 2\n byteArray[p--] = uint & 0xff\n uint >>= 8\n byteArray[p--] = uint & 0xff\n uint >>= 8\n byteArray[p] = uint\n return byteArray\n}\n\n// 24-bit unsigned integer decoding\nexport function decode_uint24(byteArray: Uint8Array, offset: number = 0): number {\n let p = offset\n return (\n (byteArray[p++]! << 16) |\n (byteArray[p++]! << 8) |\n byteArray[p]!\n )\n}\n\n// 16-bit unsigned integer encoding\nexport function encode_uint16(uint: number, byteArray?: Uint8Array, offset: number = 0): Uint8Array {\n if (!byteArray) {\n byteArray = new Uint8Array(2)\n }\n let p = offset + 1\n byteArray[p--] = uint & 0xff\n uint >>= 8\n byteArray[p] = uint\n return byteArray\n}\n\n// 16-bit unsigned integer decoding\nexport function decode_uint16(byteArray: Uint8Array, offset: number = 0): number {\n let p = offset\n return (byteArray[p++]! << 8) | byteArray[p]!\n}\n\n// 24.8 bit ====================================================================\n\n// 24.8-bit fixed point encoding\nexport function encode_fp248(float: number, byteArray?: Uint8Array, offset: number = 0): void {\n const fp = Math.round(Math.abs(float) * 256)\n encode_uint32(fp, byteArray, offset)\n if (float < 0 && byteArray) {\n byteArray[offset]! |= 0x80\n }\n}\n\n// 24.8-bit fixed point decoding\nexport function decode_fp248(byteArray: Uint8Array, offset: number = 0): number {\n const divider = (byteArray[offset]! & 0x80) === 0x80 ? -256 : 256\n byteArray[offset]! &= 0x7f\n const fp = decode_uint32(byteArray, offset)\n return fp / divider\n}\n\n// 16.8 bit ====================================================================\n\n// 16.8-bit fixed point encoding (3 bytes)\nexport function encode_fp168(float: number, byteArray?: Uint8Array, offset: number = 0): void {\n const fp = Math.round(Math.abs(float) * 256)\n encode_uint24(fp, byteArray, offset)\n if (float < 0 && byteArray) {\n byteArray[offset]! |= 0x80\n }\n}\n\n// 16.8-bit fixed point decoding (3 bytes)\nexport function decode_fp168(byteArray: Uint8Array, offset: number = 0): number {\n const divider = (byteArray[offset]! & 0x80) === 0x80 ? -256 : 256\n byteArray[offset]! &= 0x7f\n const fp = decode_uint24(byteArray, offset)\n return fp / divider\n}\n\n// 16.16 bit ===================================================================\n\n// 16.16-bit fixed point encoding\nexport function encode_fp1616(float: number, byteArray?: Uint8Array, offset: number = 0): void {\n const fp = Math.round(Math.abs(float) * 65536)\n encode_uint32(fp, byteArray, offset)\n if (float < 0 && byteArray) {\n byteArray[offset]! |= 0x80\n }\n}\n\n// 16.16-bit fixed point decoding\nexport function decode_fp1616(byteArray: Uint8Array, offset: number = 0): number {\n const divider = (byteArray[offset]! & 0x80) === 0x80 ? -65536 : 65536\n byteArray[offset]! &= 0x7f\n const fp = decode_uint32(byteArray, offset)\n return fp / divider\n}\n\n// 8.8 bit =====================================================================\n\n// 8.8-bit fixed point encoding\nexport function encode_fp88(float: number, byteArray?: Uint8Array, offset: number = 0): void {\n const fp = Math.round(Math.abs(float) * 256)\n encode_uint16(fp, byteArray, offset)\n if (float < 0 && byteArray) {\n byteArray[offset]! |= 0x80\n }\n}\n\n// 8.8-bit fixed point decoding\nexport function decode_fp88(byteArray: Uint8Array, offset: number = 0): number {\n const divider = (byteArray[offset]! & 0x80) === 0x80 ? -256 : 256\n byteArray[offset]! &= 0x7f\n const fp = decode_uint16(byteArray, offset)\n return fp / divider\n}\n\n// 4.12 bit ====================================================================\n\n// 4.12-bit fixed point encoding\nexport function encode_fp412(float: number, byteArray?: Uint8Array, offset: number = 0): void {\n const fp = Math.round(Math.abs(float) * 4096)\n encode_uint16(fp, byteArray, offset)\n if (float < 0 && byteArray) {\n byteArray[offset]! |= 0x80\n }\n}\n\n// 4.12-bit fixed point decoding\nexport function decode_fp412(byteArray: Uint8Array, offset: number = 0): number {\n const divider = (byteArray[offset]! & 0x80) === 0x80 ? -4096 : 4096\n byteArray[offset]! &= 0x7f\n const fp = decode_uint16(byteArray, offset)\n return fp / divider\n}\n\n// 1.7 bit =====================================================================\n\n// 1.7-bit fixed point encoding\nexport function encode_fp17(float: number, byteArray: Uint8Array, offset: number = 0): void {\n const fp = Math.round(Math.abs(float) * 128)\n byteArray[offset] = fp\n if (float < 0) {\n byteArray[offset] |= 0x80\n }\n}\n\n// 1.7-bit fixed point decoding\nexport function decode_fp17(byteArray: Uint8Array, offset: number = 0): number {\n const divider = (byteArray[offset]! & 0x80) === 0x80 ? -128.0 : 128.0\n byteArray[offset]! &= 0x7f\n return byteArray[offset]! / divider\n}\n","import { promisify } from 'util'\nimport { gzip, gunzip, constants } from 'zlib'\n\nconst MIN_COMPRESSED_BUFFER_SIZE = 256\nconst MAX_COMPRESSED_BUFFER_SIZE = 999999\n\nconst lib_compress = promisify(gzip)\nconst lib_decompress = promisify(gunzip)\n\nexport async function compress(buffer:Uint8Array<ArrayBufferLike>) {\n if (buffer.byteLength <= MIN_COMPRESSED_BUFFER_SIZE || buffer.byteLength >= MAX_COMPRESSED_BUFFER_SIZE) return buffer\n try {\n let t1 = Date.now()\n let cbytes = await lib_compress(buffer, {\n level: constants.Z_BEST_SPEED\n })\n let t2 = Date.now()\n let cbuffer = Buffer.from(cbytes)\n let t3 = Date.now()\n\n //console.log(`Node compression ${buffer.byteLength} -> ${cbuffer.byteLength}, time: ${t2 - t1}ms`)\n\n return cbuffer\n } catch (error) {\n console.error('Error compressing buffer:', error)\n return buffer\n }\n}\n\nexport async function decompress(buffer:Uint8Array<ArrayBufferLike>) {\n try {\n let cbytes = await lib_decompress(buffer)\n let cbuffer = Buffer.from(cbytes)\n return cbuffer\n } catch (error) {\n console.error('Error decompressing buffer:', error)\n return buffer\n }\n}\n"],"mappings":"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","names":["require_lib","key","data"]}
|