@phenixrts/sdk 2025.2.3-beta.607 → 2025.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/channels/debug/channels.js +1084 -1084
  2. package/channels/debug/package.json +1 -1
  3. package/channels/debug.private/channels.js +1001 -1001
  4. package/channels/debug.private/package.json +1 -1
  5. package/channels/debug.provideGlobalScope/channels.js +1056 -1056
  6. package/channels/debug.provideGlobalScope/package.json +1 -1
  7. package/channels/es5.debug.private/channels.js +2 -2
  8. package/channels/es5.debug.private/package.json +1 -1
  9. package/channels/min/channels.js +1 -1
  10. package/channels/min/channels.js.map +1 -1
  11. package/channels/min/package.json +1 -1
  12. package/channels/min.private/channels.js +1 -1
  13. package/channels/min.private/channels.js.map +1 -1
  14. package/channels/min.private/package.json +1 -1
  15. package/channels/min.provideGlobalScope/channels.js +1 -1
  16. package/channels/min.provideGlobalScope/channels.js.map +1 -1
  17. package/channels/min.provideGlobalScope/package.json +1 -1
  18. package/channels/package.json +1 -1
  19. package/full/debug/full.js +1195 -1195
  20. package/full/debug/package.json +1 -1
  21. package/full/debug.private/full.js +1112 -1112
  22. package/full/debug.private/package.json +1 -1
  23. package/full/min/full.js +1 -1
  24. package/full/min/full.js.map +1 -1
  25. package/full/min/package.json +1 -1
  26. package/full/min.private/full.js +1 -1
  27. package/full/min.private/full.js.map +1 -1
  28. package/full/min.private/package.json +1 -1
  29. package/full/package.json +1 -1
  30. package/package.json +1 -1
  31. package/publish/debug/package.json +1 -1
  32. package/publish/debug/publish.js +772 -772
  33. package/publish/debug.private/package.json +1 -1
  34. package/publish/debug.private/publish.js +772 -772
  35. package/publish/min/package.json +1 -1
  36. package/publish/min/publish.js +1 -1
  37. package/publish/min/publish.js.map +1 -1
  38. package/publish/min.private/package.json +1 -1
  39. package/publish/min.private/publish.js +1 -1
  40. package/publish/min.private/publish.js.map +1 -1
  41. package/publish/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"full.js","mappings":"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","sources":["webpack://phenix/webpack/universalModuleDefinition","webpack://phenix/./src/promise/PromiseHandler.ts","webpack://phenix/./src/promise/Promise.ts","webpack://phenix/./node_modules/worker-loader/dist/runtime/inline.js","webpack://phenix/./node_modules/@babel/runtime/helpers/arrayLikeToArray.js","webpack://phenix/./node_modules/@babel/runtime/helpers/arrayWithHoles.js","webpack://phenix/./node_modules/@babel/runtime/helpers/arrayWithoutHoles.js","webpack://phenix/./node_modules/@babel/runtime/helpers/assertThisInitialized.js","webpack://phenix/./node_modules/@babel/runtime/helpers/asyncToGenerator.js","webpack://phenix/./node_modules/@babel/runtime/helpers/classCallCheck.js","webpack://phenix/./node_modules/@babel/runtime/helpers/createClass.js","webpack://phenix/./node_modules/@babel/runtime/helpers/defineProperty.js","webpack://phenix/./node_modules/@babel/runtime/helpers/getPrototypeOf.js","webpack://phenix/./node_modules/@babel/runtime/helpers/inherits.js","webpack://phenix/./node_modules/@babel/runtime/helpers/iterableToArray.js","webpack://phenix/./node_modules/@babel/runtime/helpers/iterableToArrayLimit.js","webpack://phenix/./node_modules/@babel/runtime/helpers/nonIterableRest.js","webpack://phenix/./node_modules/@babel/runtime/helpers/nonIterableSpread.js","webpack://phenix/./node_modules/@babel/runtime/helpers/objectWithoutProperties.js","webpack://phenix/./node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js","webpack://phenix/./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js","webpack://phenix/./node_modules/@babel/runtime/helpers/setPrototypeOf.js","webpack://phenix/./node_modules/@babel/runtime/helpers/slicedToArray.js","webpack://phenix/./node_modules/@babel/runtime/helpers/toConsumableArray.js","webpack://phenix/./node_modules/@babel/runtime/helpers/toPrimitive.js","webpack://phenix/./node_modules/@babel/runtime/helpers/toPropertyKey.js","webpack://phenix/./node_modules/@babel/runtime/helpers/typeof.js","webpack://phenix/./node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js","webpack://phenix/webpack/bootstrap","webpack://phenix/webpack/runtime/compat get default export","webpack://phenix/webpack/runtime/define property getters","webpack://phenix/webpack/runtime/hasOwnProperty shorthand","webpack://phenix/webpack/runtime/make namespace object","webpack://phenix/./src/lang/Disposable.ts","webpack://phenix/./src/rx/Subject.ts","webpack://phenix/./src/rx/ReadOnlySubject.ts","webpack://phenix/./src/globalScope/GlobalScope.ts","webpack://phenix/./src/dom/BrowserDetector.ts","webpack://phenix/./src/environment/FeatureEnablement.ts","webpack://phenix/./src/logger/Logger.ts","webpack://phenix/./src/logger/Appenders.ts","webpack://phenix/./src/environment/BuildFeatures.ts","webpack://phenix/./src/logger/LoggerDefaults.ts","webpack://phenix/./src/logger/LoggingThreshold.ts","webpack://phenix/./src/logger/ConsoleAppender.ts","webpack://phenix/./src/lang/Numbers.ts","webpack://phenix/./src/sdk/version/VersionManager.ts","webpack://phenix/./src/telemetry/TelemetryService.ts","webpack://phenix/./src/telemetry/TelemetryApender.ts","webpack://phenix/./src/telemetry/TelemetryConfiguration.ts","webpack://phenix/./src/lang/assertUnreachable.ts","webpack://phenix/./src/logger/LoggingLevelMapping.ts","webpack://phenix/./src/metrics/MetricsConfiguration.ts","webpack://phenix/./src/metrics/TelemetryDefault.ts","webpack://phenix/./src/metrics/TelemetricLevelMapping.ts","webpack://phenix/./src/dom/ConfigurationParameterReader.ts","webpack://phenix/./src/logger/LoggerFactory.ts","webpack://phenix/./src/lang/Strings.ts","webpack://phenix/./src/edgeAuth/EdgeToken.ts","webpack://phenix/./src/edgeAuth/EdgeAuthParser.ts","webpack://phenix/./src/lang/DisposableList.ts","webpack://phenix/./src/dom/ApplicationActivityMonitor.ts","webpack://phenix/./src/rtc/VanillaPeerConnection.ts","webpack://phenix/./src/rtc/VanillaPeerConnectionFactory.ts","webpack://phenix/./src/rtc/PeerConnectionService.ts","webpack://phenix/./src/sdk/TelemetryUrl.ts","webpack://phenix/./src/sdk/Environment.ts","webpack://phenix/./src/environment/Parameters.ts","webpack://phenix/./src/sdk/defaults.ts","webpack://phenix/./src/sdk/discovery/DiscoveryUri.ts","webpack://phenix/./src/time/ExponentialBackoff.ts","webpack://phenix/./src/metrics/MetricsType.ts","webpack://phenix/./src/metrics/MetricType.ts","webpack://phenix/./src/metrics/MetricsService.ts","webpack://phenix/./src/metrics/MetricsFactory.ts","webpack://phenix/./src/sdk/SDK.ts","webpack://phenix/./src/video/Dimension.ts","webpack://phenix/./src/dom/GarbageCollectorManager.ts","webpack://phenix/./src/sdk/channels/ChannelState.ts","webpack://phenix/./src/time/Duration.ts","webpack://phenix/./src/video/VideoTelemetry.ts","webpack://phenix/./src/dom/StreamSetupListener.ts","webpack://phenix/./src/dom/NetworkMonitor.ts","webpack://phenix/./src/video/SessionTelemetry.ts","webpack://phenix/./src/sdk/api/SetTemporaryMaximalBitrate.ts","webpack://phenix/./src/sdk/context/TokenContext.ts","webpack://phenix/./src/sdk/context/ChannelContext.ts","webpack://phenix/./src/sdk/transformation/EncodedStreamSink.ts","webpack://phenix/./src/sdk/transformation/StreamTrackTransform.ts","webpack://phenix/./src/sdk/context/StreamTransformContext.ts","webpack://phenix/./src/sdk/context/PeerConnectionContext.ts","webpack://phenix/./src/sdk/context/StateContext.ts","webpack://phenix/./src/sdk/context/FrameTimingInformationContext.ts","webpack://phenix/./src/sdk/discovery/BitrateModeMapping.ts","webpack://phenix/./src/sdk/discovery/BitrateStateMapping.ts","webpack://phenix/./src/sdk/discovery/EndPoint.ts","webpack://phenix/./src/sdk/discovery/DiscoveryService.ts","webpack://phenix/./src/sdk/discovery/Discovery.ts","webpack://phenix/./src/sdk/streaming/NetworkStates.ts","webpack://phenix/./src/sdk/streaming/WebPlayer.ts","webpack://phenix/./src/sdk/streaming/ShakaPlayer.ts","webpack://phenix/./src/sdk/streaming/HlsPlayer.ts","webpack://phenix/./src/sdk/streaming/ChunkedStreaming.ts","webpack://phenix/./src/sdk/streaming/ChunkedStreamPlaybackMode.ts","webpack://phenix/./src/sdk/streaming/VideoFrameDetector.ts","webpack://phenix/./src/sdk/streaming/ChunkedStreamSubscriber.ts","webpack://phenix/./src/rtc/SdpParser.ts","webpack://phenix/./src/rtc/RtcConfigurationManager.ts","webpack://phenix/./src/rtc/RtcConnectionMonitor.ts","webpack://phenix/./src/sdk/decode/bitstream/codec/VideoCodec.ts","webpack://phenix/./src/sdk/transformation/worker/TransformStreamPipelineWorkerMessage.ts","webpack://phenix/./src/sdk/frameTiming/FrameTimingInformationManager.ts","webpack://phenix/./src/sdk/transformation/worker/TransformStreamPipeline.worker.ts","webpack://phenix/./src/sdk/transformation/worker/MessageRouter.ts","webpack://phenix/./src/sdk/transformation/InsertableStreams.ts","webpack://phenix/./src/sdk/decode/bitstream/codec/AudioCodec.ts","webpack://phenix/./src/sdk/decode/bitstream/codec/h264/nalUnit/AnnexBFourByteStartCode.ts","webpack://phenix/./src/sdk/transformation/surrogateFrames/h264/surrogate28x16IFrame.ts","webpack://phenix/./src/sdk/transformation/surrogateFrames/h264/surrogate28x16PFrame.ts","webpack://phenix/./src/sdk/transformation/SurrogateFrameDataManager.ts","webpack://phenix/./src/sdk/transformation/EncodedMediaTransformManager.ts","webpack://phenix/./src/sdk/decode/bitstream/codec/VideoCodecMapping.ts","webpack://phenix/./src/sdk/decode/bitstream/codec/AudioCodecMapping.ts","webpack://phenix/./src/sdk/streaming/RealTimeStreamSubscriber.ts","webpack://phenix/./src/sdk/streaming/StreamSubscriberFactory.ts","webpack://phenix/./src/sdk/channels/Channel.ts","webpack://phenix/./src/sdk/channels/Channels.ts","webpack://phenix/./src/sdk/publish/PublisherState.ts","webpack://phenix/./src/sdk/publish/PublisherContext.ts","webpack://phenix/./src/rtc/RtcPublishMonitor.ts","webpack://phenix/./src/sdk/publish/RealTimePublisher.ts","webpack://phenix/./src/sdk/publish/Publisher.ts","webpack://phenix/./src/sdk/publish/Publishers.ts","webpack://phenix/./src/sdk/full/index.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"phenix\"] = factory();\n\telse\n\t\troot[\"phenix\"] = factory();\n})(self, () => {\nreturn ","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport Promise from './Promise';\n\nexport default class PromiseHandler<T> {\n onFulfilled: Function | null;\n onRejected: Function | null;\n promise: Promise<T>;\n\n constructor(onFulfilled: Function, onRejected: Function, promise: Promise<T>) {\n this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n this.promise = promise;\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\n// Note: This Promise polyfill is included for browser builds only to address compatibility issues\n// with older browsers whose native Promise<T>implementation does not support .finally.\n\nimport PromiseHandler from './PromiseHandler';\n\nclass Promise<T> {\n _state: number;\n _handled: boolean;\n _value: T | unknown;\n _deferreds: Array<PromiseHandler<T>>;\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n then(onFulfilled: Function | null, onRejected: Function | null): Promise<T>| void;\n\n constructor(callback: Function) {\n if (!(this instanceof Promise)) {\n throw new TypeError('Promises must be constructed via new');\n }\n\n if (typeof callback !== 'function') {\n throw new TypeError('not a function');\n }\n\n this._state = 0;\n this._handled = false;\n this._value = null;\n this._deferreds = [];\n\n this.doResolve(callback);\n }\n\n doResolve(callback: Function): void {\n let done = false;\n\n try {\n callback(\n (value: Promise<T>| null) => {\n if (done) {\n return;\n }\n\n done = true;\n this.promiseResolve(value);\n },\n (reason: Promise<T>| null) => {\n if (done) {\n return;\n }\n\n done = true;\n this.promiseReject(reason);\n }\n );\n } catch (error) {\n if (done) {\n return;\n }\n\n done = true;\n this.promiseReject(error);\n }\n }\n\n promiseResolve(newValue: Promise<T>| null | unknown): void {\n const promise = this as Promise<T>;\n\n try {\n // Promise<T>Resolution Procedure: https://github.com/Promises-aplus/Promises-spec#the-Promise-resolution-procedure\n if (newValue === promise) {\n throw new TypeError('A Promise cannot be resolved with it self.');\n }\n\n if (newValue && (typeof newValue === 'object' || typeof newValue === 'function')) {\n // Disabling a TS compiler check for next line to not do extra if statements\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const then = newValue.then;\n\n if (newValue instanceof Promise) {\n promise._state = 3;\n promise._value = newValue;\n promise.finale();\n\n return;\n } else if (typeof then === 'function') {\n promise.doResolve(function(): void {\n // eslint-disable-next-line prefer-rest-params\n then.apply(newValue, arguments as unknown as [onFulfilled: Function, onRejected: Function]);\n });\n\n return;\n }\n }\n\n promise._state = 1;\n promise._value = newValue;\n promise.finale();\n } catch (e) {\n promise.promiseReject(e);\n }\n }\n\n promiseReject(newValue: unknown): void {\n this._state = 2;\n this._value = newValue;\n this.finale();\n }\n\n finale(): void {\n if (this._state === 2 && this._deferreds.length === 0) {\n Promise._immediate(() => {\n if (!this._handled) {\n Promise._unhandledRejection(this._value);\n }\n });\n }\n\n for (let i = 0, len = this._deferreds.length; i < len; i++) {\n this.handle(this._deferreds[i]);\n }\n\n this._deferreds = [];\n }\n\n handle(deferred: PromiseHandler<T>): void {\n let promise = this as Promise<T>;\n\n while (promise._state === 3) {\n promise = promise._value as Promise<T>;\n }\n\n if (promise._state === 0) {\n promise._deferreds.push(deferred);\n\n return;\n }\n\n promise._handled = true;\n Promise._immediate(() => {\n const callback = promise._state === 1 ? deferred.onFulfilled : deferred.onRejected;\n\n if (callback === null) {\n if (promise._state === 1) {\n deferred.promise.promiseResolve(promise._value);\n } else {\n deferred.promise.promiseReject(promise._value);\n }\n\n return;\n }\n\n let result;\n\n try {\n result = callback(promise._value);\n } catch (e) {\n deferred.promise.promiseReject(e);\n\n return;\n }\n\n deferred.promise.promiseResolve(result);\n });\n }\n\n static all(arr: Array<Promise<unknown>>): Promise<unknown> {\n return new Promise((resolve: Function, reject: Function) => {\n if (!Array.isArray(arr)) {\n return reject(new TypeError('Promise.all accepts an array'));\n }\n\n const args = Array.prototype.slice.call(arr);\n\n if (args.length === 0) {\n return resolve([]);\n }\n\n let remaining = args.length;\n const manageResponse = (i: number, value: Promise<unknown>): void => {\n try {\n if (value && (typeof value === 'object' || typeof value === 'function')) {\n const then = value.then;\n\n if (typeof then === 'function') {\n then.call(\n value,\n (value: Promise<unknown>) => manageResponse(i, value),\n reject\n );\n\n return;\n }\n }\n\n args[i] = value;\n\n if (--remaining === 0) {\n resolve(args);\n }\n } catch (error) {\n reject(error);\n }\n };\n\n for (let i = 0; i < args.length; i++) {\n manageResponse(i, args[i]);\n }\n });\n }\n\n static resolve(value: unknown): Promise<unknown> {\n if (value && typeof value === 'object' && value.constructor === Promise) {\n return value;\n }\n\n return new Promise((resolve: Function) => resolve(value));\n }\n\n static reject(value: unknown): Promise<unknown> {\n return new Promise((_: undefined, reject: Function) => reject(value));\n }\n\n static race(arr: Array<Promise<unknown>>): Promise<unknown> {\n return new Promise((resolve: Function, reject: Function) => {\n if (!Array.isArray(arr)) {\n return reject(new TypeError('Promise.race accepts an array'));\n }\n\n for (let i = 0, len = arr.length; i < len; i++) {\n Promise.resolve(arr[i]).then(resolve, reject);\n }\n });\n }\n\n static _immediate(callback: Function): void {\n const ignored = window.setTimeout(callback, 0);\n }\n\n static _unhandledRejection(error: Promise<unknown>| null | unknown): void {\n if (typeof console !== 'undefined' && console) {\n console.warn('Possible Unhandled Promise Rejection:', error); // eslint-disable-line no-console\n }\n }\n}\n\n// Disabling a TS compiler check for unsupported prototype change\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nPromise.prototype['catch'] = function(onRejected: Function): unknown {\n return this.then(null, onRejected);\n};\n// Disabling a TS compiler check for unsupported prototype change\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nPromise.prototype['then'] = function(onFulfilled: Function, onRejected: Function): Promise<unknown>| void {\n const promise = new Promise((): null => null);\n\n this.handle(new PromiseHandler<unknown>(onFulfilled, onRejected, promise));\n\n return promise;\n};\n// Disabling a TS compiler check for unsupported prototype change\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nPromise.prototype['finally'] = function(callback: Function): Promise<unknown>| void {\n return this.then(\n (value: Promise<unknown>| undefined) => Promise.resolve(callback()).then(() => value, (): null => null),\n (reason: Error | string) => Promise.resolve(callback()).then(() => Promise.reject(reason), (): null => null)\n );\n};\n\nexport default Promise;","\"use strict\";\n\n/* eslint-env browser */\n\n/* eslint-disable no-undef, no-use-before-define, new-cap */\nmodule.exports = function (content, workerConstructor, workerOptions, url) {\n var globalScope = self || window;\n\n try {\n try {\n var blob;\n\n try {\n // New API\n blob = new globalScope.Blob([content]);\n } catch (e) {\n // BlobBuilder = Deprecated, but widely implemented\n var BlobBuilder = globalScope.BlobBuilder || globalScope.WebKitBlobBuilder || globalScope.MozBlobBuilder || globalScope.MSBlobBuilder;\n blob = new BlobBuilder();\n blob.append(content);\n blob = blob.getBlob();\n }\n\n var URL = globalScope.URL || globalScope.webkitURL;\n var objectURL = URL.createObjectURL(blob);\n var worker = new globalScope[workerConstructor](objectURL, workerOptions);\n URL.revokeObjectURL(objectURL);\n return worker;\n } catch (e) {\n return new globalScope[workerConstructor](\"data:application/javascript,\".concat(encodeURIComponent(content)), workerOptions);\n }\n } catch (e) {\n if (!url) {\n throw Error(\"Inline worker is not supported\");\n }\n\n return new globalScope[workerConstructor](url, workerOptions);\n }\n};","function _arrayLikeToArray(r, a) {\n (null == a || a > r.length) && (a = r.length);\n for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];\n return n;\n}\nmodule.exports = _arrayLikeToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _arrayWithHoles(r) {\n if (Array.isArray(r)) return r;\n}\nmodule.exports = _arrayWithHoles, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var arrayLikeToArray = require(\"./arrayLikeToArray.js\");\nfunction _arrayWithoutHoles(r) {\n if (Array.isArray(r)) return arrayLikeToArray(r);\n}\nmodule.exports = _arrayWithoutHoles, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _assertThisInitialized(e) {\n if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n return e;\n}\nmodule.exports = _assertThisInitialized, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function asyncGeneratorStep(n, t, e, r, o, a, c) {\n try {\n var i = n[a](c),\n u = i.value;\n } catch (n) {\n return void e(n);\n }\n i.done ? t(u) : Promise.resolve(u).then(r, o);\n}\nfunction _asyncToGenerator(n) {\n return function () {\n var t = this,\n e = arguments;\n return new Promise(function (r, o) {\n var a = n.apply(t, e);\n function _next(n) {\n asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n);\n }\n function _throw(n) {\n asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n);\n }\n _next(void 0);\n });\n };\n}\nmodule.exports = _asyncToGenerator, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _classCallCheck(a, n) {\n if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\");\n}\nmodule.exports = _classCallCheck, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var toPropertyKey = require(\"./toPropertyKey.js\");\nfunction _defineProperties(e, r) {\n for (var t = 0; t < r.length; t++) {\n var o = r[t];\n o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, toPropertyKey(o.key), o);\n }\n}\nfunction _createClass(e, r, t) {\n return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", {\n writable: !1\n }), e;\n}\nmodule.exports = _createClass, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var toPropertyKey = require(\"./toPropertyKey.js\");\nfunction _defineProperty(e, r, t) {\n return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n value: t,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }) : e[r] = t, e;\n}\nmodule.exports = _defineProperty, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _getPrototypeOf(t) {\n return (module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) {\n return t.__proto__ || Object.getPrototypeOf(t);\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports), _getPrototypeOf(t);\n}\nmodule.exports = _getPrototypeOf, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var setPrototypeOf = require(\"./setPrototypeOf.js\");\nfunction _inherits(t, e) {\n if (\"function\" != typeof e && null !== e) throw new TypeError(\"Super expression must either be null or a function\");\n t.prototype = Object.create(e && e.prototype, {\n constructor: {\n value: t,\n writable: !0,\n configurable: !0\n }\n }), Object.defineProperty(t, \"prototype\", {\n writable: !1\n }), e && setPrototypeOf(t, e);\n}\nmodule.exports = _inherits, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _iterableToArray(r) {\n if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r);\n}\nmodule.exports = _iterableToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _iterableToArrayLimit(r, l) {\n var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"];\n if (null != t) {\n var e,\n n,\n i,\n u,\n a = [],\n f = !0,\n o = !1;\n try {\n if (i = (t = t.call(r)).next, 0 === l) {\n if (Object(t) !== t) return;\n f = !1;\n } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);\n } catch (r) {\n o = !0, n = r;\n } finally {\n try {\n if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return;\n } finally {\n if (o) throw n;\n }\n }\n return a;\n }\n}\nmodule.exports = _iterableToArrayLimit, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nmodule.exports = _nonIterableRest, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nmodule.exports = _nonIterableSpread, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var objectWithoutPropertiesLoose = require(\"./objectWithoutPropertiesLoose.js\");\nfunction _objectWithoutProperties(e, t) {\n if (null == e) return {};\n var o,\n r,\n i = objectWithoutPropertiesLoose(e, t);\n if (Object.getOwnPropertySymbols) {\n var n = Object.getOwnPropertySymbols(e);\n for (r = 0; r < n.length; r++) o = n[r], t.indexOf(o) >= 0 || {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);\n }\n return i;\n}\nmodule.exports = _objectWithoutProperties, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _objectWithoutPropertiesLoose(r, e) {\n if (null == r) return {};\n var t = {};\n for (var n in r) if ({}.hasOwnProperty.call(r, n)) {\n if (e.indexOf(n) >= 0) continue;\n t[n] = r[n];\n }\n return t;\n}\nmodule.exports = _objectWithoutPropertiesLoose, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\nvar assertThisInitialized = require(\"./assertThisInitialized.js\");\nfunction _possibleConstructorReturn(t, e) {\n if (e && (\"object\" == _typeof(e) || \"function\" == typeof e)) return e;\n if (void 0 !== e) throw new TypeError(\"Derived constructors may only return object or undefined\");\n return assertThisInitialized(t);\n}\nmodule.exports = _possibleConstructorReturn, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _setPrototypeOf(t, e) {\n return (module.exports = _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {\n return t.__proto__ = e, t;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports), _setPrototypeOf(t, e);\n}\nmodule.exports = _setPrototypeOf, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var arrayWithHoles = require(\"./arrayWithHoles.js\");\nvar iterableToArrayLimit = require(\"./iterableToArrayLimit.js\");\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray.js\");\nvar nonIterableRest = require(\"./nonIterableRest.js\");\nfunction _slicedToArray(r, e) {\n return arrayWithHoles(r) || iterableToArrayLimit(r, e) || unsupportedIterableToArray(r, e) || nonIterableRest();\n}\nmodule.exports = _slicedToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var arrayWithoutHoles = require(\"./arrayWithoutHoles.js\");\nvar iterableToArray = require(\"./iterableToArray.js\");\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray.js\");\nvar nonIterableSpread = require(\"./nonIterableSpread.js\");\nfunction _toConsumableArray(r) {\n return arrayWithoutHoles(r) || iterableToArray(r) || unsupportedIterableToArray(r) || nonIterableSpread();\n}\nmodule.exports = _toConsumableArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\nfunction toPrimitive(t, r) {\n if (\"object\" != _typeof(t) || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != _typeof(i)) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\nmodule.exports = toPrimitive, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\nvar toPrimitive = require(\"./toPrimitive.js\");\nfunction toPropertyKey(t) {\n var i = toPrimitive(t, \"string\");\n return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nmodule.exports = toPropertyKey, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return (module.exports = _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports), _typeof(o);\n}\nmodule.exports = _typeof, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var arrayLikeToArray = require(\"./arrayLikeToArray.js\");\nfunction _unsupportedIterableToArray(r, a) {\n if (r) {\n if (\"string\" == typeof r) return arrayLikeToArray(r, a);\n var t = {}.toString.call(r).slice(8, -1);\n return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? arrayLikeToArray(r, a) : void 0;\n }\n}\nmodule.exports = _unsupportedIterableToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport IDisposable from './IDisposable';\n\nexport default class Disposable implements IDisposable {\n private _disposed: boolean;\n private _disposable: () => void;\n\n constructor(disposable: () => void) {\n this._disposed = false;\n this._disposable = disposable;\n }\n\n dispose(): void {\n if (this._disposed) {\n return;\n }\n\n this._disposed = true;\n\n return this._disposable.call(this);\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport IDisposable from '../lang/IDisposable';\nimport Disposable from '../lang/Disposable';\nimport IComparable from '../lang/IComparable';\n\nclass DisposableListener<T> extends Disposable {\n constructor(listeners: T[], listener: T) {\n super(() => {\n const idx = listeners.indexOf(listener);\n\n if (idx >= 0) {\n listeners.splice(idx, 1);\n }\n });\n }\n}\n\nexport default class Subject<T> {\n private readonly _listeners: ((value: T) => void)[];\n private _value: T;\n\n constructor(value: T) {\n this._listeners = [];\n this._value = value;\n }\n\n set value(value: T) {\n let changed = this._value !== value;\n\n if (changed && value) {\n const comparable = value as unknown as IComparable<T>;\n\n if (typeof comparable.equals === 'function') {\n changed = !comparable.equals(this._value);\n }\n }\n\n if (!changed) {\n return;\n }\n\n this._value = value;\n\n for (const listener of [...this._listeners]) {\n listener(value);\n }\n }\n\n get value(): T {\n return this._value;\n }\n\n subscribe(listener: (value: T) => void): IDisposable {\n this._listeners.push(listener);\n\n listener(this._value);\n\n return new DisposableListener<(value: T) => void>(this._listeners, listener);\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport Subject from './Subject';\nimport IDisposable from '../lang/IDisposable';\n\nexport default class ReadOnlySubject<T> {\n private readonly _subject: Subject<T>;\n\n constructor(subject: Subject<T>) {\n this._subject = subject;\n }\n\n get value(): T {\n return this._subject.value;\n }\n\n subscribe(listener: (value: T) => void): IDisposable {\n return this._subject.subscribe(listener);\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport IGlobalScope from './IGlobalScope';\nimport IDocument from './IDocument';\nimport ILocation from './ILocation';\nimport INetworkInformation from './INetworkInformation';\nimport INavigator from './INavigator';\nimport IWindow from './IWindow';\nimport IProvidedGlobalScope from './IProvidedGlobalScope';\nimport IDisposable from '../lang/IDisposable';\nimport Subject from '../rx/Subject';\nimport ReadOnlySubject from '../rx/ReadOnlySubject';\n\ntype BrowserGlobalScope = IProvidedGlobalScope;\n\nconst browserGlobalScope: BrowserGlobalScope = {\n document,\n location,\n navigator,\n window\n};\n\nexport class GlobalScope implements IGlobalScope {\n private static readonly _instance = new Subject<IGlobalScope>(new GlobalScope(browserGlobalScope));\n private static readonly _readOnlyInstance: ReadOnlySubject<IGlobalScope> = new ReadOnlySubject(GlobalScope._instance);\n private readonly _document: IDocument;\n private readonly _location: ILocation;\n private readonly _navigator: INavigator;\n private readonly _window: IWindow;\n\n constructor(globalScope: BrowserGlobalScope) {\n this._document = globalScope.document;\n this._location = globalScope.location;\n this._navigator = globalScope.navigator;\n this._window = globalScope.window;\n }\n\n // This method is required to maintain API consistency with ProvidedGlobalScope\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public static setInstance(providedGlobalScope: IProvidedGlobalScope): void {\n throw new Error('This build does not support setting the GlobalScope');\n }\n\n public static getInstance(): ReadOnlySubject<IGlobalScope> {\n return GlobalScope._readOnlyInstance;\n }\n\n public static subscribe(callback: (value: IGlobalScope | null) => void): IDisposable {\n return GlobalScope._readOnlyInstance.subscribe(callback);\n }\n\n get FormData(): typeof FormData {\n return this._window.FormData;\n }\n\n get HTMLVideoElement(): typeof HTMLVideoElement {\n return this._window.HTMLVideoElement;\n }\n\n get MediaStream(): typeof MediaStream {\n return this._window.MediaStream;\n }\n\n get MediaStreamTrack(): typeof MediaStreamTrack {\n return this._window.MediaStreamTrack;\n }\n\n get MediaSource(): typeof MediaSource {\n return this._window.MediaSource;\n }\n\n get RTCPeerConnection(): typeof RTCPeerConnection {\n return this._window.RTCPeerConnection;\n }\n\n get RTCSessionDescription(): typeof RTCSessionDescription {\n return this._window.RTCSessionDescription;\n }\n\n get RTCIceCandidate(): typeof RTCIceCandidate {\n return this._window.RTCIceCandidate;\n }\n\n get URL(): typeof URL {\n return this._window.URL;\n }\n\n get URLSearchParams(): typeof URLSearchParams {\n return this._window.URLSearchParams;\n }\n\n get addDocumentEventListener(): (type: string, listener: (event: Event) => void, options?: boolean | AddEventListenerOptions) => void {\n return this._document.addEventListener.bind(this._document);\n }\n\n get addWindowEventListener(): (type: string, listener: (event: Event) => void, options?: boolean | AddEventListenerOptions) => void {\n return this._window.addEventListener.bind(this._window);\n }\n\n get clearInterval(): (id?: number | undefined) => void {\n return this._window.clearInterval.bind(this._window);\n }\n\n get clearTimeout(): (id?: number | undefined) => void {\n return this._window.clearTimeout.bind(this._window);\n }\n\n get documentCreateElement(): <Element extends HTMLElement>(tag: string) => Element {\n return this._document.createElement.bind(this._document);\n }\n\n get documentHasFocus(): () => boolean {\n return this._document.hasFocus.bind(this._document);\n }\n\n get documentIsHidden(): boolean {\n return !!this._document.hidden;\n }\n\n get documentQuerySelector(): <Element extends HTMLElement>(tag: string) => Element | null {\n return this._document.querySelector.bind(this._document);\n }\n\n get fetch(): (input: string | URL | Request, init?: RequestInit) => Promise<Response> {\n return this._window.fetch.bind(this._window);\n }\n\n get locationHostname(): string {\n return this._location.hostname;\n }\n\n get locationSearch(): string {\n return this._location.search;\n }\n\n get navigatorConnection(): INetworkInformation | undefined {\n return this._navigator.connection;\n }\n\n get navigatorIsOnLine(): boolean {\n return this._navigator.onLine;\n }\n\n get pageLoadTime(): number | undefined {\n return this._window['__phenixPageLoadTime'] || this._window['__pageLoadTime'];\n }\n\n get queueMicrotask(): (microtask: () => void) => void {\n return this._window.queueMicrotask.bind(this._window);\n }\n\n get removeDocumentEventListener(): (type: string, listener: (event: Event) => void, options?: boolean | AddEventListenerOptions) => void {\n return this._document.removeEventListener.bind(this._document);\n }\n\n get requestAnimationFrame(): (callback: FrameRequestCallback) => number {\n return this._window.requestAnimationFrame.bind(this._window);\n }\n\n get removeWindowEventListener(): (type: string, listener: (event: Event) => void, options?: boolean | AddEventListenerOptions) => void {\n return this._window.removeEventListener.bind(this._window);\n }\n\n get setInterval(): (handler: string | Function, timeout?: number | undefined) => number {\n return this._window.setInterval.bind(this._window);\n }\n\n get setTimeout(): (handler: string | Function, timeout?: number | undefined) => number {\n return this._window.setTimeout.bind(this._window);\n }\n}\n\nexport default GlobalScope.getInstance();","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nexport default class BrowserDetector {\n private static readonly _browserNameAndVersionRegex = /(MSIE|(?!Gecko.+)Firefox|(?!AppleWebKit.+Chrome.+)Safari|(?!AppleWebKit.+)Chrome|AppleWebKit(?!.+Chrome|.+Safari)|Gecko(?!.+Firefox))(?: |\\/)([\\d.apre]+)/g;\n private static readonly _browserNameAndVersion = BrowserDetector.parseBrowserNameAndVersion();\n private static readonly _browserName = BrowserDetector.parseBrowserName();\n private static readonly _browserMajorVersion = BrowserDetector.parseBrowserMajorVersion();\n\n private static readonly _isMobile = (/Android|iPhone|iPad|iPod|BlackBerry|Opera Mini/i).test(navigator?.userAgent);\n private static readonly _isAndroid = (/Android/i).test(navigator?.userAgent);\n\n private static readonly _isChrome69 = BrowserDetector._browserNameAndVersion.includes('Chrome/69.');\n private static readonly _isChrome70 = BrowserDetector._browserNameAndVersion.includes('Chrome/70.');\n private static readonly _isChrome71 = BrowserDetector._browserNameAndVersion.includes('Chrome/71.');\n private static readonly _isChrome72 = BrowserDetector._browserNameAndVersion.includes('Chrome/72.');\n private static readonly _isChrome74 = BrowserDetector._browserNameAndVersion.includes('Chrome/74.');\n private static readonly _isChrome75 = BrowserDetector._browserNameAndVersion.includes('Chrome/75.');\n private static readonly _isChrome76 = BrowserDetector._browserNameAndVersion.includes('Chrome/76.');\n private static readonly _isChrome77 = BrowserDetector._browserNameAndVersion.includes('Chrome/77.');\n\n static get browserNameAndVersion(): string {\n return BrowserDetector._browserNameAndVersion;\n }\n\n static get browserName(): string {\n return this._browserName;\n }\n\n static get browserMajorVersion(): number {\n return this._browserMajorVersion;\n }\n\n static get isAndroid(): boolean {\n return BrowserDetector._isAndroid;\n }\n\n static get isChrome69(): boolean {\n return BrowserDetector._isChrome69;\n }\n\n static get isChrome70(): boolean {\n return BrowserDetector._isChrome70;\n }\n\n static get isChrome71(): boolean {\n return BrowserDetector._isChrome71;\n }\n\n static get isChrome72(): boolean {\n return BrowserDetector._isChrome72;\n }\n\n static get isChrome74(): boolean {\n return BrowserDetector._isChrome74;\n }\n\n static get isChrome75(): boolean {\n return BrowserDetector._isChrome75;\n }\n\n static get isChrome76(): boolean {\n return BrowserDetector._isChrome76;\n }\n\n static get isChrome77(): boolean {\n return BrowserDetector._isChrome77;\n }\n\n static isMobile(): boolean {\n return BrowserDetector._isMobile;\n }\n\n private static parseBrowserNameAndVersion(): string {\n if (!navigator || !navigator.userAgent) {\n return '';\n }\n\n const browserNameAndVersion = navigator.userAgent.match(BrowserDetector._browserNameAndVersionRegex);\n\n if (browserNameAndVersion && browserNameAndVersion[0]) {\n return browserNameAndVersion[0];\n }\n\n return BrowserDetector.parseBrowserNameAndVersionForIE();\n }\n\n private static parseBrowserName(): string {\n if (!BrowserDetector._browserNameAndVersion) {\n return '';\n }\n\n const browserNameList = BrowserDetector._browserNameAndVersion.split('/');\n\n if (!browserNameList || !browserNameList[0]) {\n return '';\n }\n\n return browserNameList[0];\n }\n\n private static parseBrowserMajorVersion(): number {\n if (!BrowserDetector._browserNameAndVersion) {\n return 0;\n }\n\n const browserVersionList = BrowserDetector._browserNameAndVersion.split('/');\n\n if (!browserVersionList || !browserVersionList[1]) {\n return 0;\n }\n\n const fullVersion = browserVersionList[1];\n\n if (!fullVersion) {\n return 0;\n }\n\n return Number(fullVersion.split('.')[0]) || 0;\n }\n\n private static parseBrowserNameAndVersionForIE(): string {\n if (!navigator || !navigator.userAgent) {\n return '';\n }\n\n const userAgent = navigator.userAgent;\n const msie = userAgent.indexOf('MSIE ');\n\n if (msie > 0) {\n // IE 10 or older => return version number\n return `IE/${parseInt(userAgent.substring(msie + 5, userAgent.indexOf('.', msie)), 10)}`;\n }\n\n const trident = userAgent.indexOf('Trident/');\n\n if (trident > 0) {\n // IE 11 => return version number\n const version = userAgent.indexOf('rv:');\n\n return `IE/${parseInt(userAgent.substring(version + 3, userAgent.indexOf('.', version)), 10)}`;\n }\n\n return '';\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport GlobalScope from '../globalScope/GlobalScope';\nimport BrowserDetector from '../dom/BrowserDetector';\n\nexport default class FeatureEnablement {\n static get clientOfferDisabled(): boolean {\n // Client offer workflow does not work correctly in the following browsers\n return BrowserDetector.isChrome74 ||\n BrowserDetector.isChrome75 ||\n BrowserDetector.isChrome76 ||\n BrowserDetector.isChrome77;\n }\n\n static get getTransceiversDisabled(): boolean {\n return FeatureEnablement.addTranceiverDisabled;\n }\n\n static get addTranceiverDisabled(): boolean {\n // Chrome 69, 70, 71, 72 exposes `addTranceiver` but it does not work correctly\n return BrowserDetector.isChrome69 ||\n BrowserDetector.isChrome70 ||\n BrowserDetector.isChrome71 ||\n BrowserDetector.isChrome72;\n }\n\n static get getStatsPromiseBasedDisabled(): boolean {\n return BrowserDetector.browserName === 'Chrome' && BrowserDetector.browserMajorVersion <= 66;\n }\n\n static get getCurrentOfferDisabled(): boolean {\n return BrowserDetector.browserName === 'Chrome' && BrowserDetector.browserMajorVersion <= 69 ||\n BrowserDetector.browserName === 'Firefox' && BrowserDetector.browserMajorVersion <= 56;\n }\n\n static get onTrackDisabled(): boolean {\n return BrowserDetector.browserName === 'Chrome' && BrowserDetector.browserMajorVersion <= 63 ||\n BrowserDetector.browserName === 'Firefox' && BrowserDetector.browserMajorVersion <= 52;\n }\n\n static get webkitRTCPeerConnectionEnabled(): boolean {\n return BrowserDetector.browserName === 'Chrome' && BrowserDetector.browserMajorVersion <= 55;\n }\n\n static get promiseBasedPCMethodsDisabled(): boolean {\n return BrowserDetector.browserName === 'Firefox' && BrowserDetector.browserMajorVersion <= 52;\n }\n\n static get shouldUseNativeHls(): boolean {\n return BrowserDetector.browserName === 'Safari' ||\n BrowserDetector.browserName === 'SamsungBrowser';\n }\n\n static get isPrecachingEnabled(): boolean {\n return BrowserDetector.browserName !== 'IE';\n }\n\n static get isForceChromeGarbageCollectionSupported(): boolean {\n return BrowserDetector.browserName === 'Chrome' && typeof GlobalScope.value?.documentCreateElement === 'function';\n }\n\n static get isQueueMicrotaskSupported(): boolean {\n return BrowserDetector.browserName === 'Chrome' && BrowserDetector.browserMajorVersion >= 71 ||\n BrowserDetector.browserName === 'Firefox' && BrowserDetector.browserMajorVersion >= 69 ||\n BrowserDetector.browserName === 'Safari';\n }\n\n static get isMobile(): boolean {\n return BrowserDetector.isMobile();\n }\n\n static get isInsertableStreamsSupported(): boolean {\n return !(typeof MediaStreamTrackProcessor === 'undefined' ||\n typeof MediaStreamTrackGenerator === 'undefined');\n }\n\n static get isEncodedInsertableStreamsSupported(): boolean {\n return typeof RTCRtpReceiver !== 'undefined' && typeof RTCRtpReceiver.prototype.createEncodedStreams !== 'undefined';\n }\n\n static get isRTCRtpScriptTransformSupported(): boolean {\n return typeof RTCRtpScriptTransform !== 'undefined';\n }\n\n static get isRequestVideoFrameCallbackSupported(): boolean {\n return typeof GlobalScope.value?.HTMLVideoElement.prototype.requestVideoFrameCallback !== 'undefined';\n }\n\n static get isRequestAnimationFrameSupported(): boolean {\n return typeof GlobalScope.value?.requestAnimationFrame === 'function';\n }\n\n static get isChannelFrameTimingInformationSupported(): boolean {\n return FeatureEnablement.isRequestVideoFrameCallbackSupported\n && (FeatureEnablement.isEncodedInsertableStreamsSupported || FeatureEnablement.isRTCRtpScriptTransformSupported);\n }\n\n static get errorStackAlsoHasErrorMessage(): boolean {\n return BrowserDetector.browserName !== 'Firefox' && BrowserDetector.browserName !== 'Safari';\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {IAppender} from './IAppender';\nimport Appenders from './Appenders';\nimport LoggingThreshold from './LoggingThreshold';\nimport FeatureEnablement from '../environment/FeatureEnablement';\n\nexport enum LoggingLevel {\n All = -1,\n Trace = 10,\n Debug = 20,\n Info = 30,\n Warn = 40,\n Error = 50,\n Fatal = 60,\n Off = 100,\n}\n\nexport type LoggingLevelType = 'Off' | 'Trace' | 'Debug' | 'Info' | 'Warn' | 'Error' | 'Fatal' | 'All';\n\nexport default class Logger {\n private readonly _category: string;\n private readonly _appenders: Appenders;\n private readonly _threshold: LoggingThreshold;\n\n get category(): string {\n return this._category;\n }\n\n get appenders(): Appenders {\n return this._appenders;\n }\n\n get threshold(): LoggingThreshold {\n return this._threshold;\n }\n\n trace(...args: any): void {\n if (!this._threshold.value || this._threshold.value > LoggingLevel.Trace) {\n return;\n }\n\n this.log(LoggingLevel.Trace, args);\n }\n\n debug(...args: any): void {\n if (!this._threshold.value || this._threshold.value > LoggingLevel.Debug) {\n return;\n }\n\n this.log(LoggingLevel.Debug, args);\n }\n\n info(...args: any): void {\n if (!this._threshold.value || this._threshold.value > LoggingLevel.Info) {\n return;\n }\n\n this.log(LoggingLevel.Info, args);\n }\n\n warn(...args: any): void {\n if (!this._threshold.value || this._threshold.value > LoggingLevel.Warn) {\n return;\n }\n\n this.log(LoggingLevel.Warn, args);\n }\n\n error(...args: any): void {\n if (!this._threshold.value || this._threshold.value > LoggingLevel.Error) {\n return;\n }\n\n this.log(LoggingLevel.Error, args);\n }\n\n fatal(...args: any): void {\n if (!this._threshold.value || this._threshold.value > LoggingLevel.Fatal) {\n return;\n }\n\n this.log(LoggingLevel.Fatal, args);\n }\n\n private log(level: number, args: any): void {\n const date = new Date();\n const message = this.replacePlaceholders(args);\n\n this._appenders.value.forEach((appender: IAppender) => {\n appender.log(level, message, this.category, date);\n });\n }\n\n private replacePlaceholders(args: any): string {\n let replacePlaceholdersString = args[0];\n let index = 0;\n\n while (replacePlaceholdersString.indexOf && args.length > 1 && index >= 0) {\n index = replacePlaceholdersString.indexOf('%', index);\n\n if (index > 0) {\n const type = replacePlaceholdersString.substring(index + 1, index + 2);\n\n switch (type) {\n case '%':\n // Escaped '%%' turns into '%'\n replacePlaceholdersString = replacePlaceholdersString.substring(0, index) + replacePlaceholdersString.substring(index + 1);\n index++;\n\n break;\n case 's':\n case 'd':\n // Replace '%d' or '%s' with the argument\n args[0] = replacePlaceholdersString = this.replaceArgument(\n this.toString(args[1]),\n replacePlaceholdersString,\n index\n );\n args.splice(1, 1);\n\n break;\n case 'j':\n // Replace %j' with the argument\n args[0] = replacePlaceholdersString = this.replaceArgument(\n this.stringify(args[1]),\n replacePlaceholdersString,\n index\n );\n\n args.splice(1, 1);\n\n break;\n default:\n return args.toString();\n }\n }\n }\n\n if (args.length > 1) {\n args = args.reduce((accumulator: string, currentValue: string | Error, index: number, array: string[]) => {\n if (index + 1 === array.length && currentValue instanceof Error) {\n if (FeatureEnablement.errorStackAlsoHasErrorMessage) {\n return accumulator + '\\n' + this.toString(currentValue.stack);\n }\n\n return accumulator + '\\n' + this.toString(currentValue.message) + '\\n' + this.toString(currentValue.stack);\n }\n\n return accumulator + `[${this.toString(currentValue)}]`;\n });\n }\n\n return args.toString();\n }\n\n private stringify(arg: any): string {\n const cache: object[] = [];\n\n try {\n return JSON.stringify(\n arg instanceof Error ? this.toString(arg) : arg,\n (_, value) => {\n if (!!value && value instanceof Object) {\n if (cache.includes(value)) {\n return '<recursive>';\n }\n\n cache.push(value);\n }\n\n return value;\n },\n 2\n );\n } catch (e) {\n return '[object invalid JSON.stringify]';\n }\n }\n\n private replaceArgument(argument: any, replacePlaceholdersString: string, index: number): string {\n return replacePlaceholdersString.substring(0, index) + this.toString(argument) + replacePlaceholdersString.substring(index + 2);\n }\n\n private toString(data: any): string {\n if (typeof data === 'string') {\n return data;\n }\n\n if (typeof data === 'boolean') {\n return data ? 'true' : 'false';\n }\n\n if (typeof data === 'number') {\n return data.toString();\n }\n\n let toStringStr = '';\n\n if (data) {\n if (typeof data === 'function') {\n toStringStr = data.toString();\n } else if (data instanceof Object) {\n try {\n toStringStr = data.toString();\n } catch (e) {\n toStringStr = '[object invalid toString()]';\n }\n }\n }\n\n return toStringStr;\n }\n\n constructor(category: string, appenders: Appenders, threshold: LoggingThreshold) {\n this._category = category;\n this._appenders = appenders;\n this._threshold = threshold;\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport {IAppender} from './IAppender';\n\nexport default class Appenders {\n private _appenders: Array<IAppender> = [];\n\n get value(): Array<IAppender> {\n return this._appenders;\n }\n\n add(appender: IAppender): void {\n this._appenders.push(appender);\n }\n\n remove(appender: IAppender): void {\n this._appenders = this._appenders.reduce((items, item) => {\n if (!(item === appender)) {\n items.push(item);\n }\n\n return items;\n }, [] as Array<IAppender>);\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport {LoggingLevelType} from '../logger/Logger';\nimport {TelemetryLevelType} from '../metrics/MetricsConfiguration';\n\ndeclare const __FEATURES__: {\n sendLocalCandidates: boolean;\n sendLogs: LoggingLevelType;\n sendMetrics: TelemetryLevelType;\n logToConsole: LoggingLevelType;\n};\n\nexport default class BuildFeatures {\n private static _sendLocalCandidates: boolean;\n private static _sendLogs: LoggingLevelType;\n private static _sendMetrics: TelemetryLevelType;\n private static _logToConsole: LoggingLevelType;\n\n static get sendLocalCandidates(): boolean {\n return this._sendLocalCandidates;\n }\n\n static get sendLogs(): LoggingLevelType {\n return this._sendLogs;\n }\n\n static get sendMetrics(): TelemetryLevelType {\n return this._sendMetrics;\n }\n\n static get logToConsole(): LoggingLevelType {\n return this._logToConsole;\n }\n\n static applyFeatures(): void {\n try {\n const features = __FEATURES__;\n\n this._sendLocalCandidates = 'sendLocalCandidates' in features ? features.sendLocalCandidates : true;\n this._sendLogs = 'sendLogs' in features ? features.sendLogs : 'All';\n this._sendMetrics = 'sendMetrics' in features ? features.sendMetrics : 'All';\n this._logToConsole = 'logToConsole' in features ? features.logToConsole : 'All';\n } catch (e) {\n this._sendLocalCandidates = true;\n this._sendLogs = 'All';\n this._sendMetrics = 'All';\n this._logToConsole = 'All';\n }\n }\n}\n\nBuildFeatures.applyFeatures();","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport BuildFeatures from '../environment/BuildFeatures';\nimport {LoggingLevel} from '../logger/Logger';\n\nexport default class LoggerDefaults {\n static get defaultLoggingLevel(): LoggingLevel {\n return LoggingLevel[BuildFeatures.sendLogs];\n }\n\n static get defaultConsoleLoggingLevel(): LoggingLevel {\n return LoggingLevel[BuildFeatures.logToConsole];\n }\n\n static get defaultTelemetryLoggingLevel(): LoggingLevel {\n return LoggingLevel.Info;\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport LoggerDefaults from './LoggerDefaults';\nimport {LoggingLevel} from './Logger';\n\nexport default class LoggingThreshold {\n private _threshold: LoggingLevel = LoggerDefaults.defaultLoggingLevel;\n\n get value(): LoggingLevel {\n return this._threshold;\n }\n\n setThreshold(threshold: LoggingLevel): void {\n this._threshold = threshold;\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport {IAppender} from './IAppender';\nimport {LoggingLevel} from './Logger';\n\nexport default class ConsoleAppender implements IAppender {\n private readonly _threshold: LoggingLevel;\n\n log(logLevel: LoggingLevel, message: string, category: string, date: Date): void {\n if (logLevel < this._threshold) {\n return;\n }\n\n const fullMessage = `${date.toISOString()} [${category}] [${LoggingLevel[logLevel]}] ${message}`;\n\n if (logLevel < LoggingLevel.Warn) {\n console.log(fullMessage);\n\n return;\n }\n\n console.error(fullMessage);\n }\n\n constructor(threshold: LoggingLevel) {\n this._threshold = threshold;\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\n// As float in ECMAScript use 64-bit format it cannot have/handle more than 15 symbols after dot.\nconst maxDigitsInFloatAfterDot = 15;\n\nexport default class Numbers {\n static countNumberLength(value: number): number {\n let incrementForNegativeValue = 0;\n let number = value;\n\n if (number < 0) {\n number *= -1;\n incrementForNegativeValue++;\n }\n\n return Numbers.countDigitsBeforeDecimal(number) + incrementForNegativeValue + (number !== Math.floor(number) ? Numbers.countDigitsAfterDecimal(number) + 1 : 0);\n }\n\n private static fixRounding(value: number, precision: number): number {\n const power = Math.pow(10, precision);\n\n return Math.round(value * power) / power;\n }\n\n private static countDigitsBeforeDecimal(value: number): number {\n let digitsBeforeDecimal = 1;\n let number = value;\n\n while (number >= 10) {\n number = number / 10;\n digitsBeforeDecimal++;\n }\n\n return digitsBeforeDecimal;\n }\n\n private static countDigitsAfterDecimal(value: number): number {\n const originalValue = value;\n let modifiedValue = Math.floor(value);\n let count = 0;\n\n while (modifiedValue !== originalValue && count < maxDigitsInFloatAfterDot) {\n count++;\n modifiedValue = Numbers.fixRounding(originalValue, count);\n }\n\n return count;\n }\n\n private constructor() {\n throw new Error('Numbers is a static class that may not be instantiated');\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\ndeclare const __BUILD_VERSION__: string;\n\nexport default class VersionManager {\n private static _defaultVersion = new Date().toISOString();\n\n static get sdkVersion(): string {\n try {\n return __BUILD_VERSION__;\n } catch (e) {\n return this._defaultVersion;\n }\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport GlobalScope from '../globalScope/GlobalScope';\nimport Numbers from '../lang/Numbers';\nimport {LoggingLevel} from '../logger/Logger';\nimport TelemetryConfiguration from './TelemetryConfiguration';\nimport VersionManager from '../sdk/version/VersionManager';\n\nconst requestSizeLimit = 8192;\n\ninterface ILogItem {\n timestamp: string;\n tenancy: string;\n level: string;\n category: string;\n message: string;\n sessionId: string;\n version: string;\n environment: string;\n fullQualifiedName: string;\n runtime: number;\n}\n\nexport default class TelemetryService {\n private readonly _telemetryConfiguration: TelemetryConfiguration;\n\n private _logs: Array<ILogItem> = [];\n private _isSending: boolean = false;\n private _domain = '';\n\n constructor(telemetryConfiguration: TelemetryConfiguration) {\n this._telemetryConfiguration = telemetryConfiguration;\n this.getLocationHostnameFromGlobalScope().then(locationHostname => {\n this._domain = locationHostname;\n });\n }\n\n push(logLevel: LoggingLevel, message: string, category: string, timestamp: Date): void {\n const runtime = (timestamp.valueOf() - this._telemetryConfiguration.pageLoadTime) / 1000;\n const logRecord = {\n timestamp: timestamp.toISOString(),\n tenancy: this._telemetryConfiguration.tenancy,\n level: LoggingLevel[logLevel],\n category,\n message,\n sessionId: this._telemetryConfiguration.sessionId,\n version: VersionManager.sdkVersion,\n environment: this._telemetryConfiguration.environment,\n fullQualifiedName: this._domain,\n runtime\n };\n\n if (logLevel < LoggingLevel.Error) {\n this._logs.push(logRecord);\n } else {\n this._logs.unshift(logRecord);\n }\n\n const ignored = this.sendLogsIfAble();\n }\n\n private getLocationHostnameFromGlobalScope(): Promise<string> {\n return new Promise<string>(resolveLocationHostname => {\n const globalScopeSubscription = GlobalScope.subscribe(globalScope => {\n if (!globalScope) {\n return;\n }\n\n resolveLocationHostname(globalScope.locationHostname);\n globalScope.setTimeout(() => globalScopeSubscription.dispose(), 0);\n });\n });\n }\n\n private async sendLogs(logMessages: Array<ILogItem>): Promise<Response | void> {\n const formData = new GlobalScope.value.FormData();\n\n formData.append('jsonBody', JSON.stringify({records: logMessages}));\n\n return await GlobalScope.value.fetch(this._telemetryConfiguration.url, {\n method: 'POST',\n body: formData\n });\n }\n\n private async sendLogsIfAble(): Promise<Response | void> {\n if (this._logs.length <= 0 || this._isSending || !GlobalScope.value) {\n return;\n }\n\n let numberOfLogsToSend = 0;\n let sizeOfLogsToSend = 0;\n\n this._isSending = true;\n\n const getItemSize = (item: number | string) => typeof item === 'number' ? Numbers.countNumberLength(item) : item.length;\n const getLogSize = (log: ILogItem): number => Object.values(log)\n .reduce((sum, item) => sum + (item ? getItemSize(item) : 0), 0);\n\n while (this._logs.length > numberOfLogsToSend && getLogSize(this._logs[numberOfLogsToSend]) + sizeOfLogsToSend < requestSizeLimit) {\n sizeOfLogsToSend += getLogSize(this._logs[numberOfLogsToSend]);\n numberOfLogsToSend++;\n }\n\n if (!numberOfLogsToSend) {\n this._logs[numberOfLogsToSend].message = this._logs[numberOfLogsToSend].message.substring(0,\n getLogSize(this._logs[numberOfLogsToSend]) + (requestSizeLimit - getLogSize(this._logs[numberOfLogsToSend])));\n numberOfLogsToSend = 1;\n }\n\n const logMessages = this._logs.slice(0, numberOfLogsToSend);\n\n this._logs = this._logs.slice(numberOfLogsToSend);\n\n return this.sendLogs(logMessages).then(response => {\n this._isSending = false;\n\n const ignored = this.sendLogsIfAble();\n\n return response;\n }).catch(() => {\n this._isSending = false;\n\n const ignored = this.sendLogsIfAble();\n });\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport TelemetryService from './TelemetryService';\nimport TelemetryConfiguration from './TelemetryConfiguration';\nimport {IAppender} from '../logger/IAppender';\nimport {LoggingLevel} from '../logger/Logger';\n\nexport default class TelemetryAppender implements IAppender {\n private readonly _telemetryService: TelemetryService;\n private readonly _tenancy: string;\n private readonly _sessionId: string;\n private readonly _threshold: LoggingLevel;\n\n constructor(telemetryConfiguration: TelemetryConfiguration) {\n this._tenancy = telemetryConfiguration.tenancy;\n this._sessionId = telemetryConfiguration.sessionId;\n this._threshold = telemetryConfiguration.threshold;\n this._telemetryService = new TelemetryService(telemetryConfiguration);\n }\n\n log(logLevel: LoggingLevel, message: string, category: string, date: Date): void {\n if (logLevel < this._threshold) {\n return;\n }\n\n this._telemetryService.push(logLevel, message, category, date);\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport GlobalScope from '../globalScope/GlobalScope';\nimport {LoggingLevel} from '../logger/Logger';\nimport LoggerDefaults from '../logger/LoggerDefaults';\n\nexport default class TelemetryConfiguration {\n private _url = 'https://telemetry.phenixrts.com/telemetry/logs';\n private _tenancy: string = '-';\n private _sessionId: string = '-';\n private _environment: string = '-';\n private _pageLoadTime: number = 0;\n private _threshold = LoggerDefaults.defaultTelemetryLoggingLevel;\n\n get url(): string {\n return this._url;\n }\n\n set url(url: string) {\n const telemetryUrl = new GlobalScope.value.URL(url);\n\n telemetryUrl.pathname = telemetryUrl.pathname + '/logs';\n\n this._url = telemetryUrl.toString();\n }\n\n get environment(): string {\n return this._environment;\n }\n\n set environment(environment: string) {\n this._environment = environment;\n }\n\n get tenancy(): string {\n return this._tenancy;\n }\n\n set tenancy(tenancy: string) {\n this._tenancy = tenancy;\n }\n\n get sessionId(): string {\n return this._sessionId;\n }\n\n set sessionId(sessionId: string) {\n this._sessionId = sessionId;\n }\n\n get pageLoadTime(): number {\n return this._pageLoadTime;\n }\n\n set pageLoadTime(pageLoadTime: number) {\n this._pageLoadTime = pageLoadTime;\n }\n\n get threshold(): LoggingLevel {\n return this._threshold;\n }\n\n set threshold(threshold: LoggingLevel) {\n this._threshold = threshold;\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nexport function assertUnreachable(x: never): never {\n throw new Error(`Unexpected value [${x}]. This should never be reached`);\n}\n\nexport default assertUnreachable;","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport assertUnreachable from '../lang/assertUnreachable';\nimport {LoggingLevel, LoggingLevelType} from './Logger';\n\nexport default class LoggingLevelMapping {\n static convertLoggingLevelToLoggingLevelType(loggingLevel: LoggingLevel): LoggingLevelType {\n switch (loggingLevel) {\n case LoggingLevel.Off:\n return 'Off';\n case LoggingLevel.Trace:\n return 'Trace';\n case LoggingLevel.Debug:\n return 'Debug';\n case LoggingLevel.Info:\n return 'Trace';\n case LoggingLevel.Warn:\n return 'Warn';\n case LoggingLevel.Error:\n return 'Error';\n case LoggingLevel.Fatal:\n return 'Fatal';\n case LoggingLevel.All:\n return 'All';\n default:\n assertUnreachable(loggingLevel);\n }\n }\n\n static convertLoggingLevelTypeToLoggingLevel(loggingLevelType: LoggingLevelType): LoggingLevel {\n switch (loggingLevelType) {\n case 'Off':\n return LoggingLevel.Off;\n case 'Trace':\n return LoggingLevel.Trace;\n case 'Debug':\n return LoggingLevel.Debug;\n case 'Info':\n return LoggingLevel.Info;\n case 'Warn':\n return LoggingLevel.Warn;\n case 'Error':\n return LoggingLevel.Error;\n case 'Fatal':\n return LoggingLevel.Fatal;\n case 'All':\n return LoggingLevel.All;\n default:\n assertUnreachable(loggingLevelType);\n }\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport GlobalScope from '../globalScope/GlobalScope';\nimport TelemetryDefault from './TelemetryDefault';\n\nexport enum TelemetryLevel {\n Off = 100,\n Essential = 10,\n All = -1\n}\n\nexport type TelemetryLevelType = 'Off' | 'Essential' | 'All';\n\nexport default class MetricsConfiguration {\n private _url = 'https://telemetry.phenixrts.com/telemetry/metrics';\n private _tenancy: string = '-';\n private _sessionId: string = '-';\n private _environment: string = '-';\n private _threshold: TelemetryLevel = TelemetryDefault.defaultTelemetryLevel;\n\n get url(): string {\n return this._url;\n }\n\n set url(url: string) {\n const metricsUrl = new GlobalScope.value.URL(url);\n\n metricsUrl.pathname = metricsUrl.pathname + '/metrics';\n\n this._url = metricsUrl.toString();\n }\n\n get environment(): string {\n return this._environment;\n }\n\n set environment(environment: string) {\n this._environment = environment;\n }\n\n get tenancy(): string {\n return this._tenancy;\n }\n\n set tenancy(tenancy: string) {\n this._tenancy = tenancy;\n }\n\n get sessionId(): string {\n return this._sessionId;\n }\n\n set sessionId(sessionId: string) {\n this._sessionId = sessionId;\n }\n\n get threshold(): TelemetryLevel {\n return this._threshold;\n }\n\n set threshold(threshold: TelemetryLevel) {\n this._threshold = threshold;\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport BuildFeatures from '../environment/BuildFeatures';\nimport {TelemetryLevel} from '../metrics/MetricsConfiguration';\n\nexport default class TelemetryDefault {\n static get defaultTelemetryLevel(): TelemetryLevel {\n return TelemetryLevel[BuildFeatures.sendMetrics];\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport {TelemetryLevel, TelemetryLevelType} from './MetricsConfiguration';\nimport assertUnreachable from '../lang/assertUnreachable';\n\nexport default class TelemetryLevelMapping {\n static convertTelemetryLevelToTelemetryLevelType(telemetryLevel: TelemetryLevel): TelemetryLevelType {\n switch (telemetryLevel) {\n case TelemetryLevel.Off:\n return 'Off';\n case TelemetryLevel.Essential:\n return 'Essential';\n case TelemetryLevel.All:\n return 'All';\n default:\n assertUnreachable(telemetryLevel);\n }\n }\n\n static convertTelemetryLevelTypeToTelemetryLevel(telemetryLevelType: TelemetryLevelType): TelemetryLevel {\n switch (telemetryLevelType) {\n case 'Off':\n return TelemetryLevel.Off;\n case 'Essential':\n return TelemetryLevel.Essential;\n case 'All':\n return TelemetryLevel.All;\n default:\n assertUnreachable(telemetryLevelType);\n }\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport GlobalScope from '../globalScope/GlobalScope';\nimport LoggerDefaults from '../logger/LoggerDefaults';\nimport LoggingLevelMapping from '../logger/LoggingLevelMapping';\nimport TelemetryDefault from '../metrics/TelemetryDefault';\nimport TelemetryLevelMapping from '../metrics/TelemetricLevelMapping';\n\nexport default class ConfigurationParameterReader {\n public static getStringValue(name: string): string {\n return ConfigurationParameterReader.readConfigurationParameterValue(name) ||\n ConfigurationParameterReader.readConfigurationParameterURIValue(`${name}-uri-parameter-name`) ||\n ConfigurationParameterReader.defaultStringValue[name];\n }\n\n public static getBooleanValue(name: string): boolean {\n const value = ConfigurationParameterReader.readConfigurationParameterValue(name);\n\n if (value) {\n return value === 'true' || value === '1' || value === 'On';\n }\n\n const valueFromUri = ConfigurationParameterReader.readConfigurationParameterURIValue(`${name}-uri-parameter-name`);\n\n if (valueFromUri) {\n return valueFromUri === 'true' || valueFromUri === '1' || valueFromUri === 'On';\n }\n\n return ConfigurationParameterReader.defaultBooleanValue[name] === true;\n }\n\n private static get defaultStringValue(): { [name: string]: string} {\n return {\n 'phenix-metrics-level': TelemetryLevelMapping.convertTelemetryLevelToTelemetryLevelType(TelemetryDefault.defaultTelemetryLevel),\n 'phenix-logging-level': LoggingLevelMapping.convertLoggingLevelToLoggingLevelType(LoggerDefaults.defaultLoggingLevel),\n 'phenix-console-logging-level': LoggingLevelMapping.convertLoggingLevelToLoggingLevelType(LoggerDefaults.defaultConsoleLoggingLevel),\n 'phenix-telemetry-logging-level': LoggingLevelMapping.convertLoggingLevelToLoggingLevelType(LoggerDefaults.defaultTelemetryLoggingLevel),\n 'phenix-channel-token': '',\n 'phenix-uri': '',\n 'phenix-base-uri': ''\n };\n }\n\n private static get defaultBooleanValue(): { [name: string]: boolean } {\n return {\n 'phenix-automatically-retry-on-failure': true,\n 'phenix-automatically-reconnect-peer-connection': true,\n 'phenix-force-garbage-collection-on-restart': true,\n 'phenix-skip-garbage-collection-on-mobile-devices': true\n };\n }\n\n private static readConfigurationParameterValue(name: string): string | undefined {\n const metaValue = GlobalScope.value.documentQuerySelector(`meta[name='${name}']`);\n\n if (!metaValue) {\n return;\n }\n\n const value = metaValue.getAttribute('value');\n\n if (!value) {\n return;\n }\n\n return value;\n }\n\n private static readConfigurationParameterURIValue(name: string): string | undefined {\n const valueURIParameterName = ConfigurationParameterReader.readConfigurationParameterValue(name);\n\n if (!valueURIParameterName) {\n return;\n }\n\n const value = new GlobalScope.value.URLSearchParams(GlobalScope.value.locationSearch).get(valueURIParameterName) || undefined;\n\n if (!value) {\n return;\n }\n\n return value;\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport {ILogger} from './LoggerInterface';\nimport Logger, {LoggingLevel, LoggingLevelType} from './Logger';\nimport Appenders from './Appenders';\nimport LoggingThreshold from './LoggingThreshold';\nimport ConsoleAppender from './ConsoleAppender';\nimport TelemetryAppender from '../telemetry/TelemetryApender';\nimport TelemetryConfiguration from '../telemetry/TelemetryConfiguration';\nimport ConfigurationParameterReader from '../dom/ConfigurationParameterReader';\nimport LoggerDefaults from './LoggerDefaults';\n\nexport default class LoggerFactory {\n private static _loggers: {[category: string]: ILogger} = {};\n private static _appenders: Appenders = new Appenders();\n private static _threshold: LoggingThreshold = new LoggingThreshold();\n private static _telemetryConfiguration: TelemetryConfiguration = new TelemetryConfiguration();\n\n static get telemetryConfiguration(): TelemetryConfiguration {\n return LoggerFactory._telemetryConfiguration;\n }\n\n static getLogger(category: string): ILogger {\n if (typeof category !== 'string') {\n category = 'SDK';\n }\n\n const logger = LoggerFactory._loggers[category];\n\n if (logger) {\n return logger;\n }\n\n return LoggerFactory._loggers[category] = new Logger(category, this._appenders, this._threshold);\n }\n\n static applyLoggerConfigFromParameterConfiguration(): void {\n LoggerFactory.applyLoggingLevel();\n LoggerFactory.applyAppenderLoggingLevel('console', LoggerFactory.applyConsoleLogger.bind(this));\n LoggerFactory.applyAppenderLoggingLevel('telemetry', LoggerFactory.applyTelemetryLogger.bind(this));\n }\n\n private static applyLoggingLevel(): void {\n const parameterValue = ConfigurationParameterReader.getStringValue('phenix-logging-level') as LoggingLevelType;\n\n if (LoggingLevel[parameterValue]) {\n this._threshold.setThreshold(LoggingLevel[parameterValue]);\n }\n\n return;\n }\n\n private static applyAppenderLoggingLevel(name: string, applyAppender: (level: LoggingLevel) => void): void {\n const parameterValue = ConfigurationParameterReader.getStringValue(`phenix-${name}-logging-level`) as LoggingLevelType;\n\n if (parameterValue === 'Off') {\n return;\n }\n\n applyAppender(LoggingLevel[parameterValue]);\n }\n\n private static applyConsoleLogger(level: LoggingLevel): void {\n this._appenders.add(new ConsoleAppender(level || LoggerDefaults.defaultConsoleLoggingLevel));\n }\n\n private static applyTelemetryLogger(level: LoggingLevel): void {\n this._telemetryConfiguration.threshold = level || LoggerDefaults.defaultTelemetryLoggingLevel;\n\n this._appenders.add(new TelemetryAppender(this._telemetryConfiguration));\n }\n\n private constructor() {\n throw new Error('LoggerFactory is a static class that may not be instantiated');\n }\n}\n\nLoggerFactory.applyLoggerConfigFromParameterConfiguration();","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nexport default class Strings {\n static random(length: number): string {\n const random13Characters = (): string => {\n return Math.random().toString(16).substring(2, 15);\n };\n\n const loops: number = Math.ceil(length / 13);\n\n return new Array(loops).fill(random13Characters).reduce((string, func) => {\n return string + func();\n }, '').substring(0, length);\n }\n\n private constructor() {\n throw new Error('Strings is a static class that may not be instantiated');\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport GlobalScope from '../globalScope/GlobalScope';\n\ninterface IToken {\n uri: URL | null;\n capabilities: string[];\n}\n\ninterface IEdgeToken {\n applicationId: string;\n token: IToken;\n}\n\nexport default class EdgeToken {\n private readonly _applicationId: string;\n private readonly _token: IToken;\n\n constructor(edgeToken: IEdgeToken | null) {\n this._applicationId = edgeToken?.applicationId || '';\n this._token = {\n uri: edgeToken?.token?.uri ? new GlobalScope.value.URL(edgeToken.token.uri) : null,\n capabilities: edgeToken?.token?.capabilities || []\n };\n }\n\n get uri(): URL | null {\n return this._token.uri;\n }\n\n get capabilities(): string[] {\n return this._token.capabilities;\n }\n\n get tenancy(): string {\n return this._applicationId;\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport LoggerFactory from '../logger/LoggerFactory';\nimport {ILogger} from '../logger/LoggerInterface';\nimport EdgeToken from './EdgeToken';\nimport {EncodedEdgeToken} from './EncodedEdgeToken';\n\nconst edgeAuthTokenPrefix = 'DIGEST:';\n\nexport default class EdgeAuthParser {\n private static _logger: ILogger = LoggerFactory.getLogger('EdgeAuthParser');\n\n static parseToken(token: EncodedEdgeToken): EdgeToken {\n if (!this.isEncodedEdgeTokenValid(token)) {\n EdgeAuthParser._logger.error('Token is not valid [%s]', token);\n\n return new EdgeToken(null);\n }\n\n try {\n const decodedToken = atob(token.substr(edgeAuthTokenPrefix.length));\n const edgeToken = JSON.parse(decodedToken);\n\n edgeToken.token = JSON.parse(edgeToken.token);\n\n return new EdgeToken(edgeToken);\n } catch (e) {\n EdgeAuthParser._logger.error('Cannot parse token value', e);\n\n return new EdgeToken(null);\n }\n }\n\n static isEncodedEdgeTokenValid(token: EncodedEdgeToken): boolean {\n return !!token && token.startsWith(edgeAuthTokenPrefix);\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport IDisposable from './IDisposable';\n\nexport default class DisposableList {\n private readonly _list: IDisposable[] = [];\n\n add(disposable: IDisposable): void {\n this._list.push(disposable);\n }\n\n dispose(): void {\n this._list.forEach(disposable => disposable.dispose());\n this._list.length = 0;\n }\n\n toString(): string {\n return `DisposableList[disposables=${this._list.length}]`;\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport {Millisecond} from '../units/Units';\nimport GlobalScope from '../globalScope/GlobalScope';\nimport Disposable from '../lang/Disposable';\nimport DisposableList from '../lang/DisposableList';\nimport Subject from '../rx/Subject';\nimport ReadOnlySubject from '../rx/ReadOnlySubject';\n\nconst visibilityChangeEvent = 'visibilitychange';\n\nexport default class ApplicationActivityMonitor {\n private readonly _disposables: DisposableList = new DisposableList();\n private readonly _readOnlyIsForeground: ReadOnlySubject<boolean>;\n private readonly _isForeground: Subject<boolean>;\n private readonly _timeOfLastTabFocusChange: number = Date.now();\n private _lastBackgroundDuration: Millisecond | null = null;\n\n constructor() {\n this._isForeground = new Subject<boolean>(true);\n this._readOnlyIsForeground = new ReadOnlySubject(this._isForeground);\n this.initialize();\n }\n\n get isForeground(): ReadOnlySubject<boolean> {\n return this._readOnlyIsForeground;\n }\n\n public getTimeSinceLastChange(): number {\n return Date.now() - this._timeOfLastTabFocusChange;\n }\n\n public getLastBackgroundDuration(): Millisecond | null {\n return this._lastBackgroundDuration;\n }\n\n public dispose(): void {\n this._disposables.dispose();\n }\n\n private initialize(): void {\n let backgroundEntryTime: Millisecond | null = null;\n const handleVisibilityChange = () => {\n const isNowForeground = !GlobalScope.value.documentIsHidden;\n\n if (!isNowForeground) {\n backgroundEntryTime = Date.now();\n this._lastBackgroundDuration = null;\n } else if (backgroundEntryTime) {\n this._lastBackgroundDuration = Date.now() - backgroundEntryTime;\n }\n\n this._isForeground.value = isNowForeground;\n };\n\n const useEventCapturePhase = false;\n\n GlobalScope.value.addDocumentEventListener(visibilityChangeEvent, handleVisibilityChange, useEventCapturePhase);\n\n this._disposables.add(new Disposable(() => GlobalScope.value.removeDocumentEventListener(visibilityChangeEvent, handleVisibilityChange, useEventCapturePhase)));\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport GlobalScope from '../globalScope/GlobalScope';\nimport LoggerFactory from '../logger/LoggerFactory';\nimport IPeerConnection from './IPeerConnection';\nimport {ILogger} from '../logger/LoggerInterface';\nimport FeatureEnablement from '../environment/FeatureEnablement';\nimport {ILegacyRTCStatsReport} from './RtcConnectionMonitor';\n\nclass VanillaPeerConnection implements IPeerConnection {\n private readonly _logger: ILogger = LoggerFactory.getLogger('VanillaPeerConnection');\n private _peerConnection: RTCPeerConnection | null;\n\n constructor(configuration?: RTCConfiguration) {\n if (FeatureEnablement.webkitRTCPeerConnectionEnabled) {\n // Ignored as legacy webkitRTCPeerConnection class is deprecated\n // This was a Chrome specific implementation\n // Requires a ts-ignore directive to prevent typescript errors\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this._peerConnection = new webkitRTCPeerConnection(configuration);\n\n return;\n }\n\n this._peerConnection = new GlobalScope.value.RTCPeerConnection(configuration);\n }\n\n get native(): RTCPeerConnection | null {\n return this._peerConnection;\n }\n\n get currentLocalDescription(): RTCSessionDescription | null {\n return this._peerConnection?.currentLocalDescription || null;\n }\n\n get currentRemoteDescription(): RTCSessionDescription | null {\n return this._peerConnection?.currentRemoteDescription || null;\n }\n\n get connectionState(): RTCPeerConnectionState | null {\n return this._peerConnection?.connectionState || null;\n }\n\n get iceConnectionState(): RTCIceConnectionState | null {\n return this._peerConnection?.iceConnectionState || null;\n }\n\n get supportsGetConfiguration(): boolean {\n return typeof this._peerConnection?.getConfiguration === 'function';\n }\n\n get supportsSetConfiguration(): boolean {\n return typeof this._peerConnection?.setConfiguration === 'function';\n }\n\n get supportsGetTransceivers(): boolean {\n return !FeatureEnablement.getTransceiversDisabled && typeof this._peerConnection?.getTransceivers === 'function';\n }\n\n get supportsAddTransceiver(): boolean {\n return !FeatureEnablement.addTranceiverDisabled && typeof this._peerConnection?.addTransceiver === 'function';\n }\n\n async createOffer(options?: RTCOfferOptions): Promise<RTCSessionDescriptionInit> {\n if (!this._peerConnection) {\n throw new Error('No PeerConnection initialized');\n }\n\n if (FeatureEnablement.promiseBasedPCMethodsDisabled) {\n // Ignored as legacy createOffer method with callbacks is deprecated\n // Requires a ts-ignore directive to prevent typescript errors\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return new Promise((resolve, reject) => this._peerConnection.createOffer(resolve, reject, options));\n }\n\n return this._peerConnection.createOffer(options);\n }\n\n async createAnswer(options?: RTCAnswerOptions): Promise<RTCSessionDescriptionInit> {\n if (!this._peerConnection) {\n throw new Error('No PeerConnection initialized');\n }\n\n if (FeatureEnablement.promiseBasedPCMethodsDisabled) {\n // Ignored as legacy createAnswer method with callbacks is deprecated\n // Requires a ts-ignore directive to prevent typescript errors\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return new Promise((resolve, reject) => this._peerConnection.createAnswer(resolve, reject, options));\n }\n\n return this._peerConnection.createAnswer(options);\n }\n\n async setLocalDescription(description: RTCSessionDescriptionInit): Promise<void> {\n if (!this._peerConnection) {\n throw new Error('No PeerConnection initialized');\n }\n\n return this._peerConnection.setLocalDescription(FeatureEnablement.promiseBasedPCMethodsDisabled ?\n new RTCSessionDescription(description) : description);\n }\n\n async setRemoteDescription(description: RTCSessionDescriptionInit): Promise<void> {\n if (!this._peerConnection) {\n throw new Error('No PeerConnection initialized');\n }\n\n const hasCrypto = description.sdp?.match(/a=crypto:/i);\n\n if (hasCrypto) {\n this._logger.warn('SDP a=crypto is not supported');\n }\n\n return this._peerConnection.setRemoteDescription(FeatureEnablement.promiseBasedPCMethodsDisabled ?\n new RTCSessionDescription(description) : description);\n }\n\n getSenders(): RTCRtpSender[] {\n if (!this._peerConnection) {\n throw new Error('No PeerConnection initialized');\n }\n\n return this._peerConnection.getSenders();\n }\n\n getReceivers(): RTCRtpReceiver[] {\n if (!this._peerConnection) {\n throw new Error('No PeerConnection initialized');\n }\n\n return this._peerConnection.getReceivers();\n }\n\n getStats(selector?: MediaStreamTrack | null): Promise<RTCStatsReport> {\n if (!this._peerConnection) {\n throw new Error('No PeerConnection initialized');\n }\n\n return this._peerConnection.getStats(selector);\n }\n\n getStatsLegacy(): Promise<ILegacyRTCStatsReport> {\n if (!this._peerConnection) {\n throw new Error('No PeerConnection initialized');\n }\n\n return new Promise(resolve => {\n // Ignored due to typescript not having legacy 'getStats' method type definition\n // This was a Chrome specific implementation of the 'getStats' method for\n // Chrome@<= 66 detailed here: https://bugs.chromium.org/p/chromium/issues/detail?id=627816\n // Requires a ts-ignore directive to prevent typescript errors\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const ignored = this._peerConnection.getStats(resolve);\n });\n }\n\n addEventListener<T extends keyof RTCPeerConnectionEventMap>(type: T, listener: (this: RTCPeerConnection, event: RTCPeerConnectionEventMap[T]) => unknown, options?: boolean | AddEventListenerOptions): void {\n if (!this._peerConnection) {\n throw new Error('No PeerConnection initialized');\n }\n\n this._peerConnection.addEventListener(type, listener, options);\n }\n\n removeEventListener<T extends keyof RTCPeerConnectionEventMap>(type: T, listener: (this: RTCPeerConnection, event: RTCPeerConnectionEventMap[T]) => unknown, options?: boolean | AddEventListenerOptions): void {\n if (!this._peerConnection) {\n throw new Error('No PeerConnection initialized');\n }\n\n this._peerConnection.removeEventListener(type, listener, options);\n }\n\n getTransceivers(): RTCRtpTransceiver[] {\n if (!this._peerConnection) {\n throw new Error('No PeerConnection initialized');\n }\n\n return this._peerConnection.getTransceivers();\n }\n\n addTransceiver(name: string, options: RTCRtpTransceiverInit): RTCRtpTransceiver {\n if (!this._peerConnection) {\n throw new Error('No PeerConnection initialized');\n }\n\n return this._peerConnection.addTransceiver(name, options);\n }\n\n addStream(mediaStream: MediaStream): void {\n mediaStream.getTracks().forEach(track => {\n if (!this._peerConnection) {\n throw new Error('No PeerConnection initialized');\n }\n\n this._peerConnection.addTrack(track);\n });\n }\n\n getConfiguration(): RTCConfiguration {\n if (!this._peerConnection) {\n throw new Error('No PeerConnection initialized');\n }\n\n return this._peerConnection.getConfiguration();\n }\n\n setConfiguration(configuration: RTCConfiguration): void {\n if (!this._peerConnection) {\n throw new Error('No PeerConnection initialized');\n }\n\n this._peerConnection.setConfiguration(configuration);\n }\n\n set ontrack(handler: ((this: RTCPeerConnection, event: RTCTrackEvent) => unknown) | null) {\n if (!this._peerConnection) {\n throw new Error('No PeerConnection initialized');\n }\n\n this._peerConnection.ontrack = handler;\n }\n\n get ontrack(): ((this: RTCPeerConnection, event: RTCTrackEvent) => unknown) | null {\n if (!this._peerConnection) {\n throw new Error('No PeerConnection initialized');\n }\n\n return this._peerConnection.ontrack;\n }\n\n set onicecandidate(handler: ((this: RTCPeerConnection, event: RTCPeerConnectionIceEvent) => unknown) | null) {\n if (!this._peerConnection) {\n throw new Error('No PeerConnection initialized');\n }\n\n this._peerConnection.onicecandidate = handler;\n }\n\n get onicecandidate(): ((this: RTCPeerConnection, event: RTCPeerConnectionIceEvent) => unknown) | null {\n if (!this._peerConnection) {\n throw new Error('No PeerConnection initialized');\n }\n\n return this._peerConnection.onicecandidate;\n }\n\n set onconnectionstatechange(handler: ((this: RTCPeerConnection, event: Event) => unknown) | null) {\n if (!this._peerConnection) {\n throw new Error('No PeerConnection initialized');\n }\n\n this._peerConnection.onconnectionstatechange = handler;\n }\n\n get onconnectionstatechange(): ((this: RTCPeerConnection, event: Event) => unknown) | null {\n if (!this._peerConnection) {\n throw new Error('No PeerConnection initialized');\n }\n\n return this._peerConnection.onconnectionstatechange;\n }\n\n set oniceconnectionstatechange(handler: ((this: RTCPeerConnection, event: Event) => unknown) | null) {\n if (!this._peerConnection) {\n throw new Error('No PeerConnection initialized');\n }\n\n this._peerConnection.oniceconnectionstatechange = handler;\n }\n\n get oniceconnectionstatechange(): ((this: RTCPeerConnection, event: Event) => unknown) | null {\n if (!this._peerConnection) {\n throw new Error('No PeerConnection initialized');\n }\n\n return this._peerConnection.oniceconnectionstatechange;\n }\n\n close(): void {\n this._peerConnection?.close();\n }\n\n dispose(): void {\n this._peerConnection = null;\n }\n}\n\nexport default VanillaPeerConnection;","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport GlobalScope from '../globalScope/GlobalScope';\nimport IPeerConnectionFactory from './IPeerConnectionFactory';\nimport IPeerConnection from './IPeerConnection';\nimport VanillaPeerConnection from './VanillaPeerConnection';\n\nexport default class VanillaPeerConnectionFactory implements IPeerConnectionFactory {\n async createPeerConnection(configuration?: RTCConfiguration): Promise<IPeerConnection> {\n return new Promise<IPeerConnection>(resolvePeerConnectionPromise => {\n const globalScopeSubscription = GlobalScope.subscribe(globalScope => {\n if (!globalScope) {\n return;\n }\n\n resolvePeerConnectionPromise(new VanillaPeerConnection(configuration));\n globalScopeSubscription.dispose();\n });\n });\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport LoggerFactory from '../logger/LoggerFactory';\nimport {ILogger} from '../logger/LoggerInterface';\nimport Subject from '../rx/Subject';\nimport FeatureEnablement from '../environment/FeatureEnablement';\nimport IPeerConnection from './IPeerConnection';\nimport IPeerConnectionFactory from './IPeerConnectionFactory';\nimport VanillaPeerConnectionFactory from './VanillaPeerConnectionFactory';\n\nexport interface IPeerConnectionOfferInit {\n audioTransceivers?: RTCRtpTransceiver[];\n videoTransceivers?: RTCRtpTransceiver[];\n peerConnection: IPeerConnection;\n localOffer: RTCSessionDescriptionInit;\n}\n\nexport enum EncodedInsertableStreams {\n Disabled,\n Enabled\n}\n\nexport const defaultTrackKinds: ('audio' | 'video')[] = ['audio', 'video'];\n\nexport default class PeerConnectionService {\n private static _logger: ILogger = LoggerFactory.getLogger('PeerConnectionService');\n private static readonly _peerConnectionFactory: Subject<IPeerConnectionFactory> = new Subject<IPeerConnectionFactory>(new VanillaPeerConnectionFactory());\n private static _cached: {\n direction?: RTCRtpTransceiverDirection;\n peerConnection: Promise<IPeerConnectionOfferInit>;\n } | null;\n\n static get peerConnectionFactory(): Subject<IPeerConnectionFactory> {\n return PeerConnectionService._peerConnectionFactory;\n }\n\n static initiateInitialPrecaching(): void {\n if (FeatureEnablement.isPrecachingEnabled) {\n const ignored = PeerConnectionService.precacheCreatePeerConnectionOffer()\n .catch(e => PeerConnectionService._logger.error('Failed to pre-cache peer connection offer', e));\n }\n }\n\n static async precacheCreatePeerConnectionOffer(): Promise<{ peerConnection: Promise<IPeerConnectionOfferInit | void>; direction: RTCRtpTransceiverDirection }> {\n return PeerConnectionService._cached = {\n direction: 'recvonly',\n peerConnection: PeerConnectionService.createPeerConnectionOffer()\n .catch(e => {\n PeerConnectionService._cached = null;\n\n throw e;\n })\n };\n }\n\n static async createPeerConnectionOffer(direction: RTCRtpTransceiverDirection = 'recvonly', trackKinds = defaultTrackKinds, encodedInsertableStreams: EncodedInsertableStreams = EncodedInsertableStreams.Disabled): Promise<IPeerConnectionOfferInit> {\n if (PeerConnectionService._cached && PeerConnectionService._cached.direction === direction && encodedInsertableStreams === EncodedInsertableStreams.Disabled && this.isTracksKindsEquivalentToDefault(trackKinds)) {\n const value = PeerConnectionService._cached.peerConnection;\n\n PeerConnectionService._cached = null;\n\n return value;\n }\n\n const configuration: RTCConfiguration | undefined = FeatureEnablement.isEncodedInsertableStreamsSupported ? {encodedInsertableStreams: encodedInsertableStreams === EncodedInsertableStreams.Enabled} : undefined;\n\n return PeerConnectionService._peerConnectionFactory.value.createPeerConnection(configuration)\n .then(async peerConnection => {\n const supportsAddTransceiver = peerConnection.supportsAddTransceiver;\n const audioTransceivers: RTCRtpTransceiver[] = [];\n const videoTransceivers: RTCRtpTransceiver[] = [];\n\n if (supportsAddTransceiver) {\n trackKinds.forEach(kind => {\n if (kind === 'audio') {\n audioTransceivers.push(peerConnection.addTransceiver(kind, {direction}));\n\n return;\n }\n\n if (kind === 'video') {\n videoTransceivers.push(peerConnection.addTransceiver(kind, {direction}));\n\n return;\n }\n });\n\n return {\n audioTransceivers,\n videoTransceivers,\n peerConnection: peerConnection,\n localOffer: await peerConnection.createOffer(undefined)\n };\n }\n\n const options = direction === 'recvonly' ? {\n offerToReceiveAudio: true,\n offerToReceiveVideo: true\n } : {};\n\n return {\n peerConnection: peerConnection,\n localOffer: await peerConnection.createOffer(options)\n };\n });\n }\n\n private static isTracksKindsEquivalentToDefault(tracksKinds: ('audio' | 'video')[]): boolean {\n if (tracksKinds.length !== defaultTrackKinds.length) {\n return false;\n }\n\n const countTrackKinds = (array: ('audio' | 'video')[]) => array.reduce((trackKindCount, kind) => {\n trackKindCount[kind] = (trackKindCount[kind] || 0) + 1;\n\n return trackKindCount;\n }, {\n audio: 0,\n video: 0\n });\n const countedTrackKinds = countTrackKinds(tracksKinds);\n const countedDefaultTrackKinds = countTrackKinds(defaultTrackKinds);\n\n return countedTrackKinds.audio === countedDefaultTrackKinds.audio && countedTrackKinds.video === countedDefaultTrackKinds.video;\n }\n\n private constructor() {\n throw new Error('PeerConnectionService is a static class that may not be instantiated');\n }\n}\n\nPeerConnectionService.initiateInitialPrecaching();","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport GlobalScope from '../globalScope/GlobalScope';\n\nexport default class TelemetryUrl {\n static getTelemetryUrl(url: string): string {\n try {\n const baseURL = new GlobalScope.value.URL(url);\n const segments = baseURL.hostname.split('.');\n\n switch (baseURL.protocol) {\n case 'ws:':\n baseURL.protocol = 'http:';\n\n break;\n case 'wss:':\n baseURL.protocol = 'https:';\n\n break;\n\n default:\n break;\n }\n\n if (segments.length === 2 ||\n (segments.length === 3 && segments[segments.length - 2].length <= 2 && segments[segments.length - 1].length <= 3)\n ) {\n segments.unshift('telemetry');\n } else if (segments[0].startsWith('stg-') || segments[0].endsWith('-stg') || segments[0].includes('-stg-') || segments[0] === 'stg') {\n segments[0] = 'telemetry-stg';\n } else if (segments[0].startsWith('local') || segments[0].endsWith('-local')) {\n // Leave URL unchanged\n } else {\n segments[0] = 'telemetry';\n }\n\n baseURL.hostname = segments.join('.');\n\n return `${baseURL.origin}/telemetry`;\n } catch (e) {\n return url;\n }\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport GlobalScope from '../globalScope/GlobalScope';\n\nexport default class Environment {\n static getEnvironmentFromUrl(url: string): string {\n try {\n const baseURL = new GlobalScope.value.URL(url);\n\n return baseURL.origin;\n } catch (e) {\n return '';\n }\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\ndeclare const __PARAMETERS__: {\n discovery: IDiscoveryParameter;\n};\n\ninterface IDiscoveryParameter{\n intentions: string;\n}\n\nexport default class Parameters {\n private static _discoveryParameters: IDiscoveryParameter ;\n\n static get discoveryParameters(): IDiscoveryParameter {\n return this._discoveryParameters;\n }\n\n static applyParameters(): void {\n try {\n const parameters = __PARAMETERS__;\n\n this._discoveryParameters = 'discovery' in parameters ? parameters.discovery : {intentions: ''};\n } catch (e) {\n this._discoveryParameters = {intentions: ''};\n }\n }\n}\n\nParameters.applyParameters();","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nconst defaultDiscoveryUri = 'https://pcast.phenixrts.com/pcast/endPoints';\n\nexport {defaultDiscoveryUri};","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport GlobalScope from '../../globalScope/GlobalScope';\nimport Subject from '../../rx/Subject';\nimport VersionManager from '../version/VersionManager';\nimport Parameters from '../../environment/Parameters';\nimport {defaultDiscoveryUri} from '../defaults';\n\nexport default class DiscoveryUri {\n private static readonly _discoveryUri: Subject<string> = new Subject<string>(defaultDiscoveryUri);\n\n static get uri(): Subject<string> {\n return DiscoveryUri._discoveryUri;\n }\n\n static buildDiscoveryUrl(uri: URL): string {\n const url = new GlobalScope.value.URL(uri.toString());\n const sdkVersion = VersionManager.sdkVersion;\n const intentions = Parameters.discoveryParameters.intentions;\n\n url.searchParams.set('version', sdkVersion);\n url.searchParams.set('intentions', intentions);\n url.searchParams.set('_', `${Date.now()}`);\n\n if (url.pathname === '/') {\n url.pathname = '/pcast/endPoints';\n }\n\n return url.toString();\n }\n\n private constructor() {\n throw new Error('DiscoveryUri is a static class that may not be instantiated');\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nconst defaultBackoffIntervalInMillisecond = 2000;\nconst defaultMinBackoffIntervalInMillisecond = 1;\nconst defaultMaxBackoffIntervalInMillisecond = 300000;\n\nexport default class ExponentialBackoff {\n private readonly _backoffIntervalInMillisecond: number;\n private readonly _minBackoffIntervalInMillisecond: number;\n private readonly _maxBackoffIntervalInMillisecond: number;\n\n constructor(\n backoffIntervalInMillisecond: number = defaultBackoffIntervalInMillisecond,\n minBackoffIntervalInMillisecond: number = defaultMinBackoffIntervalInMillisecond,\n maxBackoffIntervalInMillisecond: number = defaultMaxBackoffIntervalInMillisecond\n ) {\n this._backoffIntervalInMillisecond = backoffIntervalInMillisecond;\n this._minBackoffIntervalInMillisecond = minBackoffIntervalInMillisecond;\n this._maxBackoffIntervalInMillisecond = maxBackoffIntervalInMillisecond;\n }\n\n getExponentialBackoffIntervalByFailureCount(failureCount: number): number {\n const backoffIntervalInSeconds = this._backoffIntervalInMillisecond / 1000;\n const randomization = 0.5 + (0.5 * Math.random()); // [0.5, 1)\n const exponentialBackoff = Math.pow(backoffIntervalInSeconds, failureCount - 2); // [1/4 1/2 1 2 4 8 ....]\n const exponentialBackoffWithRandomization = Math.floor(exponentialBackoff) * randomization;\n const exponentialBackoffWithRandomizationInMillisecond = Math.ceil(Math.max(exponentialBackoffWithRandomization * 1000, this._minBackoffIntervalInMillisecond));\n\n return Math.min(exponentialBackoffWithRandomizationInMillisecond, this._maxBackoffIntervalInMillisecond);\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nenum MetricsType {\n TimeToFirstFrame,\n ChannelCreationTimeToFirstFrame,\n Stalled,\n Buffering,\n SetupCompleted,\n SetupFailed,\n RoundTripTime,\n DownlinkThroughputCapacity,\n NetworkType,\n ResolutionChanged,\n ApplicationForeground,\n ApplicationBackground\n}\n\nexport default MetricsType;","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport {TelemetryLevel} from './MetricsConfiguration';\nimport assertUnreachable from '../lang/assertUnreachable';\nimport MetricsType from './MetricsType';\n\nexport default class MetricType {\n private readonly _metrics: MetricsType;\n\n constructor(metrics: MetricsType) {\n this._metrics = metrics;\n }\n\n getName(): string {\n return MetricsType[this._metrics];\n }\n\n getTelemetryLevel(): TelemetryLevel {\n switch (this._metrics) {\n case MetricsType.TimeToFirstFrame:\n return TelemetryLevel.Essential;\n case MetricsType.ChannelCreationTimeToFirstFrame:\n return TelemetryLevel.Essential;\n case MetricsType.Stalled:\n return TelemetryLevel.All;\n case MetricsType.Buffering:\n return TelemetryLevel.All;\n case MetricsType.SetupCompleted:\n return TelemetryLevel.All;\n case MetricsType.SetupFailed:\n return TelemetryLevel.All;\n case MetricsType.RoundTripTime:\n return TelemetryLevel.All;\n case MetricsType.DownlinkThroughputCapacity:\n return TelemetryLevel.All;\n case MetricsType.NetworkType:\n return TelemetryLevel.All;\n case MetricsType.ResolutionChanged:\n return TelemetryLevel.All;\n case MetricsType.ApplicationForeground:\n return TelemetryLevel.All;\n case MetricsType.ApplicationBackground:\n return TelemetryLevel.All;\n default:\n assertUnreachable(this._metrics);\n }\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport GlobalScope from '../globalScope/GlobalScope';\nimport {ILogger} from '../logger/LoggerInterface';\nimport LoggerFactory from '../logger/LoggerFactory';\nimport ExponentialBackoff from '../time/ExponentialBackoff';\nimport VersionManager from '../sdk/version/VersionManager';\nimport MetricType from './MetricType';\nimport MetricsType from './MetricsType';\nimport MetricsConfiguration from './MetricsConfiguration';\n\nconst requestSizeLimit = 1024;\nconst maxBufferedRecords = 2048;\n\ninterface IValue {\n string?: string;\n uint64?: number;\n float?: number;\n}\n\ninterface IMetricRecord {\n timestamp: string;\n tenancy: string;\n sessionId: string;\n streamId?: string;\n metric: string;\n value?: IValue;\n previousValue?: IValue;\n fullQualifiedName: string;\n environment: string;\n version: string;\n runtime: number;\n resource?: string;\n kind?: string;\n}\n\ninterface IMetric {\n streamId?: string;\n metricType: MetricsType;\n value?: IValue;\n previousValue?: IValue;\n runtime: number;\n resource?: string;\n kind?: string;\n}\n\nexport default class MetricsService {\n private readonly _logger: ILogger = LoggerFactory.getLogger('MetricsService');\n private readonly _metricsConfiguration: MetricsConfiguration;\n private readonly _exponentialBackoff: ExponentialBackoff;\n private _metrics: Array<IMetricRecord> = [];\n private _isSending: boolean = false;\n private _failureCount = 0;\n private _domain = '';\n\n constructor(metricsConfiguration: MetricsConfiguration) {\n this._metricsConfiguration = metricsConfiguration;\n this._exponentialBackoff = new ExponentialBackoff();\n this.getLocationHostnameFromGlobalScope().then(locationHostname => {\n this._domain = locationHostname;\n });\n }\n\n get metricsConfiguration(): MetricsConfiguration {\n return this._metricsConfiguration;\n }\n\n push(metric: IMetric): void {\n const {streamId, value, previousValue, runtime, resource, kind} = metric;\n const metricType = new MetricType(metric.metricType);\n\n if (this._metricsConfiguration.threshold > metricType.getTelemetryLevel()) {\n return;\n }\n\n const metricRecord = {\n timestamp: new Date().toISOString(),\n tenancy: this._metricsConfiguration.tenancy,\n sessionId: this._metricsConfiguration.sessionId,\n streamId,\n metric: metricType.getName(),\n value,\n previousValue,\n fullQualifiedName: this._domain,\n environment: this._metricsConfiguration.environment,\n version: VersionManager.sdkVersion,\n runtime,\n resource,\n kind\n };\n\n this._metrics.push(metricRecord);\n\n const ignored = this.sendMetricsIfAble();\n }\n\n private getLocationHostnameFromGlobalScope(): Promise<string> {\n return new Promise<string>(resolveLocationHostname => {\n const globalScopeSubscription = GlobalScope.subscribe(globalScope => {\n if (!globalScope) {\n return;\n }\n\n resolveLocationHostname(globalScope.locationHostname);\n globalScope.setTimeout(() => globalScopeSubscription.dispose(), 0);\n });\n });\n }\n\n private async sendMetrics(metricsMessages: Array<IMetricRecord>): Promise<Response> {\n const formData = new GlobalScope.value.FormData();\n\n formData.append('jsonBody', JSON.stringify({records: metricsMessages}));\n\n return await GlobalScope.value.fetch(this._metricsConfiguration.url, {\n method: 'POST',\n body: formData\n });\n }\n\n private async sendMetricsIfAble(): Promise<Response | void> {\n if (this._metrics.length <= 0 || this._isSending || !GlobalScope.value) {\n return;\n }\n\n this._isSending = true;\n\n const metricsMessages = this._metrics.slice(0, requestSizeLimit);\n\n this._metrics = this._metrics.slice(requestSizeLimit);\n\n return this.sendMetrics(metricsMessages).then(response => {\n if (this.isResponseStatusCodeRetryable(response)) {\n if (this._metrics.length <= maxBufferedRecords) {\n this._failureCount++;\n\n GlobalScope.value.setTimeout(() => {\n this._metrics = [...metricsMessages, ...this._metrics];\n\n this._isSending = false;\n\n const ignored = this.sendMetricsIfAble();\n }, this._exponentialBackoff.getExponentialBackoffIntervalByFailureCount(this._failureCount));\n\n return;\n }\n\n this._logger.error('Too many cached metric records [%s], dropping [%s] records', this._metrics.length, metricsMessages.length);\n }\n\n this._isSending = false;\n this._failureCount = 0;\n\n const ignored = this.sendMetricsIfAble();\n\n return response;\n }).catch(() => {\n this._isSending = false;\n\n const ignored = this.sendMetricsIfAble();\n });\n }\n\n private isResponseStatusCodeRetryable({status}: Response): boolean {\n return /^5\\d{2}$/.test(status.toString());\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport MetricsService from './MetricsService';\nimport MetricsConfiguration, {TelemetryLevel} from './MetricsConfiguration';\nimport SDK from '../sdk/SDK';\nimport TelemetryUrl from '../sdk/TelemetryUrl';\nimport Environment from '../sdk/Environment';\nimport TelemetryLevelMapping from './TelemetricLevelMapping';\n\nexport default class MetricsFactory {\n private static _metricsServices: {[category: string]: MetricsService} = {};\n\n static getMetricsService(url: string): MetricsService {\n if (typeof url !== 'string') {\n throw new Error(`url must be a string instead received [${typeof url}]`);\n }\n\n const metricsServices = MetricsFactory._metricsServices[url];\n\n if (metricsServices) {\n return metricsServices;\n }\n\n const metricsConfiguration = new MetricsConfiguration();\n\n metricsConfiguration.sessionId = SDK.clientSessionId;\n metricsConfiguration.tenancy = SDK.tenancy.value;\n metricsConfiguration.url = TelemetryUrl.getTelemetryUrl(url);\n metricsConfiguration.environment = Environment.getEnvironmentFromUrl(url);\n\n metricsConfiguration.threshold = TelemetryLevelMapping.convertTelemetryLevelTypeToTelemetryLevel(SDK.telemetryLevel);\n\n return MetricsFactory._metricsServices[url] = new MetricsService(metricsConfiguration);\n }\n\n static setTelemetryLevel(telemetryLevel: TelemetryLevel): void {\n const metricsServices = Object.values(MetricsFactory._metricsServices);\n\n if (metricsServices && metricsServices.length) {\n metricsServices.forEach(metricsService => {\n const metricsConfiguration = metricsService.metricsConfiguration;\n\n metricsConfiguration.threshold = telemetryLevel;\n });\n }\n }\n\n private constructor() {\n throw new Error('MetricsFactory is a static class that may not be instantiated');\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport IGlobalScope from '../globalScope/IGlobalScope';\nimport {GlobalScope} from '../globalScope/GlobalScope';\nimport LoggerFactory from '../logger/LoggerFactory';\nimport Strings from '../lang/Strings';\nimport Subject from '../rx/Subject';\nimport ReadOnlySubject from '../rx/ReadOnlySubject';\nimport EdgeAuthParser from '../edgeAuth/EdgeAuthParser';\nimport {ILogger} from '../logger/LoggerInterface';\nimport {LoggingLevel, LoggingLevelType} from '../logger/Logger';\nimport ConsoleAppender from '../logger/ConsoleAppender';\nimport TelemetryAppender from '../telemetry/TelemetryApender';\nimport ConfigurationParameterReader from '../dom/ConfigurationParameterReader';\nimport MetricsConfiguration, {TelemetryLevel, TelemetryLevelType} from '../metrics/MetricsConfiguration';\nimport MetricsService from '../metrics/MetricsService';\nimport TelemetryLevelMapping from '../metrics/TelemetricLevelMapping';\nimport LoggingLevelMapping from '../logger/LoggingLevelMapping';\nimport BuildFeatures from '../environment/BuildFeatures';\nimport BrowserDetector from '../dom/BrowserDetector';\nimport ApplicationActivityMonitor from '../dom/ApplicationActivityMonitor';\nimport IPeerConnectionFactory from '../rtc/IPeerConnectionFactory';\nimport PeerConnectionService from '../rtc/PeerConnectionService';\nimport TelemetryUrl from './TelemetryUrl';\nimport Environment from './Environment';\nimport DiscoveryUri from './discovery/DiscoveryUri';\nimport MetricsFactory from '../metrics/MetricsFactory';\nimport TelemetryDefault from '../metrics/TelemetryDefault';\nimport {ShakaPlayerType} from './streaming/IShakaPlayer';\nimport {HlsPlayerType} from './streaming/IHlsPlayer';\nimport {WebPlayerType} from './streaming/IWebPlayer';\nimport IProvidedGlobalScope from '../globalScope/IProvidedGlobalScope';\n\nconst pageLoadTime = GlobalScope.getInstance().value?.pageLoadTime || Date.now();\n\ninterface IInitOptions {\n discoveryUri?: string;\n peerConnectionFactory?: IPeerConnectionFactory;\n telemetryLevel?: TelemetryLevelType;\n loggingLevel?: LoggingLevelType;\n consoleLoggingLevel?: LoggingLevelType;\n automaticallyPlayMediaStream?: boolean;\n automaticallyMuteVideoOnPlayFailure?: boolean;\n webPlayerLoader?: (value: (player: WebPlayerType) => void) => void;\n shakaPlayerLoader?: (value: (player: ShakaPlayerType) => void) => void;\n hlsJsLoader?: (value: (player: HlsPlayerType) => void) => void;\n}\n\nexport default class SDK {\n private static _automaticallyRetryOnFailure = ConfigurationParameterReader.getBooleanValue('phenix-automatically-retry-on-failure');\n private static _automaticallyReconnectPeerConnection = ConfigurationParameterReader.getBooleanValue('phenix-automatically-reconnect-peer-connection');\n private static _automaticallyPlayMediaStream = true;\n private static _automaticallyMuteVideoOnPlayFailure = true;\n private static _forceGarbageCollectionOnRestart = ConfigurationParameterReader.getBooleanValue('phenix-force-garbage-collection-on-restart');\n private static _skipGarbageCollectionOnMobileDevices = ConfigurationParameterReader.getBooleanValue('phenix-skip-garbage-collection-on-mobile-devices');\n private static _webPlayerLoader: (value: (player: WebPlayerType) => void) => void;\n private static _shakaPlayerLoader: (value: (player: ShakaPlayerType) => void) => void;\n private static _hlsJsLoader: (value: (player: HlsPlayerType) => void) => void;\n private static _applicationActivityMonitor: ApplicationActivityMonitor | null;\n private static _environment: Subject<string> = new Subject<string>('');\n private static _telemetryUrl: Subject<string> = new Subject<string>('https://telemetry.phenixrts.com/telemetry');\n private static _maximalNumberOfPeerConnectionReconnectAttempts = 8;\n private static _telemetryLevel: Subject<TelemetryLevel> = new Subject<TelemetryLevel>(TelemetryDefault.defaultTelemetryLevel);\n private static _metricsService: MetricsService;\n private static _metricsConfiguration: MetricsConfiguration;\n private static readonly _sendLocalCandidates: Subject<boolean> = new Subject(BuildFeatures.sendLocalCandidates);\n private static readonly _tenancy: Subject<string> = new Subject<string>('');\n private static readonly _clientSessionId: string = Strings.random(32);\n private static readonly _loadedTimestamp: Date = new Date();\n private static readonly _logger: ILogger = LoggerFactory.getLogger('SDK');\n private static readonly _initialized: Subject<boolean> = new Subject<boolean>(false);\n private static readonly _readOnlyInitialized: ReadOnlySubject<boolean> = new ReadOnlySubject<boolean>(SDK._initialized);\n private static readonly _readOnlyDiscoveryUri: ReadOnlySubject<string> = new ReadOnlySubject<string>(DiscoveryUri.uri);\n private static readonly _readOnlyPeerConnectionFactory: ReadOnlySubject<IPeerConnectionFactory> = new ReadOnlySubject<IPeerConnectionFactory>(PeerConnectionService.peerConnectionFactory);\n\n static get pageLoadTime(): number {\n return pageLoadTime;\n }\n\n static get sendLocalCandidates(): Subject<boolean> {\n return this._sendLocalCandidates;\n }\n\n static get tenancy(): Subject<string> {\n return this._tenancy;\n }\n\n static get clientSessionId(): string {\n return SDK._clientSessionId;\n }\n\n static get loadedTimestamp(): Date {\n return SDK._loadedTimestamp;\n }\n\n static get initialized(): ReadOnlySubject<boolean> {\n return SDK._readOnlyInitialized;\n }\n\n static get discoveryUri(): ReadOnlySubject<string> {\n return SDK._readOnlyDiscoveryUri;\n }\n\n static get peerConnectionFactory(): ReadOnlySubject<IPeerConnectionFactory> {\n return SDK._readOnlyPeerConnectionFactory;\n }\n\n static get automaticRetryOnFailure(): boolean {\n return SDK._automaticallyRetryOnFailure;\n }\n\n static get automaticallyReconnectPeerConnection(): boolean {\n return SDK._automaticallyReconnectPeerConnection;\n }\n\n static get automaticallyPlayMediaStream(): boolean {\n return SDK._automaticallyPlayMediaStream;\n }\n\n static get automaticallyMuteVideoOnPlayFailure(): boolean {\n return SDK._automaticallyMuteVideoOnPlayFailure;\n }\n\n static get forceGarbageCollectionOnRestart(): boolean {\n return this._forceGarbageCollectionOnRestart;\n }\n\n static get skipGarbageCollectionOnMobileDevices(): boolean {\n return this._skipGarbageCollectionOnMobileDevices;\n }\n\n static get webPlayerLoader(): (value: (player: WebPlayerType) => void) => void {\n return this._webPlayerLoader;\n }\n\n static get shakaPlayerLoader(): (value: (player: ShakaPlayerType) => void) => void {\n return this._shakaPlayerLoader;\n }\n\n static get hlsJsLoader(): (value: (player: HlsPlayerType) => void) => void {\n return this._hlsJsLoader;\n }\n\n static get metricsService(): MetricsService {\n return SDK._metricsService;\n }\n\n static get applicationActivityMonitor(): ApplicationActivityMonitor | null {\n return this._applicationActivityMonitor;\n }\n\n static get telemetryUrl(): Subject<string> {\n return this._telemetryUrl;\n }\n\n static get maximalNumberOfPeerConnectionReconnectAttempts(): number {\n return this._maximalNumberOfPeerConnectionReconnectAttempts;\n }\n\n static set maximalNumberOfPeerConnectionReconnectAttempts(retriesAmount: number) {\n this._maximalNumberOfPeerConnectionReconnectAttempts = retriesAmount;\n }\n\n static get loggingLevel(): LoggingLevelType {\n return LoggingLevelMapping.convertLoggingLevelToLoggingLevelType(this._logger.threshold.value);\n }\n\n static get telemetryLevel(): TelemetryLevelType {\n return TelemetryLevelMapping.convertTelemetryLevelToTelemetryLevelType(SDK._telemetryLevel.value);\n }\n\n static get browserDetector(): BrowserDetector {\n return BrowserDetector;\n }\n\n static applyTelemetryConfiguration(): void {\n const telemetryConfiguration = LoggerFactory.telemetryConfiguration;\n\n telemetryConfiguration.sessionId = SDK.clientSessionId;\n telemetryConfiguration.pageLoadTime = SDK.pageLoadTime;\n\n const ignoredEnvironment = SDK._environment.subscribe(environment => {\n telemetryConfiguration.environment = environment;\n });\n const ignoredDiscoveryUri = SDK.telemetryUrl.subscribe(value => {\n const telemetryAppender = this._logger.appenders.value.find(appender => appender instanceof TelemetryAppender);\n\n if (telemetryAppender) {\n telemetryConfiguration.url = value;\n\n this._logger.appenders.remove(telemetryAppender);\n this._logger.appenders.add(new TelemetryAppender(telemetryConfiguration));\n this._logger.info('Telemetry URL was set to [%s]', telemetryConfiguration.url);\n }\n });\n const ignoredTenancy = SDK._tenancy.subscribe(tenancy => {\n const telemetryAppender = this._logger.appenders.value.find(appender => appender instanceof TelemetryAppender);\n\n if (telemetryAppender && tenancy) {\n telemetryConfiguration.tenancy = tenancy;\n\n this._logger.appenders.remove(telemetryAppender);\n this._logger.appenders.add(new TelemetryAppender(telemetryConfiguration));\n this._logger.info('Telemetry tenancy was set to [%s]', telemetryConfiguration.tenancy);\n }\n });\n }\n\n static applyMetricsConfiguration(): void {\n SDK._metricsService = MetricsFactory.getMetricsService(DiscoveryUri.uri.value);\n SDK._metricsConfiguration = SDK._metricsService.metricsConfiguration;\n\n SDK._metricsConfiguration.sessionId = SDK.clientSessionId;\n\n const ignoredEnvironment = SDK._environment.subscribe(environment => {\n SDK._metricsConfiguration.environment = environment;\n });\n const ignoredDiscoveryUri = SDK.telemetryUrl.subscribe(value => {\n SDK._metricsConfiguration.url = value;\n });\n const ignoredTenancy = SDK._tenancy.subscribe(tenancy => {\n SDK._metricsConfiguration.tenancy = tenancy;\n });\n const value = ConfigurationParameterReader.getStringValue('phenix-metrics-level') as TelemetryLevelType;\n\n if (value) {\n MetricsFactory.setTelemetryLevel(TelemetryLevel[value]);\n }\n\n const ignoredTelemetryLevel = SDK._telemetryLevel.subscribe(telemetryLevel => {\n MetricsFactory.setTelemetryLevel(telemetryLevel);\n });\n }\n\n static applyAutomaticallyRetryOnFailureFromParameterConfiguration(): void {\n this._automaticallyRetryOnFailure = ConfigurationParameterReader.getBooleanValue('phenix-automatically-retry-on-failure');\n this._logger.info('Automatically retry on failure is set to: [%s]', this._automaticallyRetryOnFailure);\n\n return;\n }\n\n static applyAutomaticallyReconnectPeerConnectionFromParameterConfiguration(): void {\n this._automaticallyReconnectPeerConnection = ConfigurationParameterReader.getBooleanValue('phenix-automatically-reconnect-peer-connection');\n this._logger.info('Automatically reconnect peer connection is set to: [%s]', this._automaticallyReconnectPeerConnection);\n\n return;\n }\n\n static applyForceGarbageCollectionOnRestartFromParameterConfiguration(): void {\n this._forceGarbageCollectionOnRestart = ConfigurationParameterReader.getBooleanValue('phenix-force-garbage-collection-on-restart');\n this._logger.info('Force garbage collection on restart is set to: [%s]', this._forceGarbageCollectionOnRestart);\n\n return;\n }\n\n static applySkipGarbageCollectionOnMobileDevicesFromParameterConfiguration(): void {\n this._skipGarbageCollectionOnMobileDevices = ConfigurationParameterReader.getBooleanValue('phenix-skip-garbage-collection-on-mobile-devices');\n this._logger.info('Skip garbage collection on mobile devices on restart is set to: [%s]', this._skipGarbageCollectionOnMobileDevices);\n\n return;\n }\n\n static applyDiscoveryUriDefaultFromParameterConfiguration(): void {\n SDK.discoveryUri.subscribe(value => {\n SDK.telemetryUrl.value = SDK.getTelemetryUrl(value);\n SDK._environment.value = Environment.getEnvironmentFromUrl(value);\n });\n\n const channelToken = ConfigurationParameterReader.getStringValue('phenix-channel-token');\n\n if (channelToken) {\n const edgeToken = EdgeAuthParser.parseToken(channelToken);\n\n SDK._tenancy.value = edgeToken.tenancy;\n DiscoveryUri.uri.value = (edgeToken.uri || SDK.discoveryUri.value).toString();\n\n this._logger.info('Discovery URI set from configuration parameter to [%s]', SDK.discoveryUri.value);\n\n return;\n }\n\n const uriValue = ConfigurationParameterReader.getStringValue('phenix-uri');\n\n if (uriValue) {\n DiscoveryUri.uri.value = uriValue;\n this._logger.info('Discovery URI set from \"phenix-uri\" configuration parameter tag to [%s]', SDK.discoveryUri.value);\n\n return;\n }\n\n const baseURIValue = ConfigurationParameterReader.getStringValue('phenix-base-uri');\n\n if (baseURIValue) {\n const globalScope = GlobalScope.getInstance().value;\n const uri = new globalScope.URL(baseURIValue);\n\n uri.pathname = '/pcast/endPoints';\n DiscoveryUri.uri.value = uri.toString();\n this._logger.info('Discovery URI set from \"phenix-base-uri\" configuration parameter tag to [%s]', SDK.discoveryUri.value);\n\n return;\n }\n }\n\n static onLoad(globalScope: IGlobalScope | null): void {\n if (!globalScope) {\n return;\n }\n\n if (this._initialized.value) {\n this._logger.warn('SDK has already been loaded');\n\n return;\n }\n\n globalScope.addWindowEventListener('unload', () => {\n SDK.dispose();\n });\n\n SDK.applyDiscoveryUriDefaultFromParameterConfiguration();\n SDK.applyMetricsConfiguration();\n SDK.applyTelemetryConfiguration();\n\n this._applicationActivityMonitor = new ApplicationActivityMonitor();\n\n this._logger.info('Automatically retry on failure is set to: [%s]', this._automaticallyRetryOnFailure);\n this._logger.info('Automatically reconnect peer connection is set to: [%s]', this._automaticallyReconnectPeerConnection);\n this._logger.info('Force garbage collection on restart is set to: [%s]', this._forceGarbageCollectionOnRestart);\n this._logger.info('Skip garbage collection on mobile devices on restart is set to: [%s]', this._skipGarbageCollectionOnMobileDevices);\n\n this._initialized.value = true;\n }\n\n static init(options?: IInitOptions): void {\n if (!options) {\n return;\n }\n\n const optionsWithOptionalglobalScope: IInitOptions & {globalScope?: IProvidedGlobalScope} = options;\n\n if (optionsWithOptionalglobalScope.globalScope) {\n GlobalScope.setInstance(optionsWithOptionalglobalScope.globalScope);\n }\n\n if (options.discoveryUri) {\n DiscoveryUri.uri.value = options.discoveryUri;\n }\n\n if (options.peerConnectionFactory) {\n PeerConnectionService.peerConnectionFactory.value = options.peerConnectionFactory;\n }\n\n if (options.telemetryLevel && TelemetryLevel[options.telemetryLevel]) {\n SDK._telemetryLevel.value = TelemetryLevelMapping.convertTelemetryLevelTypeToTelemetryLevel(options.telemetryLevel);\n }\n\n if (options.loggingLevel && LoggingLevel[options.loggingLevel]) {\n this._logger.threshold.setThreshold(LoggingLevelMapping.convertLoggingLevelTypeToLoggingLevel(options.loggingLevel));\n }\n\n if (options.consoleLoggingLevel && LoggingLevel[options.consoleLoggingLevel]) {\n const consoleAppender = this._logger.appenders.value.find(appender => appender instanceof ConsoleAppender);\n\n if (consoleAppender) {\n this._logger.appenders.remove(consoleAppender);\n }\n\n if (options.consoleLoggingLevel !== 'Off') {\n this._logger.appenders.add(new ConsoleAppender(LoggingLevelMapping.convertLoggingLevelTypeToLoggingLevel(options.consoleLoggingLevel)));\n }\n }\n\n if (typeof options.automaticallyPlayMediaStream === 'boolean') {\n this._automaticallyPlayMediaStream = options.automaticallyPlayMediaStream;\n }\n\n if (typeof options.automaticallyMuteVideoOnPlayFailure === 'boolean') {\n this._automaticallyMuteVideoOnPlayFailure = options.automaticallyMuteVideoOnPlayFailure;\n }\n\n if (options.webPlayerLoader) {\n this._webPlayerLoader = options.webPlayerLoader;\n }\n\n if (options.shakaPlayerLoader) {\n this._shakaPlayerLoader = options.shakaPlayerLoader;\n }\n\n if (options.hlsJsLoader) {\n this._hlsJsLoader = options.hlsJsLoader;\n }\n }\n\n static dispose(): void {\n SDK._initialized.value = false;\n this._applicationActivityMonitor?.dispose();\n this._applicationActivityMonitor = null;\n }\n\n static getTelemetryUrl(url: string): string {\n return TelemetryUrl.getTelemetryUrl(url);\n }\n\n private constructor() {\n throw new Error('SDK is a static class that may not be instantiated');\n }\n}\n\nGlobalScope.subscribe(SDK.onLoad.bind(SDK));","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport IComparable from '../lang/IComparable';\n\nexport default class Dimension implements IComparable<Dimension> {\n readonly width: number;\n readonly height: number;\n\n static get empty(): Dimension {\n return new Dimension(0, 0);\n }\n\n constructor(width: number, height: number) {\n this.width = width;\n this.height = height;\n }\n\n equals(other: Dimension): boolean {\n return other && this.width === other.width && this.height === other.height;\n }\n\n toString(): string {\n return `${this.width}x${this.height}`;\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport GlobalScope from '../globalScope/GlobalScope';\nimport FeatureEnablement from '../environment/FeatureEnablement';\n\nexport default class GarbageCollectorManager {\n static forceGarbageCollection(): void {\n if (FeatureEnablement.isForceChromeGarbageCollectionSupported) {\n this.forceChromeGarbageCollection();\n }\n }\n\n private static forceChromeGarbageCollection(): void {\n if (FeatureEnablement.isQueueMicrotaskSupported) {\n GlobalScope.value.queueMicrotask(this.overloadMemoryToInvokeGarbageCollection.bind(this));\n } else {\n GlobalScope.value.setTimeout(this.overloadMemoryToInvokeGarbageCollection.bind(this), 0);\n }\n }\n\n private static overloadMemoryToInvokeGarbageCollection(): void {\n let img: HTMLImageElement | null = GlobalScope.value.documentCreateElement<HTMLImageElement>('img');\n\n img.src = GlobalScope.value.URL.createObjectURL(new Blob([new ArrayBuffer(10e+7)])); // 100Mb or less or more depending on as you wish to force/invoke GC cycle run\n img.onerror = function() {\n GlobalScope.value.URL.revokeObjectURL(this.src);\n\n img = null;\n };\n }\n\n private constructor() {\n throw new Error('GarbageCollectorManager is a static class that may not be instantiated');\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nenum ChannelState {\n Initializing = 0,\n Offline = 1,\n Starting = 2,\n Paused = 3,\n Playing = 4,\n Recovering = 5,\n Reconnecting = 6,\n StandBy = 7,\n Stopped = 8,\n Unauthorized = 9,\n GeoRestricted = 10,\n GeoBlocked = 11,\n UnsupportedFeature = 12,\n ConfigurationError = 13,\n TransientConfigurationError = 14,\n ConnectionError = 15,\n ClientStartError = 16,\n Error = 17\n}\n\nexport default ChannelState;","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nexport default class Durations {\n private readonly _duration: number;\n\n constructor(duration = 0) {\n this._duration = duration;\n }\n\n toIsoString(): string {\n if (this._duration === 0) {\n return 'P0S';\n }\n\n const isNegative = this._duration < 0;\n const duration = isNegative ? Math.abs(this._duration) : this._duration;\n let offset = Math.floor(duration);\n const milliseconds = offset % 1000;\n\n offset = Math.floor(offset / 1000);\n\n const seconds = offset % 60;\n\n offset = Math.floor(offset / 60);\n\n const minutes = offset % 60;\n\n offset = Math.floor(offset / 60);\n\n const hours = offset % 24;\n const parts = ['PT'];\n\n if (isNegative) {\n parts.unshift('-');\n }\n\n if (hours) {\n parts.push(hours + 'H');\n }\n\n if (minutes) {\n parts.push(minutes + 'M');\n }\n\n if (seconds || milliseconds) {\n parts.push(String(seconds));\n\n if (milliseconds) {\n parts.push('.' + this.padStart(milliseconds.toString(), 3, '0'));\n }\n\n parts.push('S');\n }\n\n return parts.join('');\n }\n\n padStart(item: string, targetLength: number, padString: string): string {\n targetLength = targetLength >> 0;\n padString = String((typeof padString !== 'undefined' ? padString : ' '));\n\n if (item.length > targetLength) {\n return item;\n }\n\n targetLength = targetLength - item.length;\n\n if (targetLength > padString.length) {\n padString += padString.repeat(targetLength / padString.length);\n }\n\n return padString.slice(0, targetLength) + item;\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport LoggerFactory from '../logger/LoggerFactory';\nimport {ILogger} from '../logger/LoggerInterface';\nimport Durations from '../time/Duration';\nimport Disposable from '../lang/Disposable';\nimport IDisposable from '../lang/IDisposable';\nimport MetricsType from '../metrics/MetricsType';\nimport DisposableList from '../lang/DisposableList';\nimport MetricsService from '../metrics/MetricsService';\n\ntype ContinuationEvent = HTMLVideoElementEventMap['play' | 'playing' | 'progress' | 'timeupdate'];\nconst noop = (): void => undefined;\n\nexport default class VideoTelemetry implements IDisposable {\n private readonly _pageLoadTime: number;\n private readonly _channelStartTime: number;\n private readonly _logger: ILogger = LoggerFactory.getLogger('StreamTelemetry');\n private readonly _disposables: DisposableList = new DisposableList();\n private readonly _streamId: string;\n private readonly _metricsService: MetricsService;\n private _listenToFirstTime: () => void = noop;\n private _listenForStall: () => void = noop;\n private _listenForContinuation: (event: ContinuationEvent) => void = noop;\n private _timeToFirstFrame: number = 0;\n private _channelCreationTimeToFirstFrame: number = 0;\n private _startRecordingFirstFrame: number = 0;\n private _videoStalled: number | null = null;\n private _lastProgress: number = 0;\n private _videoResolution: string = '';\n private _clearTimeToFirstFrameListener: Disposable = new Disposable(() => null);\n private _clearRebufferingListener: Disposable = new Disposable(() => null);\n\n constructor(streamId: string, pageLoadTime: number, channelStartTime: number, metricsService: MetricsService) {\n this._streamId = streamId;\n this._pageLoadTime = pageLoadTime;\n this._channelStartTime = channelStartTime;\n\n this._metricsService = metricsService;\n }\n\n setupListenerForTimeToFirstTime(video: HTMLVideoElement): void {\n this._startRecordingFirstFrame = Date.now();\n\n this._listenToFirstTime = (): void => this.callTimeToFirstFrame();\n\n video.addEventListener('loadeddata', this._listenToFirstTime);\n video.addEventListener('loadedmetadata', this._listenToFirstTime);\n\n this._clearTimeToFirstFrameListener = new Disposable(() => {\n video.removeEventListener('loadeddata', this._listenToFirstTime);\n video.removeEventListener('loadedmetadata', this._listenToFirstTime);\n });\n this._disposables.add(this._clearTimeToFirstFrameListener);\n }\n\n setupListenerForRebuffering(video: HTMLVideoElement): void {\n this._listenForStall = (): void => this.onStall();\n\n this._listenForContinuation = (event: ContinuationEvent): void => this.onContinuation(event, video);\n\n video.addEventListener('stalled', this._listenForStall);\n video.addEventListener('pause', this._listenForStall);\n video.addEventListener('suspend', this._listenForStall);\n video.addEventListener('play', this._listenForContinuation);\n video.addEventListener('playing', this._listenForContinuation);\n video.addEventListener('progress', this._listenForContinuation);\n video.addEventListener('timeupdate', this._listenForContinuation);\n\n this._clearRebufferingListener = new Disposable(() => {\n video.removeEventListener('stalled', this._listenForStall);\n video.removeEventListener('pause', this._listenForStall);\n video.removeEventListener('suspend', this._listenForStall);\n video.removeEventListener('play', this._listenForContinuation);\n video.removeEventListener('playing', this._listenForContinuation);\n video.removeEventListener('progress', this._listenForContinuation);\n video.removeEventListener('timeupdate', this._listenForContinuation);\n });\n\n this._disposables.add(this._clearRebufferingListener);\n }\n\n dispose(): void {\n this._disposables.dispose();\n }\n\n private get durationSincePageLoad(): string {\n const now = Date.now();\n\n return new Durations(now - this._pageLoadTime).toIsoString();\n }\n\n private callTimeToFirstFrame(): void {\n const now = Date.now();\n\n this.pushTimeToFirstFrame(now);\n this.pushChannelCreationTimeToFirstFrame(now);\n\n this._clearTimeToFirstFrameListener.dispose();\n }\n\n private pushTimeToFirstFrame(now: number): void {\n this._timeToFirstFrame = now - this._startRecordingFirstFrame;\n\n this._metricsService.push({\n metricType: MetricsType.TimeToFirstFrame,\n runtime: (now - this._pageLoadTime) / 1000,\n value: {uint64: this._timeToFirstFrame},\n streamId: this._streamId\n });\n\n this._logger.info(\n '[%s] [%s] First frame [%s]',\n this.durationSincePageLoad,\n this._streamId,\n new Durations(this._timeToFirstFrame).toIsoString()\n );\n }\n\n private pushChannelCreationTimeToFirstFrame(now: number): void {\n this._channelCreationTimeToFirstFrame = now - this._channelStartTime;\n\n this._metricsService.push({\n metricType: MetricsType.ChannelCreationTimeToFirstFrame,\n runtime: (now - this._pageLoadTime) / 1000,\n value: {uint64: this._channelCreationTimeToFirstFrame},\n streamId: this._streamId\n });\n\n this._logger.info(\n '[%s] [%s] Channel creation to first frame [%s]',\n this.durationSincePageLoad,\n this._streamId,\n new Durations(this._channelCreationTimeToFirstFrame).toIsoString()\n );\n }\n\n private onStall(): void {\n if (this._videoStalled) {\n return;\n }\n\n this._metricsService.push({\n metricType: MetricsType.Stalled,\n runtime: (Date.now() - this._pageLoadTime) / 1000,\n streamId: this._streamId\n });\n\n this._videoStalled = Date.now();\n\n this._logger.info(\n '[%s] [%s] [buffering] Stream has stalled',\n this.durationSincePageLoad,\n this._streamId\n );\n }\n\n private onContinuation(event: ContinuationEvent, video: HTMLVideoElement): void {\n if (!video.buffered) {\n return;\n }\n\n const bufferLength = video.buffered.length;\n const hasNotProgressedSinceLastProgressEvent = event.type === 'playing'\n || bufferLength > 0 ? (event.type === 'progress'\n || event.type === 'timeupdate')\n && video.buffered.end(bufferLength - 1) === this._lastProgress : true;\n\n if (!this._videoStalled || hasNotProgressedSinceLastProgressEvent) {\n return;\n }\n\n if (event.type === 'progress') {\n this._lastProgress = video.buffered.end(bufferLength - 1);\n }\n\n const timeSinceStop = Date.now() - this._videoStalled;\n\n this._metricsService.push({\n metricType: MetricsType.Buffering,\n runtime: (Date.now() - this._pageLoadTime) / 1000,\n value: {uint64: timeSinceStop},\n streamId: this._streamId\n });\n\n this._logger.info(\n '[%s] [%s] [buffering] Stream has recovered from stall after [%s]',\n this.durationSincePageLoad,\n this._streamId,\n new Durations(timeSinceStop).toIsoString()\n );\n this._videoStalled = null;\n }\n\n onVideoResolutionChanges(newResolution: string): void {\n this._metricsService.push({\n metricType: MetricsType.ResolutionChanged,\n runtime: (Date.now() - this._pageLoadTime) / 1000,\n value: {string: newResolution},\n previousValue: this._videoResolution ? {string: this._videoResolution} : undefined,\n streamId: this._streamId\n });\n\n this._videoResolution = newResolution;\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport MetricsType from '../metrics/MetricsType';\nimport MetricType from '../metrics/MetricType';\nimport Durations from '../time/Duration';\nimport {ILogger} from '../logger/LoggerInterface';\nimport SDK from '../sdk/SDK';\nimport LoggerFactory from '../logger/LoggerFactory';\n\nexport class StreamSetupListener {\n private readonly _logger: ILogger = LoggerFactory.getLogger('StreamSetupListener');\n private readonly metricsService = SDK.metricsService;\n private readonly _pageLoadTime: number;\n private readonly _startTime: number;\n private _metricSubmitted = false;\n\n constructor(pageLoadTime: number) {\n this._startTime = Date.now();\n this._pageLoadTime = pageLoadTime;\n }\n\n success(streamId: string): void {\n this.recordStreamMetric(MetricsType.SetupCompleted, streamId);\n }\n\n fail(): void {\n this.recordStreamMetric(MetricsType.SetupFailed);\n }\n\n private recordStreamMetric(metricType: MetricsType, streamId?: string): void {\n if (this._metricSubmitted) {\n return ;\n }\n\n this._metricSubmitted = true;\n\n const now = Date.now();\n const setupTime = now - this._startTime;\n const metricName = new MetricType(metricType).getName();\n\n this.metricsService.push({\n metricType,\n runtime: (now - this._pageLoadTime) / 1000,\n value: {uint64: setupTime},\n streamId\n });\n\n this._logger.info(\n '[%s] [%s] Stream metric [%s] in [%s]',\n new Durations(now - this._pageLoadTime).toIsoString(),\n streamId,\n metricName,\n new Durations(setupTime).toIsoString()\n );\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport GlobalScope from '../globalScope/GlobalScope';\nimport IDisposable from '../lang/IDisposable';\nimport Disposable from '../lang/Disposable';\nimport DisposableList from '../lang/DisposableList';\nimport Subject from '../rx/Subject';\n\nexport default class NetworkMonitor implements IDisposable {\n private readonly _disposables: DisposableList = new DisposableList();\n private readonly _isSupported: boolean = GlobalScope.value.navigatorConnection !== undefined;\n private readonly _rtt: Subject<number | undefined> = new Subject<number | undefined>(undefined);\n private readonly _effectiveType: Subject<string | undefined> = new Subject<string | undefined>(undefined);\n private readonly _downlinkThroughputCapacity: Subject<number | undefined> = new Subject<number | undefined>(undefined);\n\n constructor() {\n if (!this.isSupported) {\n return;\n }\n\n this.setupNetworkChangeListeners();\n this.updateStatistics();\n }\n\n get isSupported(): boolean {\n return this._isSupported;\n }\n\n get rtt(): Subject<number | undefined> {\n return this._rtt;\n }\n\n get effectiveType(): Subject<string | undefined> {\n return this._effectiveType;\n }\n\n get downlinkThroughputCapacity(): Subject<number | undefined> {\n return this._downlinkThroughputCapacity;\n }\n\n dispose(): void {\n this._disposables.dispose();\n }\n\n private getDownlinkThroughputCapacity(): number {\n return GlobalScope.value.navigatorConnection?.downlink ?? GlobalScope.value.navigatorConnection?.downlinkMax ?? -1;\n }\n\n private getEffectiveType(): string {\n return GlobalScope.value.navigatorConnection?.effectiveType ?? GlobalScope.value.navigatorConnection?.type ?? 'Unknown';\n }\n\n private getRoundTripTime(): number {\n return GlobalScope.value.navigatorConnection?.rtt ?? -1;\n }\n\n private setupNetworkChangeListeners(): void {\n const listener = (): void => this.updateStatistics();\n\n GlobalScope.value.navigatorConnection?.addEventListener('change', listener);\n\n this._disposables.add(new Disposable(() => GlobalScope.value.navigatorConnection?.removeEventListener('change', listener)));\n }\n\n private updateStatistics(): void {\n this._rtt.value = this.getRoundTripTime();\n this._effectiveType.value = this.getEffectiveType();\n this._downlinkThroughputCapacity.value = this.getDownlinkThroughputCapacity();\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport {StreamSetupListener} from '../dom/StreamSetupListener';\nimport {ILogger} from '../logger/LoggerInterface';\nimport LoggerFactory from '../logger/LoggerFactory';\nimport NetworkMonitor from '../dom/NetworkMonitor';\nimport SDK from '../sdk/SDK';\nimport MetricsType from '../metrics/MetricsType';\nimport Durations from '../time/Duration';\nimport IDisposable from '../lang/IDisposable';\nimport DisposableList from '../lang/DisposableList';\nimport MetricsService from '../metrics/MetricsService';\n\ninterface INetworkStatistics {\n rtt?: number;\n effectiveType?: string;\n downlinkThroughputCapacity?: number;\n}\n\nexport default class SessionTelemetry implements IDisposable {\n private readonly _logger: ILogger = LoggerFactory.getLogger('SessionTelemetry');\n private readonly _metricsService: MetricsService;\n private readonly _applicationActivityMonitor = SDK.applicationActivityMonitor;\n private readonly _networkMonitor: NetworkMonitor = new NetworkMonitor();\n private readonly _pageLoadTime: number;\n private readonly _disposables: DisposableList = new DisposableList();\n private _lastNetworkStatistics: INetworkStatistics = {};\n\n constructor(pageLoadTime: number, metricsService: MetricsService) {\n this._pageLoadTime = pageLoadTime;\n this._disposables.add(this._networkMonitor);\n this._metricsService = metricsService;\n\n if (!this._applicationActivityMonitor) {\n throw new Error('SessionTelemetry Failed: No application monitor initialized.');\n }\n\n if (!this._networkMonitor.isSupported) {\n return;\n }\n\n this._disposables.add(this._applicationActivityMonitor.isForeground.subscribe(isForeground => {\n this.recordForegroundChange(isForeground);\n }));\n this._disposables.add(this._networkMonitor.rtt.subscribe(value => {\n if (!value) {\n return;\n }\n\n this.recordNetworkRTTUpdate(value);\n }));\n this._disposables.add(this._networkMonitor.effectiveType.subscribe(value => {\n if (!value) {\n return;\n }\n\n this.recordNetworkTypeChangeUpdate(value);\n }));\n this._disposables.add(this._networkMonitor.downlinkThroughputCapacity.subscribe(value => {\n if (!value) {\n return;\n }\n\n this.recordNetworkDownlinkThroughputCapacityUpdate(value);\n }));\n }\n\n listenOnStreamSetup(): StreamSetupListener {\n return new StreamSetupListener(this._pageLoadTime);\n }\n\n dispose(): void {\n this._disposables.dispose();\n }\n\n private recordForegroundChange(isForeground: boolean): void {\n const now = Date.now();\n const timeSinceLastChange = this._applicationActivityMonitor?.getTimeSinceLastChange();\n\n if (!timeSinceLastChange) {\n return;\n }\n\n this._metricsService.push({\n metricType: isForeground ? MetricsType.ApplicationForeground : MetricsType.ApplicationBackground,\n runtime: (now - this._pageLoadTime) / 1000,\n value: {uint64: timeSinceLastChange}\n });\n\n this._logger.info(\n 'Application has gone into the [%s] after [%s] ms',\n isForeground ? 'foreground' : 'background',\n new Durations(timeSinceLastChange).toIsoString(),\n );\n }\n\n private recordNetworkRTTUpdate(newRTT: number): void {\n const now = Date.now();\n const oldRtt = this._lastNetworkStatistics.rtt;\n\n this._lastNetworkStatistics.rtt = newRTT;\n\n this._metricsService.push({\n metricType: MetricsType.RoundTripTime,\n runtime: (now - this._pageLoadTime) / 1000,\n value: {uint64: newRTT},\n previousValue: oldRtt ? {uint64: oldRtt} : undefined,\n resource: 'navigator'\n });\n\n this._logger.info(\n '[%s] Network RTT changed to [%s] from [%s]',\n new Durations(now - this._pageLoadTime).toIsoString(),\n newRTT,\n oldRtt\n );\n }\n\n private recordNetworkTypeChangeUpdate(newNetworkType: string): void {\n const now = Date.now();\n const oldNetworkType = this._lastNetworkStatistics.effectiveType;\n\n this._lastNetworkStatistics.effectiveType = newNetworkType;\n\n this._metricsService.push({\n metricType: MetricsType.NetworkType,\n runtime: (now - this._pageLoadTime) / 1000,\n value: {string: newNetworkType},\n previousValue: oldNetworkType ? {string: oldNetworkType} : undefined\n });\n\n this._logger.info(\n '[%s] Network effective type has changed to [%s] from [%s]',\n new Durations(now - this._pageLoadTime).toIsoString(),\n newNetworkType,\n oldNetworkType\n );\n }\n\n private recordNetworkDownlinkThroughputCapacityUpdate(newCapacity: number): void {\n const now = Date.now();\n const oldCapacity = this._lastNetworkStatistics.downlinkThroughputCapacity;\n\n this._lastNetworkStatistics.downlinkThroughputCapacity = newCapacity;\n\n this._metricsService.push({\n metricType: MetricsType.DownlinkThroughputCapacity,\n runtime: (now - this._pageLoadTime) / 1000,\n value: {float: newCapacity},\n previousValue: oldCapacity ? {float: oldCapacity} : undefined\n });\n\n this._logger.info(\n '[%s] Network downlink throughput capacity changed to [%s] from [%s]',\n new Durations(now - this._pageLoadTime).toIsoString(),\n newCapacity,\n oldCapacity\n );\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nexport type BitrateStateType = 'Keep' | 'Reset';\nexport type BitrateModeType = 'Normal' | 'Force' | 'Reset';\n\nexport enum BitrateState {\n Keep,\n Reset\n}\n\nexport enum BitrateMode {\n Normal,\n Force,\n Reset\n}\n\nexport interface ISetTemporaryMaximalBitrate {\n apiVersion: number;\n sharedSecret: string;\n elapsedInMilliseconds: number;\n bitrateInBitsPerSecond: number;\n bitrateState: BitrateStateType;\n bitrateMode: BitrateModeType;\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport Subject from '../../rx/Subject';\nimport {EncodedEdgeToken} from '../../edgeAuth/EncodedEdgeToken';\n\nexport default class TokenContext {\n token: Subject<EncodedEdgeToken>;\n tokenExpiring: Subject<boolean>;\n\n constructor(token: EncodedEdgeToken) {\n this.token = new Subject<EncodedEdgeToken>(token);\n this.tokenExpiring = new Subject<boolean>(false);\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport Subject from '../../rx/Subject';\nimport ChannelState from '../channels/ChannelState';\nimport Dimension from '../../video/Dimension';\nimport EndPoint, {IStream, SubscribeStatus} from '../discovery/EndPoint';\nimport {IOnRealTimeSubscribeRequestCallback} from '../channels/IOnRealTimeSubscribeRequestCallback';\nimport {IOnRealTimeSubscribeResponseCallback} from '../channels/IOnRealTimeSubscribeResponseCallback';\nimport VideoTelemetry from '../../video/VideoTelemetry';\nimport {IRtcMonitorStatistic, IRtcStatistic} from '../../rtc/RtcConnectionMonitor';\nimport SDK from '../SDK';\nimport assertUnreachable from '../../lang/assertUnreachable';\nimport DisposableList from '../../lang/DisposableList';\nimport {BitsPerSecond, Millisecond} from '../../units/Units';\n\nconst defaultTargetLag = 0;\n\nexport type ChannelContextOptions = {\n targetLag?: number;\n onRealTimeSubscribeRequestCallback?: IOnRealTimeSubscribeRequestCallback;\n onRealTimeSubscribeResponseCallback?: IOnRealTimeSubscribeResponseCallback;\n};\n\nexport default class ChannelContext {\n channelInitialization: Date;\n disposables: DisposableList;\n channelDisposables: DisposableList;\n rendererDisposables: DisposableList;\n videoElement: Subject<HTMLVideoElement | null>;\n state: Subject<ChannelState>;\n exists: Subject<boolean | null>;\n autoMuted: Subject<boolean>;\n autoPaused: Subject<boolean>;\n authorized: Subject<boolean>;\n online: Subject<boolean>;\n loading: Subject<boolean>;\n playing: Subject<boolean>;\n standby: Subject<boolean>;\n stopped: Subject<boolean>;\n targetLag: Subject<Millisecond>;\n lag: Subject<Millisecond | undefined>;\n bitrateLimit: Subject<BitsPerSecond>;\n resolution: Subject<Dimension>;\n failureCount: Subject<number>;\n endPoint: Subject<EndPoint | null>;\n onRealTimeSubscribeRequestCallback: IOnRealTimeSubscribeRequestCallback | null;\n onRealTimeSubscribeResponseCallback: IOnRealTimeSubscribeResponseCallback | null;\n stream: Subject<IStream | null>;\n rtcStatistics: Subject<IRtcMonitorStatistic | null>;\n videoTelemetry: VideoTelemetry | null;\n rtcAudioStatistic: IRtcStatistic | null;\n rtcVideoStatistic: IRtcStatistic | null;\n clearFailureCountTimeout: number;\n\n constructor(options?: ChannelContextOptions) {\n this.disposables = new DisposableList();\n this.channelDisposables = new DisposableList();\n this.rendererDisposables = new DisposableList();\n this.channelInitialization = new Date();\n this.videoElement = new Subject<HTMLVideoElement | null>(null);\n this.state = new Subject<ChannelState>(ChannelState.Initializing);\n this.exists = new Subject<boolean | null>(null);\n this.autoMuted = new Subject<boolean>(false);\n this.autoPaused = new Subject<boolean>(false);\n this.authorized = new Subject<boolean>(true);\n this.online = new Subject<boolean>(true);\n this.loading = new Subject<boolean>(false);\n this.playing = new Subject<boolean>(false);\n this.standby = new Subject<boolean>(false);\n this.stopped = new Subject<boolean>(false);\n this.targetLag = new Subject<Millisecond>(options?.targetLag ?? defaultTargetLag);\n this.lag = new Subject<Millisecond | undefined>(undefined);\n this.bitrateLimit = new Subject<BitsPerSecond>(0);\n this.resolution = new Subject<Dimension>(Dimension.empty);\n this.failureCount = new Subject<number>(0);\n this.endPoint = new Subject<EndPoint | null>(null);\n this.onRealTimeSubscribeRequestCallback = options?.onRealTimeSubscribeRequestCallback ?? null;\n this.onRealTimeSubscribeResponseCallback = options?.onRealTimeSubscribeResponseCallback ?? null;\n this.stream = new Subject<IStream | null>(null);\n this.rtcStatistics = new Subject<IRtcMonitorStatistic | null>(null);\n this.videoTelemetry = null;\n this.rtcAudioStatistic = null;\n this.rtcVideoStatistic = null;\n this.clearFailureCountTimeout = 0;\n }\n\n get streamId(): string {\n const stream = this.stream.value;\n\n if (!stream) {\n return '-';\n }\n\n return stream.streamId;\n }\n\n applyStatus(status: SubscribeStatus): void {\n switch (status) {\n case 'ok':\n break;\n case 'unauthorized':\n case 'geo-restricted':\n case 'geo-blocked':\n this.authorized.value = false;\n this.failureCount.value = 0;\n this.playing.value = false;\n this.standby.value = true;\n this.stopped.value = false;\n this.stream.value = null;\n\n return;\n case 'no-stream':\n case 'not-found':\n this.failureCount.value = 0;\n this.playing.value = false;\n this.standby.value = true;\n this.stopped.value = false;\n this.stream.value = null;\n\n return;\n default:\n this.failureCount.value++;\n this.playing.value = false;\n this.standby.value = true;\n this.stopped.value = false;\n this.stream.value = null;\n\n return;\n }\n }\n\n applySessionAndStreamPropertiesToVideoElement(): void {\n if (this.videoElement.value && this.videoElement.value.dataset) {\n this.videoElement.value.dataset.sessionId = SDK.clientSessionId;\n this.videoElement.value.dataset.streamId = this.streamId;\n }\n }\n\n mapSubscribeStatusToChannelStatus(status: SubscribeStatus): ChannelState {\n switch (status) {\n case 'ok':\n return ChannelState.Starting;\n case 'no-stream':\n case 'not-found':\n return ChannelState.StandBy;\n case 'geo-restricted':\n return ChannelState.GeoRestricted;\n case 'geo-blocked':\n return ChannelState.GeoBlocked;\n case 'unauthorized':\n return ChannelState.Unauthorized;\n case 'capacity':\n case 'rate-limited':\n case 'timeout':\n return ChannelState.Recovering;\n case 'forbidden-tag':\n return ChannelState.ConfigurationError;\n case 'port-in-range-not-found':\n return ChannelState.TransientConfigurationError;\n case 'failed':\n return ChannelState.Error;\n default:\n assertUnreachable(status);\n }\n }\n\n mapSubscribeStatusToExists(status: SubscribeStatus): boolean | null {\n switch (status) {\n case 'ok':\n case 'no-stream':\n case 'geo-restricted':\n case 'geo-blocked':\n case 'forbidden-tag':\n case 'port-in-range-not-found':\n return true;\n case 'not-found':\n return false;\n case 'unauthorized':\n case 'timeout':\n case 'rate-limited':\n case 'capacity':\n case 'failed':\n return this.exists.value;\n default:\n assertUnreachable(status);\n }\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nexport interface IEncodedStreamSink<T extends RTCEncodedAudioFrame | RTCEncodedVideoFrame> {\n (track: MediaStreamTrack, chunk: T): boolean | PromiseLike<boolean>;\n}\n\nexport default class EncodedStreamSink {\n static validateEncodedStreamSink<T extends RTCEncodedAudioFrame | RTCEncodedVideoFrame>(mode: 'audio' | 'video', item: IEncodedStreamSink<T>) {\n if (typeof item !== 'function') {\n return {\n valid: false,\n validationResult: `Unexpected ${mode} Encoded Stream Sink function type. Found [${typeof item}]`\n };\n }\n\n if (item.length !== 2) {\n return {\n valid: false,\n validationResult: `Unexpected ${mode} Encoded Stream Sink function parameter length. Expected 2. Found [${item.length}]`\n };\n }\n\n return {\n valid: true,\n validationResult: 'ok'\n };\n }\n\n constructor() {\n throw new Error('EncodedStreamSink is a static class that may not be instantiated');\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nexport interface IStreamTrackTransform<T extends AudioData | VideoFrame> {\n (track: MediaStreamTrack, chunk: T, controller: TransformStreamDefaultController<T>): void | PromiseLike<void>;\n}\n\nexport default class StreamTrackTransform {\n static validateMediaStreamTrackTransform<T extends AudioData | VideoFrame>(mode: 'audio' | 'video', item: IStreamTrackTransform<T>) {\n if (typeof item !== 'function') {\n return {\n valid: false,\n validationResult: `Unexpected ${mode} Media Stream Track transform function type. Found [${typeof item}]`\n };\n }\n\n if (item.length !== 3) {\n return {\n valid: false,\n validationResult: `Unexpected ${mode} Media Stream Track transform function parameter length. Expected 3. Found [${item.length}]`\n };\n }\n\n return {\n valid: true,\n validationResult: 'ok'\n };\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport Subject from '../../rx/Subject';\nimport {VideoCodec} from '../decode/bitstream/codec/VideoCodec';\nimport {AudioCodec} from '../decode/bitstream/codec/AudioCodec';\nimport {IStreamTrackTransform} from '../transformation/StreamTrackTransform';\nimport {IEncodedStreamSink} from '../transformation/EncodedStreamSink';\nimport TransformMessageRouter from '../transformation/worker/MessageRouter';\n\nexport type StreamTransformContextOptions = {\n hasInsertableStreams: boolean;\n hasEncodedInsertableStreams: boolean;\n videoStreamTransformCallback: IStreamTrackTransform<VideoFrame> | undefined;\n audioStreamTransformCallback: IStreamTrackTransform<AudioData> | undefined;\n encodedVideoStreamSink: IEncodedStreamSink<RTCEncodedVideoFrame> | undefined;\n encodedAudioStreamSink: IEncodedStreamSink<RTCEncodedAudioFrame> | undefined;\n};\n\nexport type StreamTransformContextTrack = {\n mediaStreamTrack: MediaStreamTrack | null;\n receiver: RTCRtpReceiver | null;\n mid: string | null;\n codec: VideoCodec | AudioCodec | null;\n transformPipelineWorker: Worker | null;\n transformMessageRouter: TransformMessageRouter | null;\n transformFunctionNames: string[];\n};\n\nexport default class StreamTransformContext {\n readonly hasInsertableStreams: Subject<boolean>;\n readonly hasEncodedInsertableStreams: Subject<boolean>;\n readonly videoStreamTransformCallback: IStreamTrackTransform<VideoFrame> | undefined;\n readonly audioStreamTransformCallback: IStreamTrackTransform<AudioData> | undefined;\n readonly encodedVideoStreamSink: IEncodedStreamSink<RTCEncodedVideoFrame> | undefined;\n readonly encodedAudioStreamSink: IEncodedStreamSink<RTCEncodedAudioFrame> | undefined;\n readonly audioTrack: StreamTransformContextTrack;\n readonly videoTrack: StreamTransformContextTrack;\n\n constructor(options: StreamTransformContextOptions) {\n this.hasInsertableStreams = new Subject<boolean>(options.hasInsertableStreams);\n this.hasEncodedInsertableStreams = new Subject<boolean>(options.hasEncodedInsertableStreams);\n this.videoStreamTransformCallback = options.videoStreamTransformCallback;\n this.audioStreamTransformCallback = options.audioStreamTransformCallback;\n this.encodedVideoStreamSink = options.encodedVideoStreamSink;\n this.encodedAudioStreamSink = options.encodedAudioStreamSink;\n this.audioTrack = {\n mediaStreamTrack: null,\n receiver: null,\n mid: null,\n codec: null,\n transformPipelineWorker: null,\n transformMessageRouter: null,\n transformFunctionNames: []\n };\n this.videoTrack = {\n mediaStreamTrack: null,\n receiver: null,\n mid: null,\n codec: null,\n transformPipelineWorker: null,\n transformMessageRouter: null,\n transformFunctionNames: []\n };\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport Subject from '../../rx/Subject';\nimport IPeerConnection from '../../rtc/IPeerConnection';\n\nexport default class PeerConnectionContext {\n mediaStream: Subject<MediaStream | null>;\n peerConnection: Subject<IPeerConnection | null>;\n peerConnectionReconnectAttempts: number;\n\n constructor() {\n this.mediaStream = new Subject<MediaStream | null>(null);\n this.peerConnection = new Subject<IPeerConnection | null>(null);\n this.peerConnectionReconnectAttempts = 0;\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport Subject from '../../rx/Subject';\n\nexport default class StateContext {\n isStarting: Subject<boolean>;\n isDisposed: boolean;\n\n constructor() {\n this.isStarting = new Subject<boolean>(false);\n this.isDisposed = false;\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport Subject from '../../rx/Subject';\nimport {DecodedFrameTimingInformation, RenderedFrameTimingInformation} from '../frameTiming/FrameTimingInformation';\n\nexport default class FrameTimingInformationContext {\n public readonly shouldExtractTimecode: Subject<boolean>;\n public readonly shouldExtractTimestamps: Subject<boolean>;\n public readonly isEnabled: Subject<boolean>;\n public readonly decodedFrameTimingInformation: Subject<DecodedFrameTimingInformation | null>;\n public readonly renderedFrameTimingInformation: Subject<RenderedFrameTimingInformation | null>;\n\n constructor() {\n this.shouldExtractTimecode = new Subject<boolean>(false);\n this.shouldExtractTimestamps = new Subject<boolean>(false);\n this.isEnabled = new Subject<boolean>(false);\n this.decodedFrameTimingInformation = new Subject<DecodedFrameTimingInformation | null>(null);\n this.renderedFrameTimingInformation = new Subject<RenderedFrameTimingInformation | null>(null);\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport {BitrateMode, BitrateModeType} from '../api/SetTemporaryMaximalBitrate';\nimport assertUnreachable from '../../lang/assertUnreachable';\n\nexport default class BitrateModeMapping {\n static convertBitrateModeToBitrateModeType(bitrateMode: BitrateMode): BitrateModeType {\n switch (bitrateMode) {\n case BitrateMode.Normal:\n return 'Normal';\n case BitrateMode.Force:\n return 'Force';\n case BitrateMode.Reset:\n return 'Reset';\n default:\n assertUnreachable(bitrateMode);\n }\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport {BitrateState, BitrateStateType} from '../api/SetTemporaryMaximalBitrate';\nimport assertUnreachable from '../../lang/assertUnreachable';\n\nexport default class BitrateStateMapping {\n static convertBitrateStateToBitrateStateType(bitrateState: BitrateState): BitrateStateType {\n switch (bitrateState) {\n case BitrateState.Keep:\n return 'Keep';\n case BitrateState.Reset:\n return 'Reset';\n default:\n assertUnreachable(bitrateState);\n }\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport GlobalScope from '../../globalScope/GlobalScope';\nimport {ILogger} from '../../logger/LoggerInterface';\nimport LoggerFactory from '../../logger/LoggerFactory';\nimport EdgeAuthParser from '../../edgeAuth/EdgeAuthParser';\nimport {EncodedEdgeToken} from '../../edgeAuth/EncodedEdgeToken';\n\nimport {\n ISubscribeSuccessResponse,\n ISubscribeWithOfferRequest,\n ISubscribeWithoutOfferRequest\n} from '../api/Subscribe';\nimport {ISetRemoteDescriptionRequest, ISetRemoteDescriptionResponse} from '../api/SetRemoteDescription';\nimport {IDestroyStreamRequest, IDestroyStreamResponse} from '../api/DestroyStream';\nimport {IAddIceCandidatesRequest, IAddIceCandidatesResponse} from '../api/AddIceCandidates';\nimport VersionManager from '../version/VersionManager';\nimport Parameters from '../../environment/Parameters';\nimport {BitrateMode, BitrateState, ISetTemporaryMaximalBitrate} from '../api/SetTemporaryMaximalBitrate';\nimport BitrateModeMapping from './BitrateModeMapping';\nimport BitrateStateMapping from './BitrateStateMapping';\nimport {BitsPerSecond, Millisecond} from '../../units/Units';\nimport {\n IPublishSuccessResponse,\n IPublishWithOfferRequest,\n IPublishWithoutOfferRequest,\n PublishStatus\n} from '../api/Publish';\n\nconst apiVersion = 7;\n\nexport type SubscribeStatus = 'ok' | 'no-stream' | 'not-found' | 'unauthorized' | 'geo-restricted' | 'geo-blocked' | 'rate-limited' | 'capacity' | 'timeout' | 'forbidden-tag' | 'port-in-range-not-found' | 'failed';\nexport type SetRemoteDescriptionStatus = 'ok' | 'not-found' | 'unauthorized' | 'rate-limited' | 'capacity' | 'timeout' | 'failed';\nexport type SetTemporaryMaximalBitrateStatus = 'ok' | 'not-found' | 'unauthorized' | 'rate-limited' | 'capacity' | 'timeout' | 'failed';\nexport type RemoveTemporaryMaximalBitrateStatus = 'ok' | 'not-found' | 'unauthorized' | 'rate-limited' | 'capacity' | 'timeout' | 'failed';\nexport type AddIceCandidatesStatus = 'ok' | 'not-found' | 'unauthorized' | 'rate-limited' | 'capacity' | 'timeout' | 'failed';\nexport type DestroyStreamStatus = 'ok' | 'not-found' | 'unauthorized' | 'rate-limited' | 'capacity' | 'timeout' | 'failed';\nexport interface IStream {\n streamId: string;\n sharedSecret: string;\n tenancy: string;\n}\n\nexport interface ISubscribeSuccessResponseInit {\n status: 'ok';\n stream: IStream;\n lag: Millisecond;\n rtcConfiguration?: RTCConfiguration;\n setRemoteDescriptionResponse?: {\n sessionDescription: RTCSessionDescriptionInit;\n };\n createOfferDescriptionResponse?: {\n sessionDescription: RTCSessionDescriptionInit;\n };\n createAnswerDescriptionResponse?: {\n sessionDescription: RTCSessionDescriptionInit;\n };\n [key: string]: unknown;\n}\n\nexport interface ISubscribeFailureResponseInit {\n status: 'no-stream' | 'not-found' | 'unauthorized' | 'geo-restricted' | 'geo-blocked' | 'rate-limited' | 'capacity' | 'timeout' | 'forbidden-tag' | 'port-in-range-not-found' | 'failed';\n}\n\nexport interface ISubscribeRequestCallback {\n (request: ISubscribeWithOfferRequest | ISubscribeWithoutOfferRequest): Promise<void>;\n}\n\nexport interface ISubscribeResponseCallback {\n (response: ISubscribeSuccessResponseInit | ISubscribeFailureResponseInit): Promise<void>;\n}\n\nexport type SubscribeOptions = {\n onSubscribeRequestCallback?: ISubscribeRequestCallback;\n onSubscribeResponseCallback?: ISubscribeResponseCallback;\n};\n\nexport type IPublishSuccessResponseInit = {\n status: 'ok';\n stream: IStream;\n lag?: Millisecond;\n rtcConfiguration?: RTCConfiguration;\n setRemoteDescriptionResponse?: {\n sessionDescription: RTCSessionDescriptionInit;\n };\n createOfferDescriptionResponse?: {\n sessionDescription: RTCSessionDescriptionInit;\n };\n createAnswerDescriptionResponse?: {\n sessionDescription: RTCSessionDescriptionInit;\n };\n};\n\nexport type IPublishFailureResponseInit = {\n status: 'not-found' | 'geo-restricted' | 'geo-blocked' | 'unauthorized' | 'rate-limited' | 'capacity' | 'timeout' | 'forbidden-tag' | 'missing-channel-or-room-id' | 'port-in-range-not-found' | 'failed';\n};\n\ninterface ISetRemoteDescriptionResponseInit {\n status: SetRemoteDescriptionStatus;\n sessionDescription?: RTCSessionDescriptionInit;\n}\n\ninterface IAddIceCandidatesResponseInit {\n status: AddIceCandidatesStatus;\n options?: string[];\n}\n\ninterface ISetTemporaryMaximalBitrateResponseInit {\n status: SetTemporaryMaximalBitrateStatus;\n}\n\ninterface IDestroyStreamResponseInit {\n status: DestroyStreamStatus;\n}\n\nexport default class EndPoint {\n private readonly _logger: ILogger = LoggerFactory.getLogger('EndPoint');\n private readonly _uri: string;\n private readonly _timeout: number;\n private _roundTripTime: number = 0;\n\n constructor(uri: string, timeout: number) {\n this._uri = uri;\n this._timeout = timeout;\n\n if (!timeout) {\n throw new Error(`End point requires a timeout`);\n }\n }\n\n get roundTripTime(): number {\n return this._roundTripTime;\n }\n\n toString(): string {\n return `EndPoint[uri=${this._uri}]`;\n }\n\n async ping(): Promise<number> {\n const url = this.buildPingUrl();\n const start = Date.now();\n const response = await Promise.race([\n GlobalScope.value.fetch(url, {\n method: 'GET',\n cache: 'no-cache'\n }),\n new Promise<Response>((_, reject) =>\n GlobalScope.value.setTimeout(() => reject(new Error(`Ping timed out [${url}]`)), this._timeout))\n ]);\n const finished = Date.now();\n\n if (!response.ok) { /* Handle */\n throw new Error(`Ping failed [${url}] [${response.status}]`);\n }\n\n this._roundTripTime = finished - start;\n\n return this._roundTripTime;\n }\n\n async subscribe(token: EncodedEdgeToken, localSessionDescription: RTCSessionDescriptionInit | null, failureCount: number, options: SubscribeOptions = {}): Promise<ISubscribeSuccessResponseInit | ISubscribeFailureResponseInit> {\n const tenancy = EdgeAuthParser.parseToken(token).tenancy;\n\n if (!tenancy) {\n this._logger.error('Failed to parse token [%s]', token);\n\n return {status: 'unauthorized'};\n }\n\n const url = this.buildUrl([tenancy, 'stream', 'subscribe']).toString();\n const formData = new GlobalScope.value.FormData();\n const clientVersion = VersionManager.sdkVersion;\n let requestBody: ISubscribeWithOfferRequest | ISubscribeWithoutOfferRequest;\n\n if (failureCount === 0 && localSessionDescription) {\n requestBody = {\n apiVersion,\n clientVersion,\n bearerToken: token,\n failureCount,\n httpRoundTripTime: this._roundTripTime,\n setRemoteDescription: {\n apiVersion,\n sessionDescription: {\n type: localSessionDescription.type,\n sdp: localSessionDescription.sdp\n }\n },\n createAnswerDescription: {apiVersion}\n };\n } else {\n requestBody = {\n apiVersion,\n clientVersion,\n bearerToken: token,\n failureCount,\n httpRoundTripTime: this._roundTripTime,\n createOfferDescription: {apiVersion}\n };\n }\n\n await options.onSubscribeRequestCallback?.(requestBody);\n\n formData.append('jsonBody', JSON.stringify(requestBody));\n\n const start = Date.now();\n let httpResponse: Response;\n\n try {\n let timeout: number | null = null;\n\n httpResponse = await Promise.race([\n GlobalScope.value.fetch(url, {\n method: 'POST',\n body: formData\n }),\n new Promise<Response>(resolve =>\n timeout = GlobalScope.value.setTimeout(() => {\n this._logger.error('Failed to subscribe', new Error(`Subscribe timed out [${url}]`));\n resolve({status: 408} as Response);\n }, this._timeout))\n ])\n .finally(() => {\n if (timeout) {\n GlobalScope.value.clearTimeout(timeout);\n }\n });\n } catch (e) {\n this._logger.error('Failed to subscribe', e);\n\n return {status: 'failed'};\n }\n\n const status: SubscribeStatus = this.mapHttpStatusToSubscribeStatus(httpResponse);\n\n if (status !== 'ok') {\n const response: ISubscribeFailureResponseInit = {status};\n\n await options.onSubscribeResponseCallback?.(response);\n\n return response;\n }\n\n const finished = Date.now();\n const subscribeResponse = await this.convertHttpResponseToSubscribeResponse(tenancy, httpResponse);\n\n this._logger.debug('Got subscribe response [%j] in [%s] ms', subscribeResponse, finished - start);\n\n await options.onSubscribeResponseCallback?.(subscribeResponse);\n\n return subscribeResponse;\n }\n\n async publish(name: string, token: EncodedEdgeToken, localSessionDescription: RTCSessionDescriptionInit | null, failureCount: number): Promise<IPublishSuccessResponseInit | IPublishFailureResponseInit> {\n const tenancy = EdgeAuthParser.parseToken(token).tenancy;\n\n if (!tenancy) {\n this._logger.error('Failed to parse token [%s]', token);\n\n return {status: 'unauthorized'};\n }\n\n const url = this.buildUrl([tenancy, 'stream', 'publish']).toString();\n const formData = new GlobalScope.value.FormData();\n const clientVersion = VersionManager.sdkVersion;\n\n if (failureCount === 0 && localSessionDescription) {\n const bodyWithOffer: IPublishWithOfferRequest = {\n apiVersion,\n clientVersion,\n bearerToken: token,\n failureCount,\n httpRoundTripTime: this._roundTripTime,\n name,\n setRemoteDescription: {\n apiVersion,\n sessionDescription: {\n type: localSessionDescription.type,\n sdp: localSessionDescription.sdp\n }\n },\n createAnswerDescription: {\n streamId: '',\n apiVersion\n }\n };\n\n formData.append('jsonBody', JSON.stringify(bodyWithOffer));\n } else {\n const bodyWithoutOffer: IPublishWithoutOfferRequest = {\n apiVersion,\n clientVersion,\n bearerToken: token,\n failureCount,\n httpRoundTripTime: this._roundTripTime,\n name,\n createOfferDescription: {\n streamId: '',\n apiVersion\n }\n };\n\n formData.append('jsonBody', JSON.stringify(bodyWithoutOffer));\n }\n\n const start = Date.now();\n let httpResponse: Response;\n\n try {\n let timeout: number | null = null;\n\n httpResponse = await Promise.race([\n GlobalScope.value.fetch(url, {\n method: 'POST',\n body: formData\n }),\n new Promise<Response>(resolve =>\n timeout = GlobalScope.value.setTimeout(() => {\n this._logger.error('Failed to publish', new Error(`Publish timed out [${url}]`));\n resolve({status: 408} as Response);\n }, this._timeout))\n ])\n .finally(() => {\n if (timeout) {\n GlobalScope.value.clearTimeout(timeout);\n }\n });\n } catch (e) {\n this._logger.error('Failed to publish', e);\n\n return {status: 'failed'};\n }\n\n const status: PublishStatus = this.mapHttpStatusToPublishStatus(httpResponse);\n\n if (status !== 'ok') {\n return {status};\n }\n\n const finished = Date.now();\n const subscribeResponse = await this.convertHttpResponseToPublishResponse(tenancy, httpResponse);\n\n this._logger.debug('Got publish response [%j] in [%s] ms', subscribeResponse, finished - start);\n\n return subscribeResponse;\n }\n\n async setRemoteDescription(stream: IStream, sessionDescription: RTCSessionDescriptionInit): Promise<ISetRemoteDescriptionResponseInit> {\n const url = this.buildUrl([stream.tenancy, 'stream', stream.streamId, 'description', 'remote']).toString();\n const formData = new GlobalScope.value.FormData();\n const body: ISetRemoteDescriptionRequest = {\n apiVersion,\n sharedSecret: stream?.sharedSecret,\n sessionDescription: {\n type: sessionDescription.type,\n sdp: sessionDescription.sdp\n }\n };\n\n formData.append('jsonBody', JSON.stringify(body));\n\n const start = Date.now();\n let httpResponse: Response;\n\n try {\n let timeout: number | null = null;\n\n httpResponse = await Promise.race([\n GlobalScope.value.fetch(url, {\n method: 'POST',\n body: formData\n }),\n new Promise<Response>(resolve =>\n timeout = GlobalScope.value.setTimeout(() => {\n this._logger.error('Failed to set remote description', new Error(`Set remote description timed out [${url}]`));\n resolve({status: 408} as Response);\n }, this._timeout))\n ])\n .finally(() => {\n if (timeout) {\n GlobalScope.value.clearTimeout(timeout);\n }\n });\n } catch (e) {\n this._logger.error('Failed to set remote description', e);\n\n return {status: 'failed'};\n }\n\n const status: SetRemoteDescriptionStatus = this.mapHttpStatusToSetRemoteDescriptionStatus(httpResponse);\n\n if (status !== 'ok') {\n return {status};\n }\n\n const finished = Date.now();\n const setRemoteDescriptionResponse = await this.convertHttpResponseToSetRemoteDescriptionResponse(httpResponse);\n\n this._logger.debug('Got set remote description response [%j] in [%s] ms', setRemoteDescriptionResponse, finished - start);\n\n return setRemoteDescriptionResponse;\n }\n\n async limitBitrate(\n stream: IStream,\n elapsedInMilliseconds: number,\n bitrateInBitsPerSecond: BitsPerSecond,\n bitrateState: BitrateState,\n bitrateMode: BitrateMode,\n ): Promise<ISetTemporaryMaximalBitrateResponseInit> {\n const url = this.buildUrl([stream.tenancy, 'stream', stream.streamId, 'bitrate']).toString();\n const formData = new GlobalScope.value.FormData();\n const body: ISetTemporaryMaximalBitrate = {\n apiVersion,\n sharedSecret: stream.sharedSecret,\n elapsedInMilliseconds,\n bitrateInBitsPerSecond,\n bitrateState: BitrateStateMapping.convertBitrateStateToBitrateStateType(bitrateState),\n bitrateMode: BitrateModeMapping.convertBitrateModeToBitrateModeType(bitrateMode)\n };\n\n formData.append('jsonBody', JSON.stringify(body));\n\n const start = Date.now();\n let httpResponse: Response;\n\n try {\n let timeout: number | null = null;\n\n httpResponse = await Promise.race([\n GlobalScope.value.fetch(url, {\n method: 'POST',\n body: formData\n }),\n new Promise<Response>(resolve =>\n timeout = GlobalScope.value.setTimeout(() => {\n this._logger.error('Failed to set limit bitrate timed', new Error(`Set limit bitrate timed out [${url}]`));\n resolve({status: 408} as Response);\n }, this._timeout))\n ])\n .finally(() => {\n if (timeout) {\n GlobalScope.value.clearTimeout(timeout);\n }\n });\n } catch (e) {\n this._logger.error('Failed to set limit bitrate timed', e);\n\n return {status: 'failed'};\n }\n\n const status: SetTemporaryMaximalBitrateStatus = this.mapHttpStatusToSetTemporaryMaximalBitrateStatus(httpResponse);\n const finished = Date.now();\n\n this._logger.info('Got set limit bitrate response [%s] in [%s] ms', status, finished - start);\n\n return {status};\n }\n\n async addIceCandidates(stream: IStream, candidates: RTCIceCandidate[], discoveryCompleted: boolean, options: string[] = []): Promise<IAddIceCandidatesResponseInit> {\n const url = this.buildUrl([stream.tenancy, 'stream', stream.streamId, 'ice', 'candidates']).toString();\n const formData = new GlobalScope.value.FormData();\n const body: IAddIceCandidatesRequest = {\n apiVersion,\n sharedSecret: stream.sharedSecret,\n candidates,\n discoveryCompleted,\n options\n };\n\n formData.append('jsonBody', JSON.stringify(body));\n\n const start = Date.now();\n let httpResponse: Response;\n\n try {\n let timeout: number | null = null;\n\n httpResponse = await Promise.race([\n GlobalScope.value.fetch(url, {\n method: 'POST',\n body: formData\n }),\n new Promise<Response>(resolve =>\n timeout = GlobalScope.value.setTimeout(() => {\n this._logger.error('Failed to add ice candidates', new Error(`Add ice candidates timed out [${url}]`));\n resolve({status: 408} as Response);\n }, this._timeout))\n ])\n .finally(() => {\n if (timeout) {\n GlobalScope.value.clearTimeout(timeout);\n }\n });\n } catch (e) {\n this._logger.error('Failed to add ice candidates', e);\n\n return {status: 'failed'};\n }\n\n const status: AddIceCandidatesStatus = this.mapHttpStatusToAddIceCandidatesStatus(httpResponse);\n\n if (status !== 'ok') {\n return {status};\n }\n\n const finished = Date.now();\n const addIceCandidatesResponse = await this.convertHttpResponseToAddIceCandidatesResponse(httpResponse);\n\n this._logger.info('Got add ICE candidates response [%j] in [%s] ms', addIceCandidatesResponse, finished - start);\n\n return addIceCandidatesResponse;\n }\n\n async destroyStream(stream: IStream, reason: string): Promise<IDestroyStreamResponseInit> {\n const url = this.buildUrl([stream.tenancy, 'stream', stream.streamId, 'destroy']).toString();\n const formData = new GlobalScope.value.FormData();\n const body: IDestroyStreamRequest = {\n apiVersion,\n sharedSecret: stream.sharedSecret,\n reason,\n options: []\n };\n\n formData.append('jsonBody', JSON.stringify(body));\n\n const start = Date.now();\n let httpResponse: Response;\n\n try {\n let timeout: number | null = null;\n\n httpResponse = await Promise.race([\n GlobalScope.value.fetch(url, {\n method: 'POST',\n body: formData,\n cache: 'no-cache'\n }),\n new Promise<Response>(resolve =>\n timeout = GlobalScope.value.setTimeout(() => {\n this._logger.error('Failed to subscribe', new Error(`Delete stream timed out [${url}]`));\n resolve({status: 408} as Response);\n }, this._timeout))\n ])\n .finally(() => {\n if (timeout) {\n GlobalScope.value.clearTimeout(timeout);\n }\n });\n } catch (e) {\n this._logger.error('Failed to delete stream', e);\n\n return {status: 'failed'};\n }\n\n const status: DestroyStreamStatus = this.mapHttpStatusToSetDestroyStreamStatus(httpResponse);\n\n if (status !== 'ok') {\n return {status};\n }\n\n const finished = Date.now();\n const destroyStreamResponse = await this.convertHttpResponseToDestroyStreamResponse(httpResponse);\n\n this._logger.info('Got destroy stream response [%j] in [%s] ms', destroyStreamResponse, finished - start);\n\n return destroyStreamResponse;\n }\n\n async destroyStreamOnUnmount(stream: IStream, reason: string): Promise<void> {\n if (!navigator?.sendBeacon) {\n const ignored = this.destroyStream(stream, reason);\n }\n\n const url = this.buildUrl([stream.tenancy, 'stream', stream.streamId, 'destroy']).toString();\n const formData = new GlobalScope.value.FormData();\n const body: IDestroyStreamRequest = {\n apiVersion,\n sharedSecret: stream.sharedSecret,\n reason,\n options: []\n };\n\n formData.append('jsonBody', JSON.stringify(body));\n\n navigator.sendBeacon(url, formData);\n }\n\n private buildUrl(path: string[]): URL {\n const uri = new GlobalScope.value.URL(this._uri);\n const pathAsArray = uri.pathname.split('/');\n\n pathAsArray.length = pathAsArray.length - 1;\n\n uri.pathname = pathAsArray.concat(...path).join('/');\n\n return uri;\n }\n\n private buildPingUrl(): string {\n const uri = new GlobalScope.value.URL(this._uri);\n const sdkVersion = VersionManager.sdkVersion;\n const intentions = Parameters.discoveryParameters.intentions;\n\n uri.searchParams.set('type', 'http');\n uri.searchParams.set('version', sdkVersion);\n uri.searchParams.set('intentions', intentions);\n uri.searchParams.set('_', `${Date.now()}`);\n\n return uri.toString();\n }\n\n private mapHttpStatusToPublishStatus(response: Response): PublishStatus {\n if (!response) {\n return 'failed';\n }\n\n switch (response.status) {\n case 200:\n return 'ok';\n case 401:\n return 'unauthorized';\n case 402:\n return 'geo-restricted';\n case 403:\n return 'geo-blocked';\n case 406:\n return 'missing-channel-or-room-id';\n case 408:\n return 'timeout';\n case 409:\n return 'port-in-range-not-found';\n case 415:\n return 'forbidden-tag';\n case 503:\n return 'capacity';\n case 504:\n return 'rate-limited';\n default:\n return 'failed';\n }\n }\n\n private mapHttpStatusToSubscribeStatus(response: Response): SubscribeStatus {\n if (!response) {\n return 'failed';\n }\n\n switch (response.status) {\n case 200:\n return 'ok';\n case 401:\n return 'unauthorized';\n case 402:\n return 'geo-restricted';\n case 403:\n return 'geo-blocked';\n case 408:\n return 'timeout';\n case 409:\n return 'port-in-range-not-found';\n case 415:\n return 'forbidden-tag';\n case 503:\n return 'capacity';\n case 504:\n return 'rate-limited';\n default:\n return 'failed';\n }\n }\n\n private mapHttpStatusToSetRemoteDescriptionStatus(response: Response): SetRemoteDescriptionStatus {\n if (!response) {\n return 'failed';\n }\n\n switch (response.status) {\n case 200:\n return 'ok';\n case 401:\n return 'unauthorized';\n case 408:\n return 'timeout';\n case 503:\n return 'capacity';\n case 504:\n return 'rate-limited';\n default:\n return 'failed';\n }\n }\n\n private mapHttpStatusToSetTemporaryMaximalBitrateStatus(response: Response): SetTemporaryMaximalBitrateStatus {\n if (!response) {\n return 'failed';\n }\n\n switch (response.status) {\n case 200:\n return 'ok';\n case 401:\n return 'unauthorized';\n case 408:\n return 'timeout';\n case 503:\n return 'capacity';\n case 504:\n return 'rate-limited';\n default:\n return 'failed';\n }\n }\n\n private mapHttpStatusToAddIceCandidatesStatus(response: Response): AddIceCandidatesStatus {\n if (!response) {\n return 'failed';\n }\n\n switch (response.status) {\n case 200:\n return 'ok';\n case 401:\n return 'unauthorized';\n case 408:\n return 'timeout';\n case 503:\n return 'capacity';\n case 504:\n return 'rate-limited';\n default:\n return 'failed';\n }\n }\n\n private mapHttpStatusToSetDestroyStreamStatus(response: Response): DestroyStreamStatus {\n if (!response) {\n return 'failed';\n }\n\n switch (response.status) {\n case 200:\n return 'ok';\n case 401:\n return 'unauthorized';\n case 408:\n return 'timeout';\n case 503:\n return 'capacity';\n case 504:\n return 'rate-limited';\n default:\n return 'failed';\n }\n }\n\n private async convertHttpResponseToSubscribeResponse(tenancy: string, response: Response): Promise<ISubscribeSuccessResponseInit> {\n const data = await response.json() as ISubscribeSuccessResponse;\n const {\n status,\n streamId,\n sharedSecret,\n lag,\n rtcConfiguration,\n setRemoteDescriptionResponse,\n createAnswerDescriptionResponse,\n createOfferDescriptionResponse,\n ...otherProperties\n } = data;\n const subscribeResponse: ISubscribeSuccessResponseInit = {\n status,\n stream: {\n tenancy,\n streamId,\n sharedSecret\n },\n lag,\n ...otherProperties\n };\n\n if (rtcConfiguration) {\n subscribeResponse.rtcConfiguration = this.convertIRtcConfigurationToRTCConfiguration(rtcConfiguration);\n }\n\n if (setRemoteDescriptionResponse?.sessionDescription) {\n subscribeResponse.setRemoteDescriptionResponse = {sessionDescription: setRemoteDescriptionResponse.sessionDescription};\n }\n\n if (createAnswerDescriptionResponse?.sessionDescription) {\n subscribeResponse.createAnswerDescriptionResponse = {sessionDescription: createAnswerDescriptionResponse.sessionDescription};\n }\n\n if (createOfferDescriptionResponse?.sessionDescription) {\n subscribeResponse.createOfferDescriptionResponse = {sessionDescription: createOfferDescriptionResponse.sessionDescription};\n }\n\n return subscribeResponse;\n }\n\n private async convertHttpResponseToPublishResponse(tenancy: string, response: Response): Promise<IPublishSuccessResponseInit> {\n const data = await response.json() as IPublishSuccessResponse;\n const publishResponse: IPublishSuccessResponseInit = {\n status: data.status,\n stream: {\n tenancy,\n streamId: data.streamId,\n sharedSecret: data.sharedSecret\n }\n };\n\n if (data) {\n if (data.rtcConfiguration) {\n publishResponse.rtcConfiguration = this.convertIRtcConfigurationToRTCConfiguration(data.rtcConfiguration);\n }\n\n if (data.setRemoteDescriptionResponse && data.setRemoteDescriptionResponse.sessionDescription) {\n publishResponse.setRemoteDescriptionResponse = {sessionDescription: data.setRemoteDescriptionResponse.sessionDescription};\n }\n\n if (data.createAnswerDescriptionResponse && data.createAnswerDescriptionResponse.sessionDescription) {\n publishResponse.createAnswerDescriptionResponse = {sessionDescription: data.createAnswerDescriptionResponse.sessionDescription};\n }\n\n if (data.createOfferDescriptionResponse && data.createOfferDescriptionResponse.sessionDescription) {\n publishResponse.createOfferDescriptionResponse = {sessionDescription: data.createOfferDescriptionResponse.sessionDescription};\n }\n }\n\n return publishResponse;\n }\n\n private convertIRtcConfigurationToRTCConfiguration(configuration: RTCConfiguration): RTCConfiguration {\n const rtcConfiguration: RTCConfiguration = {iceServers: []};\n\n if (configuration.bundlePolicy) {\n rtcConfiguration.bundlePolicy = configuration.bundlePolicy;\n }\n\n if (typeof configuration.iceCandidatePoolSize === 'number') {\n rtcConfiguration.iceCandidatePoolSize = configuration.iceCandidatePoolSize;\n }\n\n if (configuration.iceServers) {\n const iceServers: RTCIceServer[] = [];\n\n for (let i = 0; i < configuration.iceServers.length; i++) {\n iceServers.push({\n urls: configuration.iceServers[i].urls,\n username: configuration.iceServers[i].username,\n credential: configuration.iceServers[i].credential\n });\n }\n\n rtcConfiguration.iceServers = iceServers;\n }\n\n if (configuration.iceTransportPolicy) {\n rtcConfiguration.iceTransportPolicy = configuration.iceTransportPolicy;\n }\n\n if (configuration.rtcpMuxPolicy) {\n rtcConfiguration.rtcpMuxPolicy = configuration.rtcpMuxPolicy;\n }\n\n return rtcConfiguration;\n }\n private async convertHttpResponseToSetRemoteDescriptionResponse(response: Response): Promise<ISetRemoteDescriptionResponseInit> {\n const data = await response.json() as ISetRemoteDescriptionResponse;\n const setRemoteDescriptionResponse: ISetRemoteDescriptionResponseInit = {status: data.status};\n\n if (data && data.sessionDescription) {\n setRemoteDescriptionResponse.sessionDescription = data.sessionDescription;\n }\n\n return setRemoteDescriptionResponse;\n }\n\n private async convertHttpResponseToAddIceCandidatesResponse(response: Response): Promise<IAddIceCandidatesResponseInit> {\n const data = await response.json() as IAddIceCandidatesResponse;\n const addIceCandidatesResponse: IAddIceCandidatesResponseInit = {\n status: data.status,\n options: []\n };\n\n if (data) {\n if (data.options) {\n addIceCandidatesResponse.options = data.options;\n }\n }\n\n return addIceCandidatesResponse;\n }\n\n private async convertHttpResponseToDestroyStreamResponse(response: Response): Promise<IDestroyStreamResponseInit> {\n const data = await response.json() as IDestroyStreamResponse;\n const destroyStream: IDestroyStreamResponseInit = {status: data.status};\n\n return destroyStream;\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport GlobalScope from '../../globalScope/GlobalScope';\nimport {ILogger} from '../../logger/LoggerInterface';\nimport LoggerFactory from '../../logger/LoggerFactory';\nimport MetricsService from '../../metrics/MetricsService';\nimport MetricsFactory from '../../metrics/MetricsFactory';\nimport MetricsType from '../../metrics/MetricsType';\nimport DiscoveryUri from './DiscoveryUri';\nimport EndPoint from './EndPoint';\nimport SDK from '../SDK';\n\nconst defaultTimeout = 20000;\n\nexport default class DiscoveryService {\n private _logger: ILogger = LoggerFactory.getLogger('Discovery');\n private _metricsService: MetricsService;\n private _uri: URL;\n\n constructor(uri: URL) {\n if (!uri) {\n throw new Error('Discovery requires uri');\n }\n\n this._metricsService = MetricsFactory.getMetricsService(uri.toString());\n this._uri = uri;\n }\n\n async discoverNearbyEndPoints(uri: URL, timeout: number): Promise<EndPoint[]> {\n if (!timeout) {\n throw new Error('Discovery requires timeout');\n }\n\n const url = uri.toString();\n const response = await Promise.race([\n GlobalScope.value.fetch(url, {\n method: 'GET',\n cache: 'no-cache'\n }),\n new Promise<Response>((_, reject) => GlobalScope.value.setTimeout(() => reject(new Error(`Discovery timed out [${url}]`)), timeout))\n ]);\n\n if (!response.ok) {\n throw new Error(`Discovery failed [${url}] [${response.status}]`);\n }\n\n if (response.body === null) {\n throw new Error(`Discovery failed with no data [${url}]`);\n }\n\n const asString = await response.text();\n const endPoints = asString.split(',');\n\n return endPoints.map(endPoint => new EndPoint(endPoint, timeout));\n }\n\n async discoverClosestEndPoint(timeout: number = defaultTimeout): Promise<EndPoint> {\n const url = DiscoveryUri.buildDiscoveryUrl(this._uri);\n const endPoints = await this.discoverNearbyEndPoints(new GlobalScope.value.URL(url), timeout);\n let failedRequests = 0;\n const propagateFailureIfAllRequestsFailed = (): Promise<void> => new Promise((_, reject) => {\n if (failedRequests >= endPoints.length) {\n reject(`Discovery of [${endPoints.length}] endpoints from [${url}] failed, preventing it from completing`);\n }\n });\n const endPoint = await Promise.race(endPoints.map(endPoint => endPoint\n .ping()\n .catch(e => {\n this._logger.warn('Failed to ping end point [%s]', endPoint, e);\n\n failedRequests++;\n\n return propagateFailureIfAllRequestsFailed();\n })\n .then(time => {\n const now = Date.now();\n\n this._logger.info('Discovered end point [%s] with time [%s]', endPoint.toString(), time);\n this._metricsService.push({\n metricType: MetricsType.RoundTripTime,\n runtime: (now - SDK.pageLoadTime) / 1000,\n value: {uint64: time || 0},\n resource: endPoint.toString(),\n kind: 'ping'\n });\n\n return endPoint;\n })));\n\n return endPoint;\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport GlobalScope from '../../globalScope/GlobalScope';\nimport DiscoveryService from './DiscoveryService';\nimport EndPoint from './EndPoint';\nimport SDK from '../SDK';\n\nconst discoveryCacheInterval = 60000;\n\ninterface IPerURIEndpoint { [x: string]: Promise<EndPoint> }\n\nexport default class Discovery {\n private static _cache: IPerURIEndpoint = {};\n\n static async precacheClosestEndPointDiscovery(): Promise<EndPoint> {\n return new Promise<EndPoint>(resolveEndPointPromise => {\n const globalScopeSubscription = GlobalScope.subscribe(globalScope => {\n if (!globalScope) {\n return;\n }\n\n const uri = new globalScope.URL(SDK.discoveryUri.value);\n\n return Discovery.discoverClosestEndPointWithCaching(uri)\n .then(resolveEndPointPromise)\n .then(() => globalScopeSubscription.dispose());\n });\n });\n }\n\n static async discoverClosestEndPointWithCaching(uri: URL): Promise<EndPoint> {\n const url = uri.toString();\n\n if (url in Discovery._cache) {\n return Discovery._cache[url];\n }\n\n const discoveryService = new DiscoveryService(uri);\n const cachedValue = Discovery._cache[url] = discoveryService.discoverClosestEndPoint();\n const ignored = Discovery._cache[url].then(() => {\n const ignored = GlobalScope.value.setTimeout(() => {\n if (Discovery._cache[url] === cachedValue) {\n delete Discovery._cache[url];\n }\n }, discoveryCacheInterval);\n }).catch(() => {\n delete Discovery._cache[url];\n });\n\n return cachedValue;\n }\n\n static clearCachedClosestEndpoint(uri: URL): void {\n const url = uri.toString();\n\n if (url in Discovery._cache) {\n delete Discovery._cache[url];\n }\n }\n\n private constructor() {\n throw new Error('Discovery is a static class that may not be instantiated');\n }\n}\n\nconst ignored = Discovery.precacheClosestEndPointDiscovery();","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nexport enum NetworkStates {\n NetworkEmpty,\n NetworkIdle,\n NetworkLoading,\n NetworkNoSource\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport {ILogger} from '../../logger/LoggerInterface';\nimport LoggerFactory from '../../logger/LoggerFactory';\nimport {ChunkedStreaming} from './ChunkedStreaming';\nimport {ChunkedStreamingOptions, ChunkedStreamingStatistics} from './StreamTypes';\nimport {IWebPlayer} from './IWebPlayer';\nimport {NetworkStates} from './NetworkStates';\n\nconst bandwidthToStartAt = 3000000; // Corresponds to 720p in most setups\nconst minTimeBeforeNextReload = 15000;\n\ntype PlayerOptions = {\n preferNative?: boolean;\n originStartTime: number;\n lag: number;\n bandwidthToStartAt: number;\n};\n\nexport default class WebPlayer {\n private readonly _logger: ILogger = LoggerFactory.getLogger('WebPlayer');\n private readonly _videoElement: HTMLVideoElement;\n private readonly _kind: string;\n private readonly _streamId: string;\n private readonly _manifestURI: string;\n private readonly _options: ChunkedStreamingOptions;\n private readonly _handleStreamFailure: Function;\n private _player: IWebPlayer | null;\n private _lastReloadTime: number;\n\n constructor(videoElement: HTMLVideoElement, kind: string, streamId: string, manifestURI: string, options: ChunkedStreamingOptions, handleStreamFailure: Function) {\n this._videoElement = videoElement;\n this._kind = kind;\n this._streamId = streamId;\n this._manifestURI = encodeURI(manifestURI).replace(/[#]/g, '%23');\n this._options = options;\n this._player = null;\n this._lastReloadTime = 0;\n this._handleStreamFailure = handleStreamFailure;\n }\n\n start(): void {\n if (ChunkedStreaming.phenixWebPlayer) {\n const playerOptions: PlayerOptions = {\n ...this._options,\n bandwidthToStartAt\n };\n\n this._player = new ChunkedStreaming.phenixWebPlayer.WebPlayer(this._logger, this._videoElement, playerOptions);\n this._player?.start(this._manifestURI);\n\n this._player?.addEventListener('error', errorObject => {\n if (this.canReload() && errorObject && (errorObject.code === 3 || errorObject.severity === ChunkedStreaming.phenixWebPlayer.errors.severity.RECOVERABLE)) {\n this._logger.warn('Reloading unhealthy stream after error event [%j]', errorObject);\n this.reloadIfAble();\n }\n\n this._logger.error('Cannot reload with error [%j]', errorObject);\n\n this._handleStreamFailure();\n });\n\n return;\n }\n }\n\n isSupported(): boolean {\n return ChunkedStreaming.phenixWebPlayer && ChunkedStreaming.phenixWebPlayer.isSupported;\n }\n\n getStats(): ChunkedStreamingStatistics {\n if (!this._player) {\n return {\n width: 0,\n height: 0,\n currentTime: 0.0,\n lag: 0.0,\n networkState: NetworkStates.NetworkNoSource,\n dataBuffered: 0.0\n };\n }\n\n const statistics = this._player.getStats();\n const currentTime = statistics.currentTime || this._videoElement['currentTime'];\n const trueCurrentTime = (Date.now() - this._options.originStartTime) / 1000;\n\n if (this._videoElement.buffered?.length) {\n statistics.dataBuffered = this._videoElement.buffered.end(0);\n }\n\n if (statistics.isNative && statistics.deliveryType === 'Hls') {\n statistics.currentTime = currentTime - statistics.lag;\n }\n\n if (!statistics.currentTime) {\n statistics.currentTime = currentTime;\n }\n\n if (!statistics.isNative) {\n statistics.lag = Math.max(0.0, trueCurrentTime - currentTime);\n }\n\n if (this._videoElement.buffered?.length) {\n statistics.networkState = NetworkStates.NetworkLoading;\n } else if (statistics.currentTime > 0) {\n statistics.networkState = NetworkStates.NetworkIdle;\n } else if (statistics.video) {\n statistics.networkState = NetworkStates.NetworkEmpty;\n } else {\n statistics.networkState = NetworkStates.NetworkNoSource;\n }\n\n return statistics;\n }\n\n dispose(): void {\n if (this._player) {\n this._player.dispose();\n }\n\n this._player = null;\n }\n\n private canReload(): boolean {\n const hasElapsedMinTimeSinceLastReload = !this._lastReloadTime || Date.now() - this._lastReloadTime > minTimeBeforeNextReload;\n\n return !!this._videoElement && !!this._player && this._videoElement.buffered.length !== 0 && hasElapsedMinTimeSinceLastReload;\n }\n\n private reloadIfAble(): void {\n if (!this.canReload()) {\n return;\n }\n\n this._logger.warn('[%s] Reloading unhealthy stream that was active for at least [%s] seconds', this._streamId, minTimeBeforeNextReload / 1000);\n\n this._lastReloadTime = Date.now();\n\n this.reload();\n }\n\n private reload(): void {\n if (this._player) {\n this._player.dispose();\n }\n\n this._player = null;\n\n this.start();\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport Disposable from '../../lang/Disposable';\nimport DisposableList from '../../lang/DisposableList';\nimport {ILogger} from '../../logger/LoggerInterface';\nimport LoggerFactory from '../../logger/LoggerFactory';\nimport {ChunkedStreaming} from './ChunkedStreaming';\nimport {ChunkedStreamingOptions, ChunkedStreamingStatistics} from './StreamTypes';\nimport {IShakaPlayer, ShakaOptions} from './IShakaPlayer';\nimport {NetworkStates} from './NetworkStates';\n\nexport default class ShakaPlayer {\n private readonly _logger: ILogger = LoggerFactory.getLogger('ShakaPlayer');\n private readonly _videoElement: HTMLVideoElement;\n private readonly _kind: string;\n private readonly _streamId: string;\n private readonly _manifestURI: string;\n private readonly _options: ChunkedStreamingOptions;\n private readonly _handleStreamFailure: Function;\n private readonly _disposables: DisposableList;\n private readonly _monitoredStatistics: {\n estimatedBandwidth: number | undefined;\n playTime: number | undefined;\n };\n private _player: IShakaPlayer | null;\n\n constructor(videoElement: HTMLVideoElement, kind: string, streamId: string, manifestURI: string, options: ChunkedStreamingOptions, handleStreamFailure: Function) {\n this._videoElement = videoElement;\n this._kind = kind;\n this._streamId = streamId;\n this._manifestURI = encodeURI(manifestURI).replace(/[#]/g, '%23');\n this._options = options;\n this._handleStreamFailure = handleStreamFailure;\n this._disposables = new DisposableList();\n this._monitoredStatistics = {\n estimatedBandwidth: 0,\n playTime: 0\n };\n this._player = null;\n }\n\n start(): void {\n if (ChunkedStreaming.shaka) {\n const playerOptions: ShakaOptions = {\n abr: {defaultBandwidthEstimate: 2000000},\n manifest: {retryParameters: {timeout: 10000}},\n streaming: {\n liveSyncPanicThreshold: 1,\n bufferingGoal: 60,\n bufferBehind: 30,\n retryParameters: {\n timeout: 10000,\n maxAttempts: 10,\n backoffFactor: 1.1\n }\n }\n };\n\n this._player = new ChunkedStreaming.shaka.Player(this._videoElement);\n this.loadPlayer(playerOptions);\n\n return;\n }\n }\n\n getStats(): ChunkedStreamingStatistics {\n if (!this._player) {\n return {\n width: 0,\n height: 0,\n currentTime: 0,\n lag: 0,\n networkState: NetworkStates.NetworkNoSource,\n dataBuffered: 0.0\n };\n }\n\n const statistics = {\n ...this._player.getStats(),\n currentTime: 0,\n lag: 0\n };\n const currentTime = this._videoElement['currentTime'] || 0;\n const trueCurrentTime = (Date.now() - this._options.originStartTime) / 1000;\n const lag = Math.max(0.0, trueCurrentTime - currentTime);\n\n if (this._videoElement) {\n statistics.currentTime = currentTime;\n statistics.lag = lag;\n\n if (this._videoElement.buffered && this._videoElement.buffered.length) {\n statistics.dataBuffered = this._videoElement.buffered.end(0);\n }\n }\n\n if (statistics.estimatedBandwidth) {\n if (statistics.estimatedBandwidth && statistics.estimatedBandwidth > 0 && (this._monitoredStatistics.estimatedBandwidth && this._monitoredStatistics.estimatedBandwidth < statistics.estimatedBandwidth)) {\n statistics.networkState = NetworkStates.NetworkLoading;\n } else if (statistics.playTime && statistics.playTime > 0 && (this._monitoredStatistics.playTime && this._monitoredStatistics.playTime < statistics.playTime)) {\n statistics.networkState = NetworkStates.NetworkIdle;\n } else if (statistics.video) {\n statistics.networkState = NetworkStates.NetworkEmpty;\n } else {\n statistics.networkState = NetworkStates.NetworkNoSource;\n }\n }\n\n this._monitoredStatistics.estimatedBandwidth = statistics.estimatedBandwidth;\n this._monitoredStatistics.playTime = statistics.playTime;\n\n return statistics;\n }\n\n dispose(): void {\n this._disposables.dispose();\n\n if (this._player) {\n this._player.unload();\n this._player.destroy();\n }\n\n this._player = null;\n }\n\n private loadPlayer(playerConfig: ShakaOptions): void {\n this._player?.configure(playerConfig);\n\n const errorHandler = () => this._handleStreamFailure();\n\n this._player?.addEventListener('error', errorHandler);\n\n this._disposables.add(new Disposable(() => this._player?.removeEventListener('error', errorHandler)));\n\n const ignored = this._player?.load(this._manifestURI).then(() => {\n this._logger.info('[%s] DASH live stream has been loaded', this._streamId);\n\n if (this._videoElement.play) {\n this._videoElement.play();\n }\n }).catch(e => {\n this._logger.error('[%s] Error while loading DASH live stream [%s]', this._streamId, e.code, e);\n });\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport {ChunkedStreaming} from './ChunkedStreaming';\nimport {ChunkedStreamingOptions, ChunkedStreamingStatistics} from './StreamTypes';\nimport {IHlsPlayerType} from './IHlsPlayer';\nimport {NetworkStates} from './NetworkStates';\n\nexport default class HlsPlayer {\n private readonly _videoElement: HTMLVideoElement;\n private readonly _kind: string;\n private readonly _streamId: string;\n private readonly _manifestURI: string;\n private readonly _options: ChunkedStreamingOptions;\n private _player: IHlsPlayerType | null;\n\n constructor(videoElement: HTMLVideoElement, kind: string, streamId: string, manifestURI: string, options: ChunkedStreamingOptions) {\n this._videoElement = videoElement;\n this._kind = kind;\n this._streamId = streamId;\n this._manifestURI = encodeURI(manifestURI).replace(/[#]/g, '%23');\n this._options = options;\n this._player = null;\n }\n\n start(): void {\n if (ChunkedStreaming.hlsPlayer) {\n if (ChunkedStreaming.hlsPlayer.isSupported()) {\n this._player = new ChunkedStreaming.hlsPlayer({\n enableWorker: true,\n maxBufferLength: 1,\n backBufferLength: 0,\n liveSyncDuration: 7,\n liveDurationInfinity: true,\n liveMaxLatencyDuration: Infinity,\n highBufferWatchdogPeriod: 1\n });\n this._player.loadSource(this._manifestURI);\n this._player.attachMedia(this._videoElement);\n } else if (this._videoElement.canPlayType('application/vnd.apple.mpegurl')) {\n this._videoElement.src = this._manifestURI;\n }\n }\n }\n\n isSupported(): boolean {\n return ChunkedStreaming.hlsPlayer && ChunkedStreaming.hlsPlayer.isSupported();\n }\n\n getStats(): ChunkedStreamingStatistics {\n if (!this._player) {\n return {\n width: 0,\n height: 0,\n currentTime: 0.0,\n lag: 0.0,\n networkState: NetworkStates.NetworkNoSource,\n dataBuffered: 0.0\n };\n }\n\n const statistics = {\n width: this._player.media.offsetWidth,\n height: this._player.media.offsetHeight,\n currentTime: this._player.media.currentTime,\n lag: 0.0,\n networkState: NetworkStates.NetworkIdle,\n dataBuffered: 0.0\n };\n\n if (this._videoElement.buffered && this._videoElement.buffered.length) {\n statistics.dataBuffered = this._videoElement.buffered.end(0);\n }\n\n if (this._player.streamController.state === 'IDLE') {\n statistics.networkState = NetworkStates.NetworkIdle;\n } else if (this._player.streamController.state === 'ERROR' || this._player.streamController.state === 'ENDED') {\n statistics.networkState = NetworkStates.NetworkNoSource;\n } else if (this._player.streamController.state.includes('LOADING') || this._player.streamController.state.includes('WAITING')) {\n statistics.networkState = NetworkStates.NetworkLoading;\n } else {\n statistics.networkState = NetworkStates.NetworkEmpty;\n }\n\n const currentTime = this._videoElement['currentTime'] || 0;\n const trueCurrentTime = (Date.now() - this._options.originStartTime) / 1000;\n\n statistics.lag = Math.max(0.0, (currentTime + (this._options.lag / 1000)) - trueCurrentTime);\n\n return statistics;\n }\n\n dispose(): void {\n if (this._player && this._player.destroy) {\n this._player.destroy();\n\n this._player = null;\n }\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport FeatureEnablement from '../../environment/FeatureEnablement';\nimport WebPlayer from './WebPlayer';\nimport SDK from '../SDK';\nimport ShakaPlayer from './ShakaPlayer';\nimport HlsPlayer from './HlsPlayer';\nimport IDisposable from '../../lang/IDisposable';\nimport {\n ChunkedStreamingOptions,\n ChunkedStreamingStatistics\n} from './StreamTypes';\nimport {ShakaPlayerType} from './IShakaPlayer';\nimport {HlsPlayerType} from './IHlsPlayer';\nimport {WebPlayerType} from './IWebPlayer';\n\nexport class ChunkedStreaming {\n private static _pending = false;\n private static _hlsPlayer: HlsPlayerType;\n private static _phenixWebPlayer: WebPlayerType;\n private static _shaka: ShakaPlayerType;\n private static _options: ChunkedStreamingOptions;\n private static _player: ShakaPlayer | WebPlayer | HlsPlayer;\n\n static get hlsPlayer(): HlsPlayerType {\n return this._hlsPlayer;\n }\n\n static get phenixWebPlayer(): WebPlayerType {\n return this._phenixWebPlayer;\n }\n\n static get shaka(): ShakaPlayerType {\n return this._shaka;\n }\n\n static async start(videoElement: HTMLVideoElement, streamId: string, offerSdp: string, options: ChunkedStreamingOptions, handleStreamFailure: Function): Promise<IDisposable> {\n this._options = options;\n\n if (this._hlsPlayer || this._shaka || this._phenixWebPlayer) {\n return this.loaded(videoElement, streamId, offerSdp, handleStreamFailure);\n }\n\n if (!SDK.webPlayerLoader && !SDK.shakaPlayerLoader && !SDK.hlsJsLoader) {\n throw new Error('Unsupported-feature, add stream player');\n }\n\n return new Promise<IDisposable>(resolve => {\n if (SDK.hlsJsLoader) {\n this._pending = true;\n SDK.hlsJsLoader((player: HlsPlayerType): void => {\n this._hlsPlayer = player;\n\n if (this._pending) {\n this._pending = false;\n\n resolve(this.loaded(videoElement, streamId, offerSdp, handleStreamFailure));\n }\n });\n }\n\n if (SDK.webPlayerLoader) {\n this._pending = true;\n SDK.webPlayerLoader((player: WebPlayerType): void => {\n this._phenixWebPlayer = player;\n\n if (this._pending) {\n this._pending = false;\n\n resolve(this.loaded(videoElement, streamId, offerSdp, handleStreamFailure));\n }\n });\n }\n\n if (SDK.shakaPlayerLoader) {\n this._pending = true;\n SDK.shakaPlayerLoader((player: ShakaPlayerType): void => {\n this._shaka = player;\n\n if (this._pending) {\n this._pending = false;\n\n resolve(this.loaded(videoElement, streamId, offerSdp, handleStreamFailure));\n }\n });\n }\n });\n }\n\n static getStats(): ChunkedStreamingStatistics | null {\n if (this._player) {\n return this._player.getStats();\n }\n\n return null;\n }\n\n private static async play(Player: typeof WebPlayer | typeof ShakaPlayer | typeof HlsPlayer, videoElement: HTMLVideoElement, streamId: string, offerSdp: string, options: ChunkedStreamingOptions, handleStreamFailure: Function): Promise<IDisposable> {\n const dashManifestUrlMatch = offerSdp.match(/a=x-playlist:([^\\n]*[.]mpd\\??[^\\s]*)/m);\n const hlsManifestUrlMatch = offerSdp.match(/a=x-playlist:([^\\n]*[.]m3u8\\??[^\\s]*)/m);\n const manifestUrl = dashManifestUrlMatch && dashManifestUrlMatch[1] ? dashManifestUrlMatch[1] : '';\n const playlistUrl = hlsManifestUrlMatch && hlsManifestUrlMatch[1] ? hlsManifestUrlMatch[1] : '';\n\n if (playlistUrl) {\n if (!this._phenixWebPlayer || FeatureEnablement.shouldUseNativeHls) {\n this._player = new Player(videoElement, 'hls', streamId, playlistUrl, options, handleStreamFailure);\n\n this._player.start();\n\n return this._player;\n }\n }\n\n if (manifestUrl) {\n if (!this._hlsPlayer && !(this._phenixWebPlayer && FeatureEnablement.shouldUseNativeHls)) {\n this._player = new Player(videoElement, 'dash', streamId, manifestUrl, options, handleStreamFailure);\n\n this._player.start();\n\n return this._player;\n }\n }\n\n if (manifestUrl || playlistUrl) {\n throw new Error(`[${streamId}] Cannot play [${playlistUrl ? 'HLS' : 'DASH'}] stream with included player`);\n }\n\n throw new Error('No stream playlist found');\n }\n\n private static loaded(videoElement: HTMLVideoElement, streamId: string, offerSdp: string, handleStreamFailure: Function): Promise<IDisposable> {\n if (this._hlsPlayer) {\n return this.play(HlsPlayer, videoElement, streamId, offerSdp, {\n ...this._options,\n preferNative: FeatureEnablement.shouldUseNativeHls\n }, handleStreamFailure);\n }\n\n if (this._phenixWebPlayer) {\n return this.play(WebPlayer, videoElement, streamId, offerSdp, {\n ...this._options,\n preferNative: FeatureEnablement.shouldUseNativeHls\n }, handleStreamFailure);\n }\n\n return this.play(ShakaPlayer, videoElement, streamId, offerSdp, {\n ...this._options,\n preferNative: FeatureEnablement.shouldUseNativeHls\n }, handleStreamFailure);\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nenum ChunkedStreamPlaybackMode {\n Live = 1,\n OndDemand = 2\n}\n\nexport default ChunkedStreamPlaybackMode;","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport GlobalScope from '../../globalScope/GlobalScope';\nimport {ILogger} from '../../logger/LoggerInterface';\nimport LoggerFactory from '../../logger/LoggerFactory';\nimport FeatureEnablement from '../../environment/FeatureEnablement';\n\nconst detectionTimeoutInMilliseconds = 1000;\n\nexport default class VideoFrameDetector {\n private static _logger: ILogger = LoggerFactory.getLogger('VideoFrameDetector');\n\n public static isRenderingFrames(videoElement: HTMLVideoElement): Promise<boolean> {\n if (!FeatureEnablement.isRequestVideoFrameCallbackSupported) {\n this._logger.debug('requestVideoFrameCallback not supported, assuming rendering');\n\n return Promise.resolve(true);\n }\n\n if (!FeatureEnablement.isRequestAnimationFrameSupported) {\n this._logger.debug('requestAnimationFrame not supported, assuming rendering');\n\n return Promise.resolve(true);\n }\n\n // On desktop browsers, the requestVideoFrameCallback vs requestAnimationFrame race\n // produces false negatives after returning from a background tab. The video compositor\n // is inactive while the tab is hidden, so requestVideoFrameCallback does not fire\n // promptly after foregrounding — requestAnimationFrame wins the race even when the\n // stream is healthy. This causes the foreground health check to trigger unnecessary\n // Recovering transitions. On mobile, browsers are more aggressive about pausing or\n // destroying background media pipelines, making frame-level stall detection valuable\n // despite the race risk. Desktop streams rely on the RTC connection monitor's\n // bytes-received stats to detect genuine stalls instead.\n if (!FeatureEnablement.isMobile) {\n this._logger.debug('Skipping frame detection on desktop, assuming rendering');\n\n return Promise.resolve(true);\n }\n\n const startTime = Date.now();\n\n // Detect whether the video element is actively rendering decoded frames by requesting\n // both a video frame callback and an animation frame callback simultaneously.\n // When the stream is healthy, requestVideoFrameCallback fires first because a decoded\n // frame is available for presentation. When the stream is stalled, only\n // requestAnimationFrame fires promptly because it is driven by the display refresh\n // cycle regardless of video state.\n // A false negative (requestAnimationFrame winning despite active rendering) is possible\n // when both callbacks land on the same frame, but is bounded to a single unnecessary\n // restart.\n return new Promise<boolean>(resolve => {\n let resolved = false;\n const timeoutId = GlobalScope.value.setTimeout(() => {\n if (!resolved) {\n resolved = true;\n this._logger.info('Frame detection timed out after [%s] ms, assuming rendering', detectionTimeoutInMilliseconds);\n\n resolve(true);\n }\n }, detectionTimeoutInMilliseconds);\n\n videoElement.requestVideoFrameCallback(() => {\n if (!resolved) {\n resolved = true;\n GlobalScope.value.clearTimeout(timeoutId);\n this._logger.debug('Video frame rendered within [%s] ms — stream is healthy', Date.now() - startTime);\n\n resolve(true);\n }\n });\n\n // If requestAnimationFrame fires before requestVideoFrameCallback, no video frames\n // are being decoded — the stream is stalled.\n GlobalScope.value.requestAnimationFrame(() => {\n if (!resolved) {\n resolved = true;\n GlobalScope.value.clearTimeout(timeoutId);\n this._logger.debug('No video frame rendered within [%s] ms — stream is stalled', Date.now() - startTime);\n\n resolve(false);\n }\n });\n });\n }\n\n constructor() {\n throw new Error('VideoFrameDetector is a static class that may not be instantiated');\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport GlobalScope from '../../globalScope/GlobalScope';\nimport ChannelContext from '../context/ChannelContext';\nimport Discovery from '../discovery/Discovery';\nimport Disposable from '../../lang/Disposable';\nimport DisposableList from '../../lang/DisposableList';\nimport LoggerFactory from '../../logger/LoggerFactory';\nimport ChannelState from '../channels/ChannelState';\nimport {ChunkedStreaming} from './ChunkedStreaming';\nimport {ChunkedStreamingOptions, ChunkedStreamingStatistics} from './StreamTypes';\nimport IDisposable from '../../lang/IDisposable';\nimport {IStreamSubscriber} from './IStreamSubscriber';\nimport {ILogger} from '../../logger/LoggerInterface';\nimport {NetworkStates} from './NetworkStates';\nimport ChunkedStreamPlaybackMode from './ChunkedStreamPlaybackMode';\nimport VideoFrameDetector from './VideoFrameDetector';\n\nexport default class ChunkedStreamSubscriber implements IStreamSubscriber {\n private readonly _logger: ILogger = LoggerFactory.getLogger('ChunkedStreamSubscriber');\n private readonly _channelContext: ChannelContext;\n private readonly _chunkedStreamPlaybackMode: ChunkedStreamPlaybackMode;\n private readonly _disposables = new DisposableList();\n private readonly _monitorDisposables = new DisposableList();\n private readonly _handleStreamFailure: () => Promise<void>;\n private _streamStatistics: ChunkedStreamingStatistics | null = null;\n private _monitorFailureCount = 0;\n\n constructor(channelContext: ChannelContext, chunkedStreamPlaybackMode: ChunkedStreamPlaybackMode, handleStreamFailure: () => Promise<void>) {\n this._channelContext = channelContext;\n this._chunkedStreamPlaybackMode = chunkedStreamPlaybackMode;\n this._handleStreamFailure = handleStreamFailure;\n this._channelContext.disposables.add(this);\n }\n\n start(uri: URL, token: string): Promise<void | IDisposable> {\n return Discovery.discoverClosestEndPointWithCaching(uri)\n .then(endPoint => {\n this._channelContext.online.value = true;\n this._channelContext.endPoint.value = endPoint;\n this._logger.info('Connecting to [%s]', endPoint.toString());\n\n return endPoint.subscribe(token, null, this._channelContext.failureCount.value);\n })\n .then(response => {\n const {status} = response;\n const endPoint = this._channelContext.endPoint.value;\n\n if (!endPoint) {\n this._logger.error('Subscribe failed: end point service is missing');\n this._channelContext.loading.value = false;\n this._channelContext.playing.value = false;\n this._channelContext.state.value = ChannelState.Error;\n\n return;\n }\n\n this._channelContext.exists.value = this._channelContext.mapSubscribeStatusToExists(status);\n this._channelContext.state.value = this._channelContext.mapSubscribeStatusToChannelStatus(status);\n\n this._channelContext.applyStatus(status);\n\n if (status !== 'ok') {\n this._channelContext.stream.value = null;\n this._channelContext.lag.value = undefined ;\n\n this._channelContext.applySessionAndStreamPropertiesToVideoElement();\n\n this._logger.debug(\n '[%s] Subscribe failed with status [%s]',\n this._channelContext.streamId,\n status,\n );\n\n return;\n }\n\n const {stream, createOfferDescriptionResponse, lag} = response;\n\n this._channelContext.stream.value = stream;\n this._channelContext.lag.value = lag;\n\n this._channelContext.applySessionAndStreamPropertiesToVideoElement();\n\n this._logger.debug(\n '[%s] Subscribe completed [%s] [%j]',\n this._channelContext.streamId,\n status,\n createOfferDescriptionResponse,\n );\n\n const offerSdp = createOfferDescriptionResponse?.sessionDescription?.sdp;\n const options: ChunkedStreamingOptions = {\n originStartTime: Date.now() - lag + (endPoint.roundTripTime) / 2,\n lag: lag\n };\n\n if (!this._channelContext.videoElement.value) {\n this._logger.error('Subscribe failed: video element is missing');\n this._channelContext.loading.value = false;\n this._channelContext.playing.value = false;\n this._channelContext.state.value = ChannelState.Stopped;\n\n return;\n }\n\n if (!offerSdp) {\n this._logger.error('Subscribe failed: offer SDP is missing');\n this._channelContext.loading.value = false;\n this._channelContext.playing.value = false;\n this._channelContext.state.value = ChannelState.Error;\n\n return;\n }\n\n return ChunkedStreaming.start(this._channelContext.videoElement.value, this._channelContext.streamId, offerSdp, options, () => this.retryOnStreamFailure())\n .then(player => {\n this.monitor(player);\n\n this._disposables.add(player);\n\n return player;\n })\n .catch(e => {\n this._logger.error('ChunkedStreaming failed', e);\n this._channelContext.loading.value = false;\n this._channelContext.playing.value = false;\n this._channelContext.state.value = ChannelState.Stopped;\n });\n });\n }\n\n private retryOnStreamFailure(): void {\n this._monitorFailureCount = 0;\n this._channelContext.state.value = ChannelState.ConnectionError;\n\n this._channelContext.playing.value = false;\n this._channelContext.loading.value = true;\n this._disposables.dispose();\n this._monitorDisposables.dispose();\n\n const ignored = this._handleStreamFailure()\n .catch(e => {\n this._logger.error('Failed handling stream failure', e);\n });\n }\n\n private monitor(player: IDisposable): void {\n this._monitorDisposables.dispose();\n\n const timeout = GlobalScope.value.setTimeout(() => {\n const newStreamStatistics = ChunkedStreaming.getStats();\n\n if (this._chunkedStreamPlaybackMode === ChunkedStreamPlaybackMode.Live\n && newStreamStatistics?.networkState === NetworkStates.NetworkNoSource\n && this._channelContext.videoElement.value?.currentTime === this._channelContext.videoElement.value?.duration\n ) {\n this.retryOnStreamFailure();\n\n return;\n }\n\n if (this._streamStatistics &&\n !this._channelContext.videoElement.value?.paused &&\n (newStreamStatistics?.currentTime && this._streamStatistics.currentTime >= newStreamStatistics.currentTime) &&\n (!newStreamStatistics?.dataBuffered || this._streamStatistics.dataBuffered >= newStreamStatistics.dataBuffered)\n ) {\n this._monitorFailureCount++;\n\n if (this._monitorFailureCount > 4) {\n this.retryOnStreamFailure();\n\n return;\n }\n } else {\n this._monitorFailureCount = 0;\n }\n\n if (this._channelContext.videoElement.value?.paused && this._channelContext.state.value === ChannelState.Playing) {\n this._channelContext.state.value = ChannelState.Paused;\n }\n\n if (!this._channelContext.videoElement.value?.paused && this._channelContext.state.value !== ChannelState.Playing) {\n this._channelContext.state.value = ChannelState.Playing;\n }\n\n this._streamStatistics = newStreamStatistics;\n\n this.monitor(player);\n }, 1000);\n\n this._monitorDisposables.add(new Disposable(() => {\n GlobalScope.value.clearTimeout(timeout);\n }));\n }\n\n isStreamHealthy(): Promise<boolean> {\n const videoElement = this._channelContext.videoElement.value;\n\n if (!videoElement) {\n return Promise.resolve(false);\n }\n\n if (videoElement.paused) {\n return Promise.resolve(false);\n }\n\n return VideoFrameDetector.isRenderingFrames(videoElement);\n }\n\n dispose(): void {\n this._disposables.dispose();\n this._monitorDisposables.dispose();\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nexport default class SdpParser {\n private readonly _sdp: string;\n private readonly _audioCodec: string;\n private readonly _videoCodec: string;\n private readonly _isAudioTrackEnabled: boolean;\n private readonly _isVideoTrackEnabled: boolean;\n\n constructor(sdp: string) {\n this._sdp = sdp;\n\n const sdpSplitByLines = this._sdp.split(/(\\r\\n|\\r|\\n)/);\n const sdpSplitByTracks = this._sdp.split(/(?:^|[\\r\\n])m=/);\n\n this._audioCodec = this.applyCodec('audio', sdpSplitByLines);\n this._videoCodec = this.applyCodec('video', sdpSplitByLines);\n this._isAudioTrackEnabled = this.isTrackByTypeEnabled('audio', sdpSplitByTracks);\n this._isVideoTrackEnabled = this.isTrackByTypeEnabled('video', sdpSplitByTracks);\n }\n\n get audioCodec(): string {\n return this._audioCodec;\n }\n\n get videoCodec(): string {\n return this._videoCodec;\n }\n\n get isAudioTrackEnabled(): boolean {\n return this._isAudioTrackEnabled;\n }\n\n get isVideoTrackEnabled(): boolean {\n return this._isVideoTrackEnabled;\n }\n\n private isTrackByTypeEnabled(type: string, sdpSplitByTracks: string[]): boolean {\n const sdpSectionForType = sdpSplitByTracks.find(sdpTrack => sdpTrack.startsWith(type));\n\n if (!sdpSectionForType) {\n return false;\n }\n\n return !sdpSectionForType.includes(`a=inactive`);\n }\n\n private applyCodec(type: string, sdpSplitByLines: string []): string {\n const rtmap = sdpSplitByLines.find(sdpLine => sdpLine.includes(`m=${type}`))?.split(' ')[3] || '';\n const usedCodecLine = sdpSplitByLines.find(sdpLine => sdpLine.includes(`a=rtpmap:${rtmap}`));\n const usedCodec = usedCodecLine?.split(' ')[1] || '';\n const codecName = usedCodec.split('/')[0];\n\n return codecName;\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nexport default class RtcConfigurationManager {\n static truncateIceServers(configuration: RTCConfiguration): RTCConfiguration {\n const iceServers: RTCIceServer[] = [];\n\n if (!configuration.iceServers) {\n return configuration;\n }\n\n for (let i = 0; i < configuration.iceServers.length; i++) {\n const urls: string[] = [];\n\n for (let index = 0; index < 2; index++) {\n const url = configuration.iceServers[i].urls[index];\n\n if (url) {\n urls.push(configuration.iceServers[i].urls[index]);\n }\n }\n\n iceServers.push({\n urls: urls,\n username: configuration.iceServers[i].username,\n credential: configuration.iceServers[i].credential\n });\n }\n\n configuration.iceServers = iceServers;\n\n return configuration;\n }\n\n private constructor() {\n throw new Error('RtcConfigurationManager is a static class that may not be instantiated');\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport GlobalScope from '../globalScope/GlobalScope';\nimport FeatureEnablement from '../environment/FeatureEnablement';\nimport DisposableList from '../lang/DisposableList';\nimport IDisposable from '../lang/IDisposable';\nimport Subject from '../rx/Subject';\nimport {ILogger} from '../logger/LoggerInterface';\nimport LoggerFactory from '../logger/LoggerFactory';\nimport IPeerConnection from './IPeerConnection';\nimport SdpParser from './SdpParser';\nimport ReadOnlySubject from '../rx/ReadOnlySubject';\n\nexport interface IRtcMonitorStatistic {\n [kind: string]: IRtcStatistic;\n}\n\nexport interface ILegacyRTCStatsReport {\n result: () => ILegacyRTCStatsReportItem[];\n}\n\nexport interface ILegacyRTCStatsReportItem extends RTCStatsReport {\n type: string;\n names: () => string[];\n stat: (name: string) => number;\n}\n\nexport interface IRtcStatistic {\n ssrc?: string;\n mediaType?: string;\n timestamp: number;\n bitrate?: number;\n bytesReceived?: number;\n framesDecoded?: number;\n packetsLost?: number;\n packetsReceived?: number;\n codec?: string;\n fps?: number;\n roundTripTime?: number;\n lastPacketReceivedTimestamp?: number;\n}\n\nconst updateStatisticTimeout = 1000;\nconst getStatsTimeoutDuration = 5000;\n\nexport default class RtcConnectionMonitor implements IDisposable {\n private readonly _logger: ILogger = LoggerFactory.getLogger('RtcConnectionMonitor');\n private readonly _estimatedRoundTripTime: number;\n private readonly _estimatedVideoCodec: string = 'unknown';\n private readonly _estimatedAudioCodec: string = 'unknown';\n private readonly _rtcStatistic: Subject<IRtcMonitorStatistic | null> = new Subject<IRtcMonitorStatistic | null>({});\n private readonly _disposables: DisposableList = new DisposableList();\n private _peerConnection: IPeerConnection | null;\n private _isMonitorRunning = true;\n private _updateTimeout: number | null = null;\n private _tracksToMonitor: string[];\n private _monitorGeneration = 0;\n\n constructor(peerConnection: IPeerConnection, mediaStream: MediaStream, estimatedRoundTripTime: number, isForeground: ReadOnlySubject<boolean>) {\n this._peerConnection = peerConnection;\n this._estimatedRoundTripTime = estimatedRoundTripTime;\n this._tracksToMonitor = mediaStream.getTracks().map(track => track.kind) || [];\n\n if (this._peerConnection) {\n if (!FeatureEnablement.getCurrentOfferDisabled && this._peerConnection?.currentRemoteDescription?.sdp) {\n const parsedSDP = new SdpParser(this._peerConnection.currentRemoteDescription.sdp);\n\n this._estimatedAudioCodec = parsedSDP.audioCodec;\n this._estimatedVideoCodec = parsedSDP.videoCodec;\n }\n\n let isInitialSubscriptionCallback = true;\n\n this._disposables.add(\n isForeground.subscribe(foreground => {\n if (isInitialSubscriptionCallback) {\n isInitialSubscriptionCallback = false;\n\n return;\n }\n\n if (!foreground || !this._isMonitorRunning) {\n return;\n }\n\n // Invalidate any in-flight poll from before the freeze\n this._monitorGeneration++;\n\n if (this._updateTimeout) {\n GlobalScope.value.clearTimeout(this._updateTimeout);\n this._updateTimeout = null;\n }\n\n this._logger.debug('Restarting stats polling after foreground transition');\n this.updateStatistic();\n })\n );\n\n this.updateStatistic();\n }\n }\n\n get rtcStatistic(): Subject<IRtcMonitorStatistic | null> {\n return this._rtcStatistic;\n }\n\n public dispose(): void {\n this._monitorGeneration++;\n this._isMonitorRunning = false;\n this._peerConnection = null;\n this._disposables.dispose();\n\n if (this._updateTimeout) {\n GlobalScope.value.clearTimeout(this._updateTimeout);\n this._updateTimeout = null;\n }\n }\n\n private async updateStatistic(): Promise<void> {\n if (FeatureEnablement.getStatsPromiseBasedDisabled) {\n return this.updateStatisticLegacy();\n }\n\n // Safari 11 doesnt have kind or mediaType so we need to take it from the inbound-rtp object id\n const getKindForSafari11 = (item: {id: string}): string => item.id.includes('Audio') ? 'audio' : item.id.includes('Video') ? 'video' : '';\n const generation = this._monitorGeneration;\n let timeoutHandle: number | undefined;\n\n try {\n const statsPromise = this._peerConnection?.getStats(null);\n\n if (!statsPromise) {\n return;\n }\n\n const timeoutPromise = new Promise<null>(resolve => {\n timeoutHandle = GlobalScope.value.setTimeout(() => resolve(null), getStatsTimeoutDuration);\n });\n const stats = await Promise.race([statsPromise, timeoutPromise]);\n\n if (generation !== this._monitorGeneration || !this._isMonitorRunning) {\n return;\n }\n\n if (!stats) {\n this._logger.debug('getStats() timed out, skipping stats processing');\n } else {\n const rtcStatistics: IRtcMonitorStatistic = {};\n let roundTripTime = this._estimatedRoundTripTime;\n let lastPacketReceivedTimestamp: number | undefined;\n\n stats.forEach(report => {\n if (report.type === 'candidate-pair' && report.currentRoundTripTime) {\n roundTripTime = report.currentRoundTripTime * 1000;\n\n if (rtcStatistics['audio']) {\n rtcStatistics['audio'].roundTripTime = roundTripTime;\n }\n\n if (rtcStatistics['video']) {\n rtcStatistics['video'].roundTripTime = roundTripTime;\n }\n }\n\n if (report.type === 'candidate-pair' && report.lastPacketReceivedTimestamp) {\n lastPacketReceivedTimestamp = report.lastPacketReceivedTimestamp;\n\n if (rtcStatistics['audio']) {\n rtcStatistics['audio'].lastPacketReceivedTimestamp = lastPacketReceivedTimestamp;\n }\n\n if (rtcStatistics['video']) {\n rtcStatistics['video'].lastPacketReceivedTimestamp = lastPacketReceivedTimestamp;\n }\n }\n\n if (report.type === 'inbound-rtp') {\n const kind = report.kind || report.mediaType || getKindForSafari11(report);\n let codec = '';\n\n stats.forEach(item => {\n if (item.id === report.codecId) {\n codec = item.mimeType;\n }\n });\n\n if (kind && this._tracksToMonitor.includes(kind)) {\n const bytes = report.bytesReceived || 0;\n const previousBytesReceived = this._rtcStatistic.value?.[kind]?.bytesReceived ?? 0;\n const bytesDelta = bytes - previousBytesReceived;\n const timeDelta = report.timestamp - (this._rtcStatistic.value?.[kind]?.timestamp || 0);\n const bitrate = bytesDelta && timeDelta ? Math.floor(8 * bytesDelta /\n timeDelta * 1000) : 0;\n\n rtcStatistics[kind] = {\n ssrc: report.ssrc,\n mediaType: kind,\n timestamp: report.timestamp,\n bitrate,\n bytesReceived: report.bytesReceived,\n packetsLost: report.packetsLost,\n packetsReceived: report.packetsReceived,\n codec: codec || this.getCodecByType(kind),\n roundTripTime\n };\n\n if (report.lastPacketReceivedTimestamp || lastPacketReceivedTimestamp) {\n rtcStatistics[kind].lastPacketReceivedTimestamp = report.lastPacketReceivedTimestamp || lastPacketReceivedTimestamp;\n }\n\n if (kind === 'video' && this._rtcStatistic.value?.video?.framesDecoded) {\n rtcStatistics[kind]['framesDecoded'] = report.framesDecoded;\n\n const fps = (report.framesDecoded - this._rtcStatistic.value.video.framesDecoded) /\n (rtcStatistics[kind].timestamp - this._rtcStatistic.value.video.timestamp) *\n 1000;\n\n rtcStatistics[kind]['fps'] = fps ? Math.round(fps * 100) / 100 : 0;\n }\n }\n }\n });\n\n this._rtcStatistic.value = rtcStatistics;\n }\n } catch (error) {\n if (generation !== this._monitorGeneration || !this._isMonitorRunning) {\n return;\n }\n\n this._logger.warn('getStats() rejected', error);\n } finally {\n GlobalScope.value.clearTimeout(timeoutHandle);\n }\n\n if (this._isMonitorRunning && generation === this._monitorGeneration) {\n this._updateTimeout = GlobalScope.value.setTimeout(\n () => this.updateStatistic(), updateStatisticTimeout);\n }\n }\n\n private async updateStatisticLegacy(): Promise<void> {\n const generation = this._monitorGeneration;\n let timeoutHandle: number | undefined;\n\n try {\n const statsPromise = this._peerConnection?.getStatsLegacy();\n\n if (!statsPromise) {\n return;\n }\n\n const timeoutPromise = new Promise<null>(resolve => {\n timeoutHandle = GlobalScope.value.setTimeout(() => resolve(null), getStatsTimeoutDuration);\n });\n const stats = await Promise.race([statsPromise, timeoutPromise]);\n\n if (generation !== this._monitorGeneration || !this._isMonitorRunning) {\n return;\n }\n\n if (!stats) {\n this._logger.debug('getStatsLegacy() timed out, skipping stats processing');\n } else {\n const rtcStatistics: IRtcMonitorStatistic = {};\n let roundTripTime = this._estimatedRoundTripTime;\n\n stats.result().forEach(report => {\n report.names().forEach(name => {\n if (name === 'googRTT') {\n roundTripTime = report.stat(name);\n }\n });\n\n if (report.type === 'ssrc') {\n const mediaType = report.stat('mediaType').toString();\n\n rtcStatistics[mediaType] = {timestamp: Date.now()};\n rtcStatistics[mediaType]['ssrc'] = report.stat('ssrc').toString();\n rtcStatistics[mediaType]['mediaType'] = mediaType;\n rtcStatistics[mediaType]['bytesReceived'] = report.stat('bytesReceived');\n rtcStatistics[mediaType]['packetsLost'] = report.stat('packetsLost');\n rtcStatistics[mediaType]['packetsReceived'] = report.stat('packetsReceived');\n rtcStatistics[mediaType]['codec'] = report.stat('googCodecName').toString() || this.getCodecByType(mediaType);\n rtcStatistics[mediaType]['roundTripTime'] = roundTripTime;\n\n if (mediaType === 'video' && this._rtcStatistic.value?.video?.framesDecoded) {\n rtcStatistics[mediaType]['framesDecoded'] = report.stat('framesDecoded');\n rtcStatistics[mediaType]['fps'] = (rtcStatistics[mediaType].framesDecoded - this._rtcStatistic.value.video.framesDecoded) /\n (rtcStatistics[mediaType].timestamp - this._rtcStatistic.value.video.timestamp) *\n 1000 || 0;\n }\n }\n });\n\n this._rtcStatistic.value = rtcStatistics;\n }\n } catch (error) {\n if (generation !== this._monitorGeneration || !this._isMonitorRunning) {\n return;\n }\n\n this._logger.warn('getStatsLegacy() rejected', error);\n } finally {\n GlobalScope.value.clearTimeout(timeoutHandle);\n }\n\n if (this._isMonitorRunning && generation === this._monitorGeneration) {\n this._updateTimeout = GlobalScope.value.setTimeout(\n () => this.updateStatistic(), updateStatisticTimeout);\n }\n }\n\n private getCodecByType(type: string): string {\n switch (type) {\n case 'audio':\n return this._estimatedAudioCodec || 'unknown';\n case 'video':\n return this._estimatedVideoCodec || 'unknown';\n default:\n return 'unknown';\n }\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nexport enum VideoCodec {\n H264 = 0,\n VP8 = 1,\n VP9 = 2\n}\n\nexport type VideoCodecType = 'H264' | 'VP8' | 'VP9';","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport Chunk from '../Chunk';\nimport {RtpTimestamp} from '../../frameTiming/FrameTimingInformation';\nimport {DecodedFrameTimingInformationPayload} from './transforms/frameTimingInformation';\n\nexport enum TransformMessageType {\n Error = -1,\n AddTransform = 0,\n ConfigurePipeline = 1,\n Metadata = 2,\n Chunk = 3,\n PipelineConfigured = 4\n}\n\nexport enum TransformMessageDataType {\n FrameTimingInformation = 0,\n EncodedVideoChunk = 1,\n EncodedAudioChunk = 2,\n SurrogateVideoChunk = 3,\n SurrogateAudioChunk = 4\n}\n\nexport type TransformMessagePayload<T> = {\n type: TransformMessageDataType;\n data: T;\n};\n\ntype WebRTCInsertableStreams = {\n source: ReadableStream;\n sink: WritableStream;\n};\n\nexport type TransformStreamMetadata = DecodedFrameTimingInformationPayload;\nexport type MetadataMessagePayload = {[timestamp: RtpTimestamp]: {decodedFrameTimingInformation: TransformStreamMetadata}};\n\ntype TransformName = string;\nexport type TransformMessage =\n | {\n type: TransformMessageType.AddTransform;\n data: TransformName;\n }\n | {\n type: TransformMessageType.ConfigurePipeline;\n data: WebRTCInsertableStreams;\n }\n | {\n type: TransformMessageType.Metadata;\n data: TransformMessagePayload<MetadataMessagePayload>;\n }\n | {\n type: TransformMessageType.Chunk;\n data: TransformMessagePayload<Chunk>;\n };","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport {ILogger} from '../../logger/LoggerInterface';\nimport LoggerFactory from '../../logger/LoggerFactory';\nimport Disposable from '../../lang/Disposable';\nimport DisposableList from '../../lang/DisposableList';\nimport IDisposable from '../../lang/IDisposable';\nimport Subject from '../../rx/Subject';\nimport {DecodedFrameTimingInformation, RenderedFrameTimingInformation, RtpTimestamp} from './FrameTimingInformation';\nimport {VideoCodec} from '../decode/bitstream/codec/VideoCodec';\nimport {MetadataMessagePayload, TransformMessageDataType, TransformMessagePayload} from '../transformation/worker/TransformStreamPipelineWorkerMessage';\nimport TransformMessageRouter from '../transformation/worker/MessageRouter';\n\nexport type FrameTimingInformationManagerContext = {\n codec: VideoCodec;\n streamId: string;\n videoElement: Subject<HTMLVideoElement | null>;\n decodedFrameTimingInformationSubject: Subject<DecodedFrameTimingInformation | null>;\n renderedFrameTimingInformationSubject: Subject<RenderedFrameTimingInformation | null>;\n isEnabledSubject: Subject<boolean>;\n receiver: RTCRtpReceiver;\n mid: string;\n trackId: string;\n transformFunctionNames: string[];\n transformMessageRouter: TransformMessageRouter;\n};\n\nexport default class FrameTimingInformationManager implements IDisposable {\n private static readonly _transformName = 'frame-timing-information';\n private readonly _logger: ILogger = LoggerFactory.getLogger('FrameTimingInformationManager');\n private readonly _decodedFrameTimingInformationByRtpTimestamp: Map<RtpTimestamp, DecodedFrameTimingInformation> = new Map();\n private readonly _videoElementDisposables: DisposableList = new DisposableList();\n private readonly _disposables: DisposableList = new DisposableList();\n private _currentPlaybackState: 'playing' | 'paused' | 'stalled' | 'ended' | 'error' | 'waiting' = 'waiting';\n private _armedVideoFrameCallbackId: number | null = null;\n private _disposed: boolean = false;\n\n constructor(context: FrameTimingInformationManagerContext) {\n this.initialize(context);\n }\n\n public dispose(): void {\n this._disposed = true;\n this._disposables.dispose();\n }\n\n private initialize(context: FrameTimingInformationManagerContext): void {\n if (!this.canProcessFrameTimingInformation(context.streamId, context.codec, context.receiver, context.mid)) {\n return;\n }\n\n this.setupVideoElementHandling(context.videoElement, context.renderedFrameTimingInformationSubject);\n this.setupFrameTimingInformationTransform(context.codec, context.mid, context.trackId, context.transformMessageRouter, context.transformFunctionNames, context.decodedFrameTimingInformationSubject);\n context.isEnabledSubject.value = true;\n }\n\n private canProcessFrameTimingInformation(streamId: string, codec: VideoCodec, receiver: RTCRtpReceiver, mid: string): boolean {\n if (codec !== VideoCodec.H264) {\n this._logger.warn('[%s] Skipping frame timing information for video track because video codec is not H264', streamId);\n\n return false;\n }\n\n if (!receiver) {\n this._logger.warn('[%s] Skipping frame timing information for video track because no receiver was found', streamId);\n\n return false;\n }\n\n if (!mid) {\n this._logger.warn('[%s] Skipping frame timing information for video track because no mid was found', streamId);\n\n return false;\n }\n\n return true;\n }\n\n private setupFrameTimingInformationTransform(codec: VideoCodec, mid: string, trackId: string, transformMessageRouter: TransformMessageRouter, transformFunctionNames: string[], decodedFrameTimingInformationSubject: Subject<DecodedFrameTimingInformation | null>): void {\n transformMessageRouter.registerRoute<TransformMessagePayload<MetadataMessagePayload>>(TransformMessageDataType.FrameTimingInformation, this.handleFrameTimingMessage.bind(this, VideoCodec[codec], mid!, trackId!, decodedFrameTimingInformationSubject));\n transformFunctionNames.push(FrameTimingInformationManager._transformName);\n }\n\n private handleFrameTimingMessage(codec: string, mid: string, trackId: string, decodedFrameTimingInformationSubject: Subject<DecodedFrameTimingInformation | null>, message: MetadataMessagePayload): void {\n if (!message) {\n return;\n }\n\n for (const [rtpTimestamp, metadata] of Object.entries(message)) {\n const rtpTimestampNumber = parseInt(rtpTimestamp, 10);\n const decodedFrameTimingInformation = metadata['decodedFrameTimingInformation'];\n\n if (decodedFrameTimingInformation) {\n const frameTimingInformation: DecodedFrameTimingInformation = {\n timecode: decodedFrameTimingInformation.timecode ?? null,\n receiveTimestamp: decodedFrameTimingInformation.receiveTimestamp ?? null,\n kind: 'video',\n codec,\n mid,\n trackId,\n sourceTimestamp: null,\n ingestTimestamp: null,\n encodeTimestamp: null,\n transcodeTimestamp: null,\n playbackState: this._currentPlaybackState\n };\n\n decodedFrameTimingInformationSubject.value = frameTimingInformation;\n\n if (this._currentPlaybackState === 'playing') {\n this._decodedFrameTimingInformationByRtpTimestamp.set(rtpTimestampNumber, frameTimingInformation);\n }\n }\n }\n }\n\n private setupVideoElementHandling(videoElementSubject: Subject<HTMLVideoElement | null>, renderedFrameTimingInformationSubject: Subject<RenderedFrameTimingInformation | null>): void {\n this._disposables.add(new Disposable(() => this._decodedFrameTimingInformationByRtpTimestamp.clear()));\n this._disposables.add(this._videoElementDisposables);\n this._disposables.add(videoElementSubject.subscribe(videoElement => {\n this._videoElementDisposables.dispose();\n\n if (!videoElement) {\n return;\n }\n\n this.setupVideoEventListeners(videoElement, renderedFrameTimingInformationSubject);\n }));\n }\n\n private handleVideoFrameCallback(videoElement: HTMLVideoElement, renderedFrameTimingInformationSubject: Subject<RenderedFrameTimingInformation | null>, now: DOMHighResTimeStamp, metadata: VideoFrameCallbackMetadata): void {\n if (this._disposed) {\n return;\n }\n\n // Re-register the callback to ensure it's called again\n this._armVideoFrameCallback(videoElement, renderedFrameTimingInformationSubject);\n\n const rtpTimestamp = metadata.rtpTimestamp;\n\n if (!rtpTimestamp) {\n // TODO (NH): Add a throttled log indicating that no RTP timestamp was found\n // The specification says that it's nullable, but we always have it in a WebRTC context\n return;\n }\n\n const timestampsToDelete: RtpTimestamp[] = [];\n\n for (const [timestamp, frameTiming] of this._decodedFrameTimingInformationByRtpTimestamp) {\n if (timestamp > rtpTimestamp) {\n break;\n }\n\n renderedFrameTimingInformationSubject.value = {\n ...frameTiming,\n renderTimestamp: new Date(performance.timeOrigin + now),\n playbackState: 'playing'\n };\n\n timestampsToDelete.push(timestamp);\n }\n\n for (const timestamp of timestampsToDelete) {\n this._decodedFrameTimingInformationByRtpTimestamp.delete(timestamp);\n }\n }\n\n private setupVideoEventListeners(videoElement: HTMLVideoElement, renderedFrameTimingInformationSubject: Subject<RenderedFrameTimingInformation | null>): void {\n const onPlaying = () => this._currentPlaybackState = 'playing';\n\n videoElement.addEventListener('playing', onPlaying);\n this._videoElementDisposables.add(new Disposable(() => videoElement.removeEventListener('playing', onPlaying)));\n\n const onPause = () => this._currentPlaybackState = 'paused';\n\n videoElement.addEventListener('pause', onPause);\n this._videoElementDisposables.add(new Disposable(() => videoElement.removeEventListener('pause', onPause)));\n\n const onStalled = () => this._currentPlaybackState = 'stalled';\n\n videoElement.addEventListener('stalled', onStalled);\n this._videoElementDisposables.add(new Disposable(() => videoElement.removeEventListener('stalled', onStalled)));\n\n const onWaiting = () => this._currentPlaybackState = 'waiting';\n\n videoElement.addEventListener('waiting', onWaiting);\n this._videoElementDisposables.add(new Disposable(() => videoElement.removeEventListener('waiting', onWaiting)));\n\n const onEnded = () => this._currentPlaybackState = 'ended';\n\n videoElement.addEventListener('ended', onEnded);\n this._videoElementDisposables.add(new Disposable(() => videoElement.removeEventListener('ended', onEnded)));\n\n const onError = () => this._currentPlaybackState = 'error';\n\n videoElement.addEventListener('error', onError);\n this._videoElementDisposables.add(new Disposable(() => videoElement.removeEventListener('error', onError)));\n\n this._armVideoFrameCallback(videoElement, renderedFrameTimingInformationSubject);\n this._videoElementDisposables.add(new Disposable(() => {\n if (this._armedVideoFrameCallbackId) {\n videoElement.cancelVideoFrameCallback(this._armedVideoFrameCallbackId);\n }\n })\n );\n }\n\n private _armVideoFrameCallback(videoElement: HTMLVideoElement, renderedFrameTimingInformationSubject: Subject<RenderedFrameTimingInformation | null>): void {\n if (!videoElement.requestVideoFrameCallback) {\n return;\n }\n\n this._armedVideoFrameCallbackId = videoElement.requestVideoFrameCallback(this.handleVideoFrameCallback.bind(this, videoElement, renderedFrameTimingInformationSubject));\n }\n}","\nimport worker from \"!!../../../../node_modules/worker-loader/dist/runtime/inline.js\";\n\nexport default function Worker_fn() {\n return worker(\"/*! For license information please see TransformStreamPipeline.worker.worker.js.LICENSE.txt */\\n(()=>{var e={981:(e,t,r)=>{\\\"use strict\\\";r.d(t,{A:()=>p});var n=r(738),o=r.n(n),a=r(383),i=r.n(a),u=r(579),s=r.n(u),c=r(693),f=r.n(c),l=s()(function e(t,r,n){i()(this,e),f()(this,\\\"onFulfilled\\\",void 0),f()(this,\\\"onRejected\\\",void 0),f()(this,\\\"promise\\\",void 0),this.onFulfilled=\\\"function\\\"==typeof t?t:null,this.onRejected=\\\"function\\\"==typeof r?r:null,this.promise=n}),d=function(){function e(t){if(i()(this,e),f()(this,\\\"_state\\\",void 0),f()(this,\\\"_handled\\\",void 0),f()(this,\\\"_value\\\",void 0),f()(this,\\\"_deferreds\\\",void 0),!(this instanceof e))throw new TypeError(\\\"Promises must be constructed via new\\\");if(\\\"function\\\"!=typeof t)throw new TypeError(\\\"not a function\\\");this._state=0,this._handled=!1,this._value=null,this._deferreds=[],this.doResolve(t)}return s()(e,[{key:\\\"doResolve\\\",value:function(e){var t=this,r=!1;try{e(function(e){r||(r=!0,t.promiseResolve(e))},function(e){r||(r=!0,t.promiseReject(e))})}catch(e){if(r)return;r=!0,this.promiseReject(e)}}},{key:\\\"promiseResolve\\\",value:function(t){var r=this;try{if(t===r)throw new TypeError(\\\"A Promise cannot be resolved with it self.\\\");if(t&&(\\\"object\\\"===o()(t)||\\\"function\\\"==typeof t)){var n=t.then;if(t instanceof e)return r._state=3,r._value=t,void r.finale();if(\\\"function\\\"==typeof n)return void r.doResolve(function(){n.apply(t,arguments)})}r._state=1,r._value=t,r.finale()}catch(e){r.promiseReject(e)}}},{key:\\\"promiseReject\\\",value:function(e){this._state=2,this._value=e,this.finale()}},{key:\\\"finale\\\",value:function(){var t=this;2===this._state&&0===this._deferreds.length&&e._immediate(function(){t._handled||e._unhandledRejection(t._value)});for(var r=0,n=this._deferreds.length;r<n;r++)this.handle(this._deferreds[r]);this._deferreds=[]}},{key:\\\"handle\\\",value:function(t){for(var r=this;3===r._state;)r=r._value;0!==r._state?(r._handled=!0,e._immediate(function(){var e=1===r._state?t.onFulfilled:t.onRejected;if(null!==e){var n;try{n=e(r._value)}catch(e){return void t.promise.promiseReject(e)}t.promise.promiseResolve(n)}else 1===r._state?t.promise.promiseResolve(r._value):t.promise.promiseReject(r._value)})):r._deferreds.push(t)}}],[{key:\\\"all\\\",value:function(t){return new e(function(e,r){if(!Array.isArray(t))return r(new TypeError(\\\"Promise.all accepts an array\\\"));var n=Array.prototype.slice.call(t);if(0===n.length)return e([]);for(var a=n.length,i=function(t,u){try{if(u&&(\\\"object\\\"===o()(u)||\\\"function\\\"==typeof u)){var s=u.then;if(\\\"function\\\"==typeof s)return void s.call(u,function(e){return i(t,e)},r)}n[t]=u,0===--a&&e(n)}catch(e){r(e)}},u=0;u<n.length;u++)i(u,n[u])})}},{key:\\\"resolve\\\",value:function(t){return t&&\\\"object\\\"===o()(t)&&t.constructor===e?t:new e(function(e){return e(t)})}},{key:\\\"reject\\\",value:function(t){return new e(function(e,r){return r(t)})}},{key:\\\"race\\\",value:function(t){return new e(function(r,n){if(!Array.isArray(t))return n(new TypeError(\\\"Promise.race accepts an array\\\"));for(var o=0,a=t.length;o<a;o++)e.resolve(t[o]).then(r,n)})}},{key:\\\"_immediate\\\",value:function(e){window.setTimeout(e,0)}},{key:\\\"_unhandledRejection\\\",value:function(e){\\\"undefined\\\"!=typeof console&&console&&console.warn(\\\"Possible Unhandled Promise Rejection:\\\",e)}}])}();d.prototype.catch=function(e){return this.then(null,e)},d.prototype.then=function(e,t){var r=new d(function(){return null});return this.handle(new l(e,t,r)),r},d.prototype.finally=function(e){return this.then(function(t){return d.resolve(e()).then(function(){return t},function(){return null})},function(t){return d.resolve(e()).then(function(){return d.reject(t)},function(){return null})})};var p=d},293:(e,t,r)=>{var n=r(981).A;function o(e,t,r,o,a,i,u){try{var s=e[i](u),c=s.value}catch(e){return void r(e)}s.done?t(c):n.resolve(c).then(o,a)}e.exports=function(e){return function(){var t=this,r=arguments;return new n(function(n,a){var i=e.apply(t,r);function u(e){o(i,n,a,u,s,\\\"next\\\",e)}function s(e){o(i,n,a,u,s,\\\"throw\\\",e)}u(void 0)})}},e.exports.__esModule=!0,e.exports.default=e.exports},383:e=>{e.exports=function(e,t){if(!(e instanceof t))throw new TypeError(\\\"Cannot call a class as a function\\\")},e.exports.__esModule=!0,e.exports.default=e.exports},579:(e,t,r)=>{var n=r(736);function o(e,t){for(var r=0;r<t.length;r++){var o=t[r];o.enumerable=o.enumerable||!1,o.configurable=!0,\\\"value\\\"in o&&(o.writable=!0),Object.defineProperty(e,n(o.key),o)}}e.exports=function(e,t,r){return t&&o(e.prototype,t),r&&o(e,r),Object.defineProperty(e,\\\"prototype\\\",{writable:!1}),e},e.exports.__esModule=!0,e.exports.default=e.exports},693:(e,t,r)=>{var n=r(736);e.exports=function(e,t,r){return(t=n(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e},e.exports.__esModule=!0,e.exports.default=e.exports},45:(e,t,r)=>{var n=r(738).default;e.exports=function(e,t){if(\\\"object\\\"!=n(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t||\\\"default\\\");if(\\\"object\\\"!=n(o))return o;throw new TypeError(\\\"@@toPrimitive must return a primitive value.\\\")}return(\\\"string\\\"===t?String:Number)(e)},e.exports.__esModule=!0,e.exports.default=e.exports},736:(e,t,r)=>{var n=r(738).default,o=r(45);e.exports=function(e){var t=o(e,\\\"string\\\");return\\\"symbol\\\"==n(t)?t:t+\\\"\\\"},e.exports.__esModule=!0,e.exports.default=e.exports},738:e=>{function t(r){return e.exports=t=\\\"function\\\"==typeof Symbol&&\\\"symbol\\\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\\\"function\\\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\\\"symbol\\\":typeof e},e.exports.__esModule=!0,e.exports.default=e.exports,t(r)}e.exports=t,e.exports.__esModule=!0,e.exports.default=e.exports}},t={};function r(n){var o=t[n];if(void 0!==o)return o.exports;var a=t[n]={exports:{}};return e[n](a,a.exports,r),a.exports}r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{\\\"use strict\\\";var e=r(293),t=r.n(e),n=r(383),o=r.n(n),a=r(579),i=r.n(a),u=r(693),s=r.n(u),c=function(e){return e[e.Error=-1]=\\\"Error\\\",e[e.AddTransform=0]=\\\"AddTransform\\\",e[e.ConfigurePipeline=1]=\\\"ConfigurePipeline\\\",e[e.Metadata=2]=\\\"Metadata\\\",e[e.Chunk=3]=\\\"Chunk\\\",e[e.PipelineConfigured=4]=\\\"PipelineConfigured\\\",e}({}),f=function(e){return e[e.FrameTimingInformation=0]=\\\"FrameTimingInformation\\\",e[e.EncodedVideoChunk=1]=\\\"EncodedVideoChunk\\\",e[e.EncodedAudioChunk=2]=\\\"EncodedAudioChunk\\\",e[e.SurrogateVideoChunk=3]=\\\"SurrogateVideoChunk\\\",e[e.SurrogateAudioChunk=4]=\\\"SurrogateAudioChunk\\\",e}({});function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function d(e,t){for(var r=e.length,n=t;n<r-3;n++)if(0===e[n]&&0===e[n+1]){if(1===e[n+2])return n;if(n+3<r&&0===e[n+2]&&1===e[n+3])return n}return-1}function p(e,t){for(var r=t,n=0;255===e[r];)n++,r++;var o=255*n+e[r++];for(n=0;255===e[r];)n++,r++;var a=255*n+e[r++];return{type:o,payload:e.subarray(r,r+a),length:r+a-t}}function m(e){if(e.getRemainingBits()<10)return null;var t={ctType:e.readBits(2),nuitFieldBasedFlag:1===e.readBits(1),countingType:e.readBits(5),fullTimestampFlag:1===e.readBits(1),discontinuityFlag:1===e.readBits(1),cntDroppedFlag:1===e.readBits(1),nFrames:e.readBits(8)};if(t.fullTimestampFlag){if(e.getRemainingBits()<17)return null;t.seconds=e.readBits(6),t.minutes=e.readBits(6),t.hours=e.readBits(5)}else if(!function(e,t){return e.getRemainingBits()<1||0===e.readBits(1)||!(e.getRemainingBits()<6)&&(t.seconds=e.readBits(6),e.getRemainingBits()<1||0===e.readBits(1)||!(e.getRemainingBits()<6)&&(t.minutes=e.readBits(6),e.getRemainingBits()<1||0===e.readBits(1)||!(e.getRemainingBits()<5)&&(t.hours=e.readBits(5),!0)))}(e,t))return null;return e.getRemainingBits()<24?null:(t.timeOffset=e.readBits(24),t)}function h(e,t){var r,n,o=(r=function(e){var t,r=[],n=0,o=function(e,t){var r=\\\"undefined\\\"!=typeof Symbol&&e[Symbol.iterator]||e[\\\"@@iterator\\\"];if(!r){if(Array.isArray(e)||(r=function(e,t){if(e){if(\\\"string\\\"==typeof e)return l(e,t);var r={}.toString.call(e).slice(8,-1);return\\\"Object\\\"===r&&e.constructor&&(r=e.constructor.name),\\\"Map\\\"===r||\\\"Set\\\"===r?Array.from(e):\\\"Arguments\\\"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?l(e,t):void 0}}(e))||t&&e&&\\\"number\\\"==typeof e.length){r&&(e=r);var n=0,o=function(){};return{s:o,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:o}}throw new TypeError(\\\"Invalid attempt to iterate non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\\\")}var a,i=!0,u=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return i=e.done,e},e:function(e){u=!0,a=e},f:function(){try{i||null==r.return||r.return()}finally{if(u)throw a}}}}(e);try{for(o.s();!(t=o.n()).done;){var a=t.value;2===n&&3===a?n=0:(0===a?n++:n=0,r.push(a))}}catch(e){o.e(e)}finally{o.f()}return new Uint8Array(r)}(e),n=0,{readBits:function(e){if(n+e>8*r.length)throw new Error(\\\"Cannot read [\\\".concat(e,\\\"] bits - out of bounds\\\"));for(var t=0,o=e;o>0;){var a=Math.floor(n/8),i=8-n%8,u=Math.min(o,i),s=(1<<u)-1;t=t<<u|r[a]>>i-u&s,n+=u,o-=u}return t},skipBits:function(e){if(n+e>8*r.length)throw new Error(\\\"Cannot skip [\\\".concat(e,\\\"] bits - out of bounds\\\"));n+=e},getRemainingBits:function(){return 8*r.length-n}}),a={picStruct:void 0};if(t.cpbDpbDelaysPresentFlag&&void 0!==t.cpbRemovalDelayLengthMinus1&&void 0!==t.dpbOutputDelayLengthMinus1&&(o.skipBits(t.cpbRemovalDelayLengthMinus1+1),o.skipBits(t.dpbOutputDelayLengthMinus1+1)),t.picStructPresentFlag){for(var i=function(e){switch(e){case 0:case 1:case 2:return 1;case 3:case 4:case 7:return 2;case 5:case 6:case 8:return 3;default:return 0}}(o.readBits(4)),u=[],s=0;s<i&&!(o.getRemainingBits()<1);s++)if(1===o.readBits(1)){var c=m(o);if(!c)break;u.push({clockTimestampFlag:!0,clockTimestamp:c})}else u.push({clockTimestampFlag:!1});a.picStruct={numClockTS:i,clockTimestamps:u}}return a}var v,y=function(){return i()(function e(){o()(this,e)},null,[{key:\\\"createFrameTimingInformationTransform\\\",value:function(){return new TransformStream({transform:function(e,t){(function(e){for(var t=new Date,r=new Uint8Array(e.data),n=d(r,0);-1!==n;){var o=d(r,n+1),a=-1===o?r.length:o,i=n+(1===r[n+2]?3:4);if(6==(31&r[i]))for(var u=i+1,l=r.subarray(u,a),m=0;m<l.length&&!(m+2>l.length);){var v=p(l,m);if(1===v.type){var y,g=null===(y=h(v.payload,{cpbDpbDelaysPresentFlag:!1,picStructPresentFlag:!0}).picStruct)||void 0===y?void 0:y.clockTimestamps[0];if(null!=g&&g.clockTimestampFlag){var b,k,w,_,T=e.timestamp,x={timecode:g.clockTimestamp?{hours:null!==(b=g.clockTimestamp.hours)&&void 0!==b?b:null,minutes:null!==(k=g.clockTimestamp.minutes)&&void 0!==k?k:null,seconds:null!==(w=g.clockTimestamp.seconds)&&void 0!==w?w:null,frames:null!==(_=g.clockTimestamp.nFrames)&&void 0!==_?_:null,isFrameDrop:g.clockTimestamp.cntDroppedFlag}:null,receiveTimestamp:t};self.postMessage({type:c.Metadata,data:{type:f.FrameTimingInformation,data:s()({},T,{decodedFrameTimingInformation:x})}})}}if(m+=v.length,0===v.length)break}n=o}})(e),t.enqueue(e)}})}},{key:\\\"createEncodedVideoStreamTransform\\\",value:function(e){var t=new Map,r=function(e,t,r){var n=r.data;if(n.type===c.Chunk&&n.data.type===f.SurrogateVideoChunk){var o=n.data.data,a=o.surrogate,i=o.timestamp,u=e.get(i);u?(u.data=a,t.enqueue(u),e.delete(i)):console.warn(\\\"[WorkerTransforms] Surrogate video chunk not found for timestamp\\\",i)}};return new TransformStream({start:function(n){e.addEventListener(\\\"message\\\",r.bind(null,t,n),{once:!1})},transform:function(e){t.set(e.timestamp,e),self.postMessage({type:c.Metadata,data:{type:f.EncodedVideoChunk,data:{timestamp:e.timestamp,data:new Uint8Array(e.data),type:e.type}}},{transfer:[e.data]})}})}},{key:\\\"createEncodedAudioStreamTransform\\\",value:function(e){var t=new Map,r=function(e,t,r){var n=r.data;if(n.type===c.Chunk&&n.data.type===f.SurrogateAudioChunk){var o=n.data.data,a=o.surrogate,i=o.timestamp,u=e.get(i);u?(u.data=a,t.enqueue(u),e.delete(i)):console.warn(\\\"[WorkerTransforms] Surrogate audio chunk not found for timestamp\\\",i)}};return new TransformStream({start:function(n){e.addEventListener(\\\"message\\\",r.bind(null,t,n),{once:!1})},transform:function(e){t.set(e.timestamp,e),self.postMessage({type:c.Metadata,data:{type:f.EncodedAudioChunk,data:{timestamp:e.timestamp,data:new Uint8Array(e.data),type:e.type}}},{transfer:[e.data]})}})}},{key:\\\"createPassThroughTransform\\\",value:function(){return new TransformStream({transform:function(e,t){return t.enqueue(e)}})}}])}();function g(){var e,t,r=\\\"function\\\"==typeof Symbol?Symbol:{},n=r.iterator||\\\"@@iterator\\\",o=r.toStringTag||\\\"@@toStringTag\\\";function a(r,n,o,a){var s=n&&n.prototype instanceof u?n:u,c=Object.create(s.prototype);return b(c,\\\"_invoke\\\",function(r,n,o){var a,u,s,c=0,f=o||[],l=!1,d={p:0,n:0,v:e,a:p,f:p.bind(e,4),d:function(t,r){return a=t,u=0,s=e,d.n=r,i}};function p(r,n){for(u=r,s=n,t=0;!l&&c&&!o&&t<f.length;t++){var o,a=f[t],p=d.p,m=a[2];r>3?(o=m===n)&&(s=a[(u=a[4])?5:(u=3,3)],a[4]=a[5]=e):a[0]<=p&&((o=r<2&&p<a[1])?(u=0,d.v=n,d.n=a[1]):p<m&&(o=r<3||a[0]>n||n>m)&&(a[4]=r,a[5]=n,d.n=m,u=0))}if(o||r>1)return i;throw l=!0,n}return function(o,f,m){if(c>1)throw TypeError(\\\"Generator is already running\\\");for(l&&1===f&&p(f,m),u=f,s=m;(t=u<2?e:s)||!l;){a||(u?u<3?(u>1&&(d.n=-1),p(u,s)):d.n=s:d.v=s);try{if(c=2,a){if(u||(o=\\\"next\\\"),t=a[o]){if(!(t=t.call(a,s)))throw TypeError(\\\"iterator result is not an object\\\");if(!t.done)return t;s=t.value,u<2&&(u=0)}else 1===u&&(t=a.return)&&t.call(a),u<2&&(s=TypeError(\\\"The iterator does not provide a '\\\"+o+\\\"' method\\\"),u=1);a=e}else if((t=(l=d.n<0)?s:r.call(n,d))!==i)break}catch(t){a=e,u=1,s=t}finally{c=1}}return{value:t,done:l}}}(r,o,a),!0),c}var i={};function u(){}function s(){}function c(){}t=Object.getPrototypeOf;var f=[][n]?t(t([][n]())):(b(t={},n,function(){return this}),t),l=c.prototype=u.prototype=Object.create(f);function d(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,c):(e.__proto__=c,b(e,o,\\\"GeneratorFunction\\\")),e.prototype=Object.create(l),e}return s.prototype=c,b(l,\\\"constructor\\\",c),b(c,\\\"constructor\\\",s),s.displayName=\\\"GeneratorFunction\\\",b(c,o,\\\"GeneratorFunction\\\"),b(l),b(l,o,\\\"Generator\\\"),b(l,n,function(){return this}),b(l,\\\"toString\\\",function(){return\\\"[object Generator]\\\"}),(g=function(){return{w:a,m:d}})()}function b(e,t,r,n){var o=Object.defineProperty;try{o({},\\\"\\\",{})}catch(e){o=0}b=function(e,t,r,n){function a(t,r){b(e,t,function(e){return this._invoke(t,r,e)})}t?o?o(e,t,{value:r,enumerable:!n,configurable:!n,writable:!n}):e[t]=r:(a(\\\"next\\\",0),a(\\\"throw\\\",1),a(\\\"return\\\",2))},b(e,t,r,n)}var k=self,w=function(){function e(){o()(this,e)}return i()(e,null,[{key:\\\"handleAddTransform\\\",value:function(t){if(e._isPipelineConfigured)throw new Error(\\\"Error: Pipeline is locked. A transform cannot be added once the pipeline has been configured\\\");switch(t){case\\\"frame-timing-information\\\":e._transforms.push(y.createFrameTimingInformationTransform());break;case\\\"protected-video\\\":e._transforms.push(y.createEncodedVideoStreamTransform(k));break;case\\\"protected-audio\\\":e._transforms.push(y.createEncodedAudioStreamTransform(k));break;case\\\"pass-through\\\":e._transforms.push(y.createPassThroughTransform());break;default:throw new Error(\\\"Error: Unknown transform type [\\\".concat(t,\\\"]\\\"))}}},{key:\\\"configurePipeline\\\",value:(r=t()(g().m(function t(r,n){return g().w(function(t){for(;;)switch(t.n){case 0:if(r&&n){t.n=1;break}throw new Error(\\\"Error: Configuration of TransformStreamPipeline requires both a readbale source and writable sink\\\");case 1:return 0===e._transforms.length&&e._transforms.push(),t.n=2,e._transforms.reduceRight(function(e,t){return e.pipeThrough(t)},r).pipeTo(n);case 2:e._isPipelineConfigured=!0,k.postMessage({type:c.PipelineConfigured,data:{name:e._workerName}});case 3:return t.a(2)}},t)})),function(e,t){return r.apply(this,arguments)})},{key:\\\"handleMessage\\\",value:function(t){var r=t.data,n=r.type;switch(n){case c.AddTransform:e.handleAddTransform(r.data);break;case c.ConfigurePipeline:e.configurePipeline(r.data.source,r.data.sink);break;case c.Metadata:case c.Chunk:break;default:!function(e){throw new Error(\\\"Unexpected value [\\\".concat(e,\\\"]. This should never be reached\\\"))}(n)}}}]);var r}();v=w,s()(w,\\\"_transforms\\\",[]),s()(w,\\\"_isPipelineConfigured\\\",!1),s()(w,\\\"_workerName\\\",void 0),k.onerror=function(e){return console.error(\\\"[TransformStreamPipelineWorker] Error: [%s]\\\",e)},k.onmessage=v.handleMessage.bind(v),k.RTCTransformEvent&&(k.onrtctransform=function(e){var t=e.transformer;v._workerName=t.options.name;var r=t.readable,n=t.writable;v.configurePipeline(r,n)})})()})();\\n\", \"Worker\", undefined, undefined);\n}\n","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport IDisposable from '../../../lang/IDisposable';\nimport Disposable from '../../../lang/Disposable';\nimport {TransformMessageDataType, TransformMessage, TransformMessagePayload, TransformMessageType} from './TransformStreamPipelineWorkerMessage';\n\nexport default class TransformPipelineMessageRouter implements IDisposable {\n private readonly _messageRoutes: Map<TransformMessageDataType, <T>(message: T) => void> = new Map();\n\n constructor(worker: Worker) {\n this.initialize(worker);\n }\n\n public registerRoute<T>(messageType: TransformMessageDataType, routeMessage: (message: T) => void): Disposable {\n this._messageRoutes.set(messageType, routeMessage as <T>(message: T) => void);\n\n return new Disposable(() => this._messageRoutes.delete(messageType));\n }\n\n public dispose(): void {\n this._messageRoutes.clear();\n }\n\n private initialize(worker: Worker): void {\n worker.addEventListener('message', ({data: message}: MessageEvent<TransformMessage>) => {\n const routeMessageData = <T>({type, data}: TransformMessagePayload<T>) => {\n const routeMessage = this._messageRoutes.get(type);\n\n if (!routeMessage) {\n return;\n }\n\n routeMessage(data);\n };\n\n switch (message.type) {\n case TransformMessageType.Chunk:\n case TransformMessageType.Metadata:\n routeMessageData(message.data);\n\n break;\n\n default:\n }\n }, {once: false});\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport Disposable from '../../lang/Disposable';\nimport DisposableList from '../../lang/DisposableList';\nimport assertUnreachable from '../../lang/assertUnreachable';\nimport FeatureEnablement from '../../environment/FeatureEnablement';\nimport {IStreamTrackTransform} from '../transformation/StreamTrackTransform';\nimport StreamTransformContext, {StreamTransformContextTrack} from '../context/StreamTransformContext';\nimport TransformStreamPipelineWorker from './worker/TransformStreamPipeline.worker';\nimport {TransformMessageType} from './worker/TransformStreamPipelineWorkerMessage';\nimport TransformMessageRouter from './worker/MessageRouter';\n\ntype MediaStreamTrackKind = 'video' | 'audio';\n\nexport default class InsertableStreams {\n static createEncodedStreamPipeline(streamTransformContext: StreamTransformContext): DisposableList {\n const disposables: DisposableList = new DisposableList();\n const {videoTrack, audioTrack} = streamTransformContext;\n const createTransformPipelineWorkerForTrack = (context: StreamTransformContextTrack) => {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore - Using Webpack's worker loader to inline worker\n const worker = context.transformPipelineWorker = new TransformStreamPipelineWorker();\n\n disposables.add(new Disposable(() => worker.terminate()));\n disposables.add(context.transformMessageRouter = new TransformMessageRouter(worker));\n };\n\n const {receiver: videoTrackReceiver, mediaStreamTrack: videoTrackMediaStreamTrack} = videoTrack;\n\n if (videoTrackReceiver && videoTrackMediaStreamTrack) {\n createTransformPipelineWorkerForTrack(videoTrack);\n }\n\n const {receiver: audioTrackReceiver, mediaStreamTrack: audioTrackMediaStreamTrack} = audioTrack;\n\n if (audioTrackReceiver && audioTrackMediaStreamTrack) {\n createTransformPipelineWorkerForTrack(audioTrack);\n }\n\n return disposables;\n }\n\n static async configureEncodedStreamPipeline(streamTransformContext: StreamTransformContext): Promise<void> {\n const {videoTrack, audioTrack} = streamTransformContext;\n const addTrackTransforms = (track: StreamTransformContextTrack) => {\n if (track.transformPipelineWorker) {\n if (track.transformFunctionNames.length) {\n for (const transformFunctionName of track.transformFunctionNames) {\n track.transformPipelineWorker.postMessage({\n type: TransformMessageType.AddTransform,\n data: transformFunctionName\n });\n }\n } else {\n // Required for safari to properly work when only video transformation is added (i.e. FrameTimingInformation)\n track.transformPipelineWorker.postMessage({\n type: TransformMessageType.AddTransform,\n data: 'pass-through'\n });\n }\n }\n };\n\n addTrackTransforms(videoTrack);\n addTrackTransforms(audioTrack);\n\n const configureRTCRtpScriptTransform = async(streamTransformContext: StreamTransformContext) => {\n // Safari and Firefox ...\n const configureRTCRtpScriptTransformForTrack = async(context: StreamTransformContextTrack) => {\n const {receiver: trackReceiver, mediaStreamTrack: trackMediaStreamTrack, transformPipelineWorker: trackTransformPipelineWorker} = context;\n\n if (trackReceiver && trackMediaStreamTrack && trackTransformPipelineWorker) {\n trackReceiver.transform = new RTCRtpScriptTransform(trackTransformPipelineWorker, {name: `${trackMediaStreamTrack.kind}-transform-pipeline`});\n\n return new Promise<void>(resolve => {\n trackTransformPipelineWorker.addEventListener('message', ({data: message}: MessageEvent) => {\n if (message.type === TransformMessageType.PipelineConfigured) {\n resolve();\n }\n }, {once: true});\n });\n }\n\n return Promise.resolve();\n };\n\n const {videoTrack, audioTrack} = streamTransformContext;\n\n await Promise.all([configureRTCRtpScriptTransformForTrack(videoTrack), configureRTCRtpScriptTransformForTrack(audioTrack)]);\n };\n\n const configureEncodedStreams = async(streamTransformContext: StreamTransformContext) => {\n const configureEncodedStreamsForTrack = (context: StreamTransformContextTrack) => {\n const {receiver: trackReceiver, mediaStreamTrack: trackMediaStreamTrack, transformPipelineWorker: trackTransformPipelineWorker} = context;\n\n if (trackReceiver && trackMediaStreamTrack && trackTransformPipelineWorker) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore - createEncodedStreams method is not defined in lib.dom.d.ts\n const encodedReceiverStreams = trackReceiver.createEncodedStreams();\n\n return new Promise<void>(resolve => {\n trackTransformPipelineWorker.addEventListener('message', ({data: message}: MessageEvent) => {\n if (message.type === TransformMessageType.PipelineConfigured) {\n resolve();\n }\n }, {once: true});\n\n trackTransformPipelineWorker.postMessage(\n {\n type: TransformMessageType.ConfigurePipeline,\n data: {\n source: encodedReceiverStreams.readable,\n sink: encodedReceiverStreams.writable\n }\n },\n {transfer: [encodedReceiverStreams.readable, encodedReceiverStreams.writable]}\n );\n });\n }\n\n return Promise.resolve();\n };\n\n const {videoTrack, audioTrack} = streamTransformContext;\n const actions: Promise<void>[] = [];\n\n if (videoTrack.receiver && videoTrack.transformPipelineWorker) {\n actions.push(configureEncodedStreamsForTrack(videoTrack));\n }\n\n if (audioTrack.receiver && audioTrack.transformPipelineWorker) {\n actions.push(configureEncodedStreamsForTrack(audioTrack));\n }\n\n await Promise.all(actions);\n };\n\n if (FeatureEnablement.isRTCRtpScriptTransformSupported) {\n // Safari and Firefox...\n await configureRTCRtpScriptTransform(streamTransformContext);\n\n return;\n }\n\n // Chrome, Chromium...\n await configureEncodedStreams(streamTransformContext);\n }\n\n static configureInsertableStreamTransformation(\n stream: MediaStream,\n videoStreamTransformCallback: IStreamTrackTransform<VideoFrame> | undefined,\n audioStreamTransformCallback: IStreamTrackTransform<AudioData> | undefined\n ): {transformedStream: MediaStream; disposables: DisposableList} {\n const transformedStream = new MediaStream();\n const disposables: DisposableList = new DisposableList();\n\n stream.getTracks().forEach(track => {\n const kind: MediaStreamTrackKind = track.kind as MediaStreamTrackKind;\n\n switch (kind) {\n case 'video': {\n if (videoStreamTransformCallback) {\n const insertableStreamTransformCallback: TransformerTransformCallback<VideoFrame, VideoFrame> = (chunk, controller) => {\n videoStreamTransformCallback(track, chunk, controller);\n };\n\n const videoTrack = track as MediaStreamVideoTrack;\n const transformer = new TransformStream({transform: insertableStreamTransformCallback});\n const processor = new MediaStreamTrackProcessor({track: videoTrack});\n const generator = new MediaStreamTrackGenerator({kind: videoTrack.kind});\n const source = processor.readable;\n const sink = generator.writable;\n\n source.pipeThrough(transformer).pipeTo(sink);\n\n transformedStream.addTrack(generator);\n disposables.add(\n new Disposable(() => {\n transformedStream.removeTrack(generator);\n })\n );\n } else {\n transformedStream.addTrack(track);\n }\n\n break;\n }\n\n case 'audio': {\n if (audioStreamTransformCallback) {\n const insertableStreamTransformCallback: TransformerTransformCallback<AudioData, AudioData> = (chunk, controller) => {\n audioStreamTransformCallback(track, chunk, controller);\n };\n\n const audioTrack = track as MediaStreamAudioTrack;\n const transformer = new TransformStream({transform: insertableStreamTransformCallback});\n const processor = new MediaStreamTrackProcessor({track: audioTrack});\n const generator = new MediaStreamTrackGenerator({kind: audioTrack.kind});\n const source = processor.readable;\n const sink = generator.writable;\n\n source.pipeThrough(transformer).pipeTo(sink);\n\n transformedStream.addTrack(generator);\n\n const mediaStream = new MediaStream();\n const audioPumper = new Audio();\n\n mediaStream.addTrack(track);\n audioPumper.srcObject = mediaStream;\n document.body.appendChild(audioPumper);\n disposables.add(\n new Disposable(() => {\n transformedStream.removeTrack(generator);\n document.body.removeChild(audioPumper);\n })\n );\n } else {\n transformedStream.addTrack(track);\n }\n\n break;\n }\n\n default:\n assertUnreachable(kind);\n }\n });\n\n return {\n transformedStream,\n disposables\n };\n }\n\n constructor() {\n throw new Error('InsertableStreams is a static class that may not be instantiated');\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nexport enum AudioCodec {\n OPUS = 0,\n AAC = 1\n}\n\nexport type AudioCodecType = 'OPUS' | 'AAC';","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nexport default new Uint8Array([0x00, 0x00, 0x00, 0x01]);","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport annexBFourByteStartCode from '../../../decode/bitstream/codec/h264/nalUnit/AnnexBFourByteStartCode';\n\nexport default new Uint8Array([\n ...annexBFourByteStartCode, 103, 66, 192, 42, 218, 4, 4, 232, 64, 0, 0, 3, 0, 64, 0, 0, 15, 35, 198, 12, 168,\n ...annexBFourByteStartCode, 104, 206, 60, 128,\n ...annexBFourByteStartCode, 6, 3, 167, ...new Uint8Array(150).fill(255), 128,\n ...annexBFourByteStartCode, 101, 136, 132, 6, 191, 255, 255, 15, 69, 0, 1, 87, 159, ...new Uint8Array(15).fill(39), 93, 117, 215, 93, 117, 215, 93, 117, 215, 93, 117, 215, 93, 117, 215, 93, 117, 215, 93, 117, 215, 93, 117, 215, 93, 117, 215, 93, 117, 215, 93, 117, 215, 93, 117, 215, 93, 117, 215, 93, 117, 215, 93, 117, 215, 93, 117, 215, 93, 117, 215, 93, 117, 215, 93, 117, 215, 93, 117, 215, 93, 117, 215, 93, 117, 215, 93, 117, 215, 93, 117, 215, 93, 117, 215, 93, 117, 215, 93, 117, 215, 93, 117, 215, 93, 117, 215, 93, 117, 215, 93, 117, 215, 93, 117, 215, 128\n]);","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport annexBFourByteStartCode from '../../../decode/bitstream/codec/h264/nalUnit/AnnexBFourByteStartCode';\n\nexport default new Uint8Array([\n ...annexBFourByteStartCode, 6, 3, 255, 61, ...new Uint8Array(316).fill(255), 128,\n ...annexBFourByteStartCode, 65, 154, 32, 26, 240, 18, 48\n]);","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport BrowserDetector from '../../dom/BrowserDetector';\nimport assertUnreachable from '../../lang/assertUnreachable';\nimport {AudioCodec} from '../decode/bitstream/codec/AudioCodec';\nimport {VideoCodec} from '../decode/bitstream/codec/VideoCodec';\nimport annexBFourByteStartCode from '../decode/bitstream/codec/h264/nalUnit/AnnexBFourByteStartCode';\nimport surrogateH26428x16IFrame from './surrogateFrames/h264/surrogate28x16IFrame';\nimport surrogateH26428x16PFrame from './surrogateFrames/h264/surrogate28x16PFrame';\n\nexport const SkipFrame = Symbol();\n\nexport type SurrogateFrameType = ArrayBuffer | undefined | typeof SkipFrame;\n\nexport default class SurrogateFrameDataManager {\n private static readonly _isSafari = BrowserDetector.browserName === 'Safari';\n private static readonly _isAndroidChrome = BrowserDetector.browserName === 'Chrome' && BrowserDetector.isAndroid;\n private static readonly _singleZeroByte = new Uint8Array([0x00]);\n private static readonly _dummyAudioSilentPerCodec = {OPUS: new Uint8Array([0x68, 0x07, 0xd9, 0xab, 0xbc, 0x79, 0x87, 0xab, 0x8e, 0x4a, 0x14, 0xf3, 0xa7, 0x1c, 0xf2, 0x9a, 0x7a, 0x45, 0xa7, 0x2d, 0x44, 0x25, 0x74, 0x4c, 0xad, 0x16, 0xb3, 0x0e, 0x51, 0x57, 0xea, 0xe7, 0xad, 0x2a, 0x38, 0xce, 0x33])};\n private static readonly _dummy2x2VideoIFramePerCodec = {\n H264: new Uint8Array([\n ...annexBFourByteStartCode, 0x09, 0xf0, // Access unit delimiter\n ...annexBFourByteStartCode, 0x67, 0xf4, 0x00, 0x0a, 0x91, 0x9b, 0x2b, 0xf1, 0xf1, 0xf8, 0x08, 0x80, 0x00, 0x00, 0x03, 0x00, 0x80, 0x00, 0x00, 0x19, 0x07, 0x89, 0x12, 0xcb, // Sequence parameter set\n ...annexBFourByteStartCode, 0x68, 0xeb, 0xe3, 0xc4, 0x48, 0x44, // Picture paramter set\n /* */ 0x00, 0x00, 0x01, 0x65, 0x88, 0x82, 0x00, 0x3f, 0x70, 0x23, 0x86, 0xe6, 0xd1, 0x80, 0x09, 0xaf, 0x0a, 0x41, 0x66, 0x6b, 0x54, 0x46, 0xfb, 0x71, 0xd9, 0x7f, 0xff, 0xff, 0xf9]), // Slice layer: idr data\n VP8: new Uint8Array([0xb0, 0x02, 0x00, 0x9d, 0x01, 0x2a, 0x01, 0x00, 0x01, 0x00, 0x39, 0x6b, 0x00, 0x27, 0x1c, 0x24, 0x0c, 0x2c, 0x2c, 0x44, 0xcc, 0x24, 0x41, 0xa8, 0x00, 0x13, 0xa7, 0xa3, 0x7a, 0x50, 0x00, 0xfe, 0xeb, 0xde, 0x2f, 0x8a, 0x1e, 0x6b, 0x7b, 0x07, 0x72, 0x63, 0x09, 0xa4, 0x8e, 0xc0]),\n VP9: new Uint8Array([0x82, 0x49, 0x83, 0x42, 0x00, 0x00, 0x00, 0x00, 0x06, 0x76, 0x38, 0x24, 0x1c, 0x19, 0xa0, 0x00, 0x00, 0x20, 0x40, 0x00, 0x11, 0xbf, 0xdd, 0x77, 0xff, 0x40, 0x7f, 0xb1, 0x00])\n };\n private static readonly _dummy2x2VideoPFramePerCodec = {\n H264: new Uint8Array([\n ...annexBFourByteStartCode, 0x09, 0xf0, // Access unit delimiter\n ...annexBFourByteStartCode, 0x41, 0x9a, 0x68, 0x49, 0xa8, 0x41, 0x68, 0x99, 0x4c, 0x0f, 0xff, 0x92, 0x81]), // Slice layer: non idr data\n VP8: new Uint8Array([0x31, 0x03, 0x00, 0xe4, 0xe0, 0xa8, 0x9b, 0x37, 0xaf, 0x10, 0x4f, 0x4f, 0xb1, 0x0a, 0x2f, 0xe4, 0x92, 0xc0, 0x1f, 0xe7, 0x4f, 0x46, 0xff, 0xee, 0x51, 0xc1, 0x5d, 0x00, 0xfe, 0xeb, 0xde, 0x2f, 0x8a, 0x1e, 0x6b, 0x7b, 0x07, 0x72, 0x63, 0x09, 0xa4, 0x8e, 0xc0]),\n VP9: new Uint8Array([0x86, 0x00, 0x40, 0x92, 0x9c, 0x24, 0x48, 0x00, 0x00, 0x03, 0x70, 0x00, 0x00, 0x4b, 0x40])\n };\n private static readonly _surrogate28x16H264IFrame = surrogateH26428x16IFrame;\n private static readonly _surrogate28x16H264PFrame = surrogateH26428x16PFrame;\n private static readonly _surrogate28x16PFrameFrameNumberReset = 1;\n private static _surrogate28x16PFrameFrameNumber = SurrogateFrameDataManager._surrogate28x16PFrameFrameNumberReset;\n\n static getSurrogateAudioSilentPerCodec(codec: AudioCodec): ArrayBuffer | undefined {\n switch (codec) {\n case AudioCodec.OPUS:\n return SurrogateFrameDataManager._dummyAudioSilentPerCodec.OPUS.buffer;\n\n // TODO (AZ): Add a dummy AAC silent frame when AAC support is added\n case AudioCodec.AAC:\n return undefined;\n\n default:\n assertUnreachable(codec);\n }\n }\n\n static getInvalidSurrogateAudioData(): ArrayBuffer {\n return SurrogateFrameDataManager._singleZeroByte.buffer;\n }\n\n static getSurrogateVideoIFramePerCodec(codec: VideoCodec): ArrayBuffer | undefined {\n switch (codec) {\n case VideoCodec.H264:\n if (SurrogateFrameDataManager._isSafari) {\n return SurrogateFrameDataManager._surrogate28x16H264IFrame.buffer;\n }\n\n return SurrogateFrameDataManager._dummy2x2VideoIFramePerCodec.H264.buffer;\n\n case VideoCodec.VP8:\n return SurrogateFrameDataManager._dummy2x2VideoIFramePerCodec.VP8.buffer;\n\n case VideoCodec.VP9:\n return SurrogateFrameDataManager._dummy2x2VideoIFramePerCodec.VP9.buffer;\n\n default:\n assertUnreachable(codec);\n }\n }\n\n static getInvalidSurrogateVideoIFrame(codec: VideoCodec): SurrogateFrameType {\n if ((codec === VideoCodec.H264) && SurrogateFrameDataManager._isAndroidChrome) {\n SurrogateFrameDataManager._surrogate28x16PFrameFrameNumber = SurrogateFrameDataManager._surrogate28x16PFrameFrameNumberReset;\n\n return SkipFrame;\n }\n\n return SurrogateFrameDataManager._singleZeroByte.buffer;\n }\n\n static getSurrogateVideoPFramePerCodec(codec: VideoCodec): ArrayBuffer | undefined {\n switch (codec) {\n case VideoCodec.H264: {\n if (SurrogateFrameDataManager._isSafari) {\n return SurrogateFrameDataManager._surrogate28x16H264PFrame.buffer;\n }\n\n return SurrogateFrameDataManager._dummy2x2VideoPFramePerCodec.H264.buffer;\n }\n\n case VideoCodec.VP8:\n return SurrogateFrameDataManager._dummy2x2VideoPFramePerCodec.VP8.buffer;\n\n case VideoCodec.VP9:\n return SurrogateFrameDataManager._dummy2x2VideoPFramePerCodec.VP9.buffer;\n\n default:\n assertUnreachable(codec);\n }\n }\n\n static getInvalidSurrogateVideoPFrame(): SurrogateFrameType {\n return SurrogateFrameDataManager._singleZeroByte.buffer;\n }\n\n private constructor() {\n throw new Error('SurrogateFrameDataManager is a static class that may not be instantiated');\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport DisposableList from '../../lang/DisposableList';\nimport IDisposable from '../../lang/IDisposable';\nimport {AudioCodec} from '../decode/bitstream/codec/AudioCodec';\nimport {VideoCodec} from '../decode/bitstream/codec/VideoCodec';\nimport {IEncodedStreamSink} from './EncodedStreamSink';\nimport {StreamTransformContextTrack} from '../context/StreamTransformContext';\nimport SurrogateFrameDataManager, {SurrogateFrameType, SkipFrame} from './SurrogateFrameDataManager';\nimport {TransformMessageDataType} from './worker/TransformStreamPipelineWorkerMessage';\nimport Chunk from './Chunk';\n\nexport type EncodedMediaTransformManagerContext = {\n videoTrack: StreamTransformContextTrack;\n audioTrack: StreamTransformContextTrack;\n encodedVideoStreamSink: IEncodedStreamSink<RTCEncodedVideoFrame>;\n encodedAudioStreamSink: IEncodedStreamSink<RTCEncodedAudioFrame>;\n};\n\nexport default class EncodedMediaTransformManager implements IDisposable {\n private readonly _disposables: DisposableList = new DisposableList();\n\n constructor(context: EncodedMediaTransformManagerContext) {\n this.initialize(context);\n }\n\n public dispose(): void {\n this._disposables.dispose();\n }\n\n private initialize(context: EncodedMediaTransformManagerContext): void {\n if (context.videoTrack.mediaStreamTrack) {\n context.videoTrack.transformFunctionNames.push('protected-video');\n\n this._disposables.add(context.videoTrack.transformMessageRouter!.registerRoute(TransformMessageDataType.EncodedVideoChunk, (chunk: RTCEncodedVideoFrame) => this.encodedVideoStreamCallback(context.videoTrack, context.encodedVideoStreamSink as IEncodedStreamSink<RTCEncodedVideoFrame>, chunk)));\n }\n\n if (context.audioTrack.mediaStreamTrack) {\n context.audioTrack.transformFunctionNames.push('protected-audio');\n\n this._disposables.add(context.audioTrack.transformMessageRouter!.registerRoute(TransformMessageDataType.EncodedAudioChunk, (chunk: RTCEncodedAudioFrame) => this.encodedAudioStreamCallback(context.audioTrack, context.encodedAudioStreamSink as IEncodedStreamSink<RTCEncodedAudioFrame>, chunk)));\n }\n }\n\n private async encodedAudioStreamCallback(track: StreamTransformContextTrack, encodedAudioStreamSink: IEncodedStreamSink<RTCEncodedAudioFrame>, chunk: RTCEncodedAudioFrame): Promise<Chunk> {\n if (!await encodedAudioStreamSink(track.mediaStreamTrack!, chunk)) {\n chunk.data = SurrogateFrameDataManager.getInvalidSurrogateAudioData();\n } else {\n chunk.data = SurrogateFrameDataManager.getSurrogateAudioSilentPerCodec(track.codec as AudioCodec) || chunk.data;\n }\n\n return chunk as unknown as Chunk;\n }\n\n private async encodedVideoStreamCallback(track: StreamTransformContextTrack, encodedVideoStreamSink: IEncodedStreamSink<RTCEncodedVideoFrame>, chunk: RTCEncodedVideoFrame): Promise<Chunk | undefined> {\n if (!await encodedVideoStreamSink(track.mediaStreamTrack!, chunk)) {\n let surrogate: SurrogateFrameType;\n\n if (chunk.type === 'key') {\n surrogate = SurrogateFrameDataManager.getInvalidSurrogateVideoIFrame(track.codec as VideoCodec);\n } else {\n surrogate = SurrogateFrameDataManager.getInvalidSurrogateVideoPFrame();\n }\n\n if (surrogate === SkipFrame) {\n return;\n }\n\n chunk.data = surrogate || chunk.data;\n } else {\n if (chunk.type === 'key') {\n chunk.data = SurrogateFrameDataManager.getSurrogateVideoIFramePerCodec(track.codec as VideoCodec) || chunk.data;\n } else {\n chunk.data = SurrogateFrameDataManager.getSurrogateVideoPFramePerCodec(track.codec as VideoCodec) || chunk.data;\n }\n }\n\n return chunk;\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport assertUnreachable from '../../../../lang/assertUnreachable';\nimport {VideoCodec, VideoCodecType} from './VideoCodec';\n\nexport default class VideoCodecMapping {\n public static convertVideoCodecToVideoCodecType(videoCodec: VideoCodec): VideoCodecType {\n switch (videoCodec) {\n case VideoCodec.H264:\n return 'H264';\n case VideoCodec.VP8:\n return 'VP8';\n case VideoCodec.VP9:\n return 'VP9';\n default:\n assertUnreachable(videoCodec);\n }\n }\n\n public static convertVideoCodecTypeToVideoCodec(videoCodecType: VideoCodecType): VideoCodec {\n const videoCodecString = videoCodecType.toUpperCase() as keyof typeof VideoCodec;\n\n switch (videoCodecString) {\n case 'H264':\n return VideoCodec.H264;\n case 'VP8':\n return VideoCodec.VP8;\n case 'VP9':\n return VideoCodec.VP9;\n default:\n assertUnreachable(videoCodecString);\n }\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport {AudioCodec, AudioCodecType} from './AudioCodec';\nimport assertUnreachable from '../../../../lang/assertUnreachable';\n\nexport default class AudioCodecMapping {\n public static convertAudioCodecToAudioCodecType(audioCodec: AudioCodec): AudioCodecType {\n switch (audioCodec) {\n case AudioCodec.OPUS:\n return 'OPUS';\n case AudioCodec.AAC:\n return 'AAC';\n default:\n assertUnreachable(audioCodec);\n }\n }\n\n public static convertAudioCodecTypeToAudioCodec(audioCodecType: AudioCodecType): AudioCodec {\n const audioCodecString = audioCodecType.toUpperCase() as keyof typeof AudioCodec;\n\n switch (audioCodecString) {\n case 'OPUS':\n return AudioCodec.OPUS;\n case 'AAC':\n return AudioCodec.AAC;\n default:\n assertUnreachable(audioCodecString);\n }\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport GlobalScope from '../../globalScope/GlobalScope';\nimport Disposable from '../../lang/Disposable';\nimport DisposableList from '../../lang/DisposableList';\nimport assertUnreachable from '../../lang/assertUnreachable';\nimport {StreamSetupListener} from '../../dom/StreamSetupListener';\nimport GarbageCollectorManager from '../../dom/GarbageCollectorManager';\nimport Durations from '../../time/Duration';\nimport SDK from '../SDK';\nimport IPeerConnection from '../../rtc/IPeerConnection';\nimport SdpParser from '../../rtc/SdpParser';\nimport RtcConfigurationManager from '../../rtc/RtcConfigurationManager';\nimport PeerConnectionService, {\n defaultTrackKinds,\n EncodedInsertableStreams\n} from '../../rtc/PeerConnectionService';\nimport RtcConnectionMonitor from '../../rtc/RtcConnectionMonitor';\nimport EndPoint, {SubscribeOptions, SetRemoteDescriptionStatus} from '../discovery/EndPoint';\nimport Discovery from '../discovery/Discovery';\nimport FeatureEnablement from '../../environment/FeatureEnablement';\nimport ChannelState from '../channels/ChannelState';\nimport {ILogger} from '../../logger/LoggerInterface';\nimport LoggerFactory from '../../logger/LoggerFactory';\nimport ChannelContext from '../context/ChannelContext';\nimport PeerConnectionContext from '../context/PeerConnectionContext';\nimport StreamTransformContext from '../context/StreamTransformContext';\nimport FrameTimingInformationContext from '../context/FrameTimingInformationContext';\nimport FrameTimingInformationManager, {FrameTimingInformationManagerContext} from '../frameTiming/FrameTimingInformationManager';\nimport InsertableStreams from '../transformation/InsertableStreams';\nimport {IStreamSubscriber} from './IStreamSubscriber';\nimport VideoFrameDetector from './VideoFrameDetector';\nimport EncodedMediaTransformManager, {EncodedMediaTransformManagerContext} from '../transformation/EncodedMediaTransformManager';\nimport {AudioCodecType} from '../decode/bitstream/codec/AudioCodec';\nimport {VideoCodecType} from '../decode/bitstream/codec/VideoCodec';\nimport VideoCodecMapping from '../decode/bitstream/codec/VideoCodecMapping';\nimport AudioCodecMapping from '../decode/bitstream/codec/AudioCodecMapping';\n\nconst iceCandidateAccumulationInterval = 100;\nconst defaultStreamSetupTimeout = 30000;\n\nexport default class RealTimeStreamSubscriber implements IStreamSubscriber {\n private readonly _logger: ILogger = LoggerFactory.getLogger('RealTimeStreamSubscriber');\n private readonly _disposables: DisposableList = new DisposableList();\n private readonly _channelContext: ChannelContext;\n private readonly _peerConnectionContext: PeerConnectionContext;\n private readonly _streamTransformContext: StreamTransformContext;\n private readonly _frameTimingInformationContext: FrameTimingInformationContext;\n private readonly _handleStreamFailure: () => Promise<void>;\n\n constructor(channelContext: ChannelContext, peerConnectionContext: PeerConnectionContext, streamTransformContext: StreamTransformContext, frameTimingInformationContext: FrameTimingInformationContext, handleStreamFailure: () => Promise<void>) {\n this._channelContext = channelContext;\n this._peerConnectionContext = peerConnectionContext;\n this._streamTransformContext = streamTransformContext;\n this._frameTimingInformationContext = frameTimingInformationContext;\n this._handleStreamFailure = handleStreamFailure;\n }\n\n start(uri: URL, token: string, listenOnStreamSetup: StreamSetupListener, playMediaStreamInVideoElement: Function): Promise<void> {\n this._disposables.dispose();\n\n const requiresEncodedInsertableStreams = this._streamTransformContext.hasEncodedInsertableStreams.value\n || this._frameTimingInformationContext.shouldExtractTimecode.value\n || this._frameTimingInformationContext.shouldExtractTimestamps.value ? EncodedInsertableStreams.Enabled : EncodedInsertableStreams.Disabled;\n\n return Promise.all([\n Discovery.discoverClosestEndPointWithCaching(uri),\n PeerConnectionService.createPeerConnectionOffer('recvonly', defaultTrackKinds, requiresEncodedInsertableStreams)\n .then(({localOffer, peerConnection}) => {\n this._peerConnectionContext.peerConnection.value = peerConnection;\n\n return {\n localOffer,\n peerConnection\n };\n })\n ])\n .then(([endPoint, {localOffer, peerConnection}]) => {\n this._channelContext.online.value = true;\n this._channelContext.endPoint.value = endPoint;\n this._logger.info('Connecting to [%s]', endPoint.toString());\n this._logger.info('Local offer:\\n' + localOffer.sdp);\n\n const subscribeOptions: SubscribeOptions = {};\n\n if (this._channelContext.onRealTimeSubscribeRequestCallback) {\n subscribeOptions.onSubscribeRequestCallback = this._channelContext.onRealTimeSubscribeRequestCallback;\n }\n\n if (this._channelContext.onRealTimeSubscribeResponseCallback) {\n subscribeOptions.onSubscribeResponseCallback = this._channelContext.onRealTimeSubscribeResponseCallback;\n }\n\n if (FeatureEnablement.clientOfferDisabled || !peerConnection.supportsSetConfiguration || !peerConnection.supportsGetConfiguration) {\n peerConnection.close();\n peerConnection.dispose();\n\n if (SDK.forceGarbageCollectionOnRestart && !(FeatureEnablement.isMobile && SDK.skipGarbageCollectionOnMobileDevices)) {\n GarbageCollectorManager.forceGarbageCollection();\n }\n\n this._peerConnectionContext.peerConnection.value = null;\n\n return endPoint.subscribe(token, null, this._channelContext.failureCount.value, subscribeOptions);\n }\n\n return endPoint.subscribe(token, localOffer, this._channelContext.failureCount.value, subscribeOptions);\n })\n .then(response => {\n const {status} = response;\n\n this._channelContext.exists.value = this._channelContext.mapSubscribeStatusToExists(status);\n this._channelContext.state.value = this._channelContext.mapSubscribeStatusToChannelStatus(status);\n\n this._channelContext.applyStatus(status);\n\n if (status !== 'ok') {\n this._channelContext.stream.value = null;\n this._channelContext.lag.value = undefined ;\n\n this._channelContext.applySessionAndStreamPropertiesToVideoElement();\n\n this._logger.info(\n '[%s] Subscribe failed with status [%s]',\n this._channelContext.streamId,\n status\n );\n\n return;\n }\n\n const {stream, rtcConfiguration, setRemoteDescriptionResponse, createOfferDescriptionResponse, createAnswerDescriptionResponse, lag} = response;\n\n this._channelContext.stream.value = stream;\n this._channelContext.lag.value = lag;\n\n this._channelContext.applySessionAndStreamPropertiesToVideoElement();\n\n this._logger.debug(\n '[%s] Subscribe completed [%s] [%j] [%j] [%j] [%j]',\n this._channelContext.streamId,\n status,\n rtcConfiguration,\n setRemoteDescriptionResponse,\n createOfferDescriptionResponse,\n createAnswerDescriptionResponse\n );\n\n return this.applyRtcConfiguration(this._peerConnectionContext.peerConnection.value, rtcConfiguration as RTCConfiguration)\n .then(peerConnection => {\n let submitCandidatesTimeout: undefined | number;\n let cancelDiscovery = false;\n let discoveryCompleted = false;\n const candidates: RTCIceCandidate[] = [];\n\n if (!this._peerConnectionContext.peerConnection.value) {\n this._peerConnectionContext.peerConnection.value = peerConnection;\n }\n\n peerConnection.onicecandidate = (e): void => {\n if (this._channelContext.stream.value !== stream) {\n return;\n }\n\n if (this._peerConnectionContext.peerConnection.value !== peerConnection) {\n return;\n }\n\n if (cancelDiscovery) {\n return;\n }\n\n if (!SDK.sendLocalCandidates.value) {\n return;\n }\n\n if (e.candidate && e.candidate.candidate) {\n candidates.push(e.candidate);\n } else {\n discoveryCompleted = true;\n }\n\n if (!submitCandidatesTimeout) {\n submitCandidatesTimeout = GlobalScope.value.setTimeout(() => {\n if (this._channelContext.stream.value !== stream) {\n return;\n }\n\n if (cancelDiscovery) {\n return;\n }\n\n const ignored = this._channelContext.endPoint.value?.addIceCandidates(stream, candidates, discoveryCompleted)\n .then(({status, options}) => {\n if (status !== 'ok') {\n this._logger.warn('[%s] Failed to add ICE candidates with reason [%s]', this._channelContext.streamId, status);\n\n return;\n }\n\n if (options?.includes('cancel')) {\n cancelDiscovery = true;\n }\n\n this._logger.info('[%s] Added ICE candidates with reason [%s] and options [%s]', this._channelContext.streamId, status, options);\n })\n .catch(e => {\n this._logger.error('[%s] Failed to add ICE candidates', this._channelContext.streamId, e);\n });\n }, iceCandidateAccumulationInterval);\n\n this._disposables.add(new Disposable(() => GlobalScope.value.clearTimeout(submitCandidatesTimeout)));\n }\n };\n\n this._disposables.add(new Disposable(() => {\n peerConnection.onicecandidate = null;\n peerConnection.oniceconnectionstatechange = null;\n }));\n\n peerConnection.oniceconnectionstatechange = (): void => {\n if (this._channelContext.stream.value !== stream) {\n return;\n }\n\n if (this._peerConnectionContext.peerConnection.value !== peerConnection) {\n return;\n }\n\n const retryCallback = (): void => {\n const ignored = this._handleStreamFailure()\n .catch(e => {\n this._logger.error(\n '[%s] Failed handling stream failure after peer connection stopped with state [%s]',\n this._channelContext.streamId,\n peerConnection.iceConnectionState,\n e\n );\n });\n };\n\n switch (peerConnection.iceConnectionState) {\n case 'checking':\n case 'completed':\n case 'connected':\n case 'new':\n return;\n\n case 'disconnected':\n case 'failed':\n if (GlobalScope.value.navigatorIsOnLine) {\n this._logger.info('[%s] ICE connection state changed to [%s], trying to reconnect', this._channelContext.streamId, peerConnection.iceConnectionState);\n this.reconnectPeerConnection(this._channelContext.streamId, peerConnection, retryCallback);\n }\n\n return;\n case 'closed':\n this._logger.info('[%s] ICE connection state changed to [%s], retrying to connect', this._channelContext.streamId, peerConnection.iceConnectionState);\n\n retryCallback();\n\n return;\n default:\n assertUnreachable(peerConnection.iceConnectionState as never);\n }\n };\n\n const mediaStreamPromise = new Promise<MediaStream>((resolve, reject) => {\n if (!FeatureEnablement.onTrackDisabled) {\n const timeoutId = GlobalScope.value.setTimeout(() => reject(new Error('Stream setup timed out')), defaultStreamSetupTimeout);\n\n this._disposables.add(new Disposable(() => GlobalScope.value.clearTimeout(timeoutId)));\n\n peerConnection.ontrack = (e): void => {\n GlobalScope.value.clearTimeout(timeoutId);\n resolve(e.streams[0]);\n };\n\n return;\n }\n\n const trackListener = (e: RTCPeerConnectionEventMap['track' | 'addstream']): void => {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n GlobalScope.value.clearTimeout(timeoutId);\n peerConnection.removeEventListener('track', trackListener);\n peerConnection.removeEventListener('addstream', trackListener);\n\n if ('streams' in e) {\n resolve(e.streams[0]);\n } else {\n resolve(e.stream);\n }\n };\n\n const timeoutId = GlobalScope.value.setTimeout(() => {\n peerConnection.removeEventListener('track', trackListener);\n peerConnection.removeEventListener('addstream', trackListener);\n reject(new Error('Stream setup timed out'));\n }, defaultStreamSetupTimeout);\n\n peerConnection.addEventListener('track', trackListener);\n peerConnection.addEventListener('addstream', trackListener);\n this._disposables.add(new Disposable(() => GlobalScope.value.clearTimeout(timeoutId)));\n\n return;\n });\n\n return new Promise<void>(resolve => {\n resolve();\n }).then(() => {\n if (!setRemoteDescriptionResponse) {\n return;\n }\n\n this._logger.info('[%s] Set local SDP offer [%s]', this._channelContext.streamId, setRemoteDescriptionResponse.sessionDescription.sdp);\n\n return peerConnection.setLocalDescription(setRemoteDescriptionResponse.sessionDescription)\n .catch(e => {\n this._logger.info('[%s] Failed to set local description [%j] with message [%s]', this._channelContext.streamId, setRemoteDescriptionResponse.sessionDescription, e.message);\n\n throw e;\n });\n }).then(() => {\n if (!createAnswerDescriptionResponse) {\n return;\n }\n\n this._logger.info('[%s] Set remote SDP answer [%s]', this._channelContext.streamId, createAnswerDescriptionResponse.sessionDescription.sdp);\n\n return peerConnection.setRemoteDescription(createAnswerDescriptionResponse.sessionDescription)\n .catch(e => {\n this._logger.info('[%s] Failed to set remote description [%j] with message [%s]', this._channelContext.streamId, createAnswerDescriptionResponse.sessionDescription, e.message);\n\n throw e;\n });\n }).then(() => {\n if (!createOfferDescriptionResponse) {\n return;\n }\n\n this._logger.info('[%s] Set remote SDP offer [%s]', this._channelContext.streamId, createOfferDescriptionResponse.sessionDescription.sdp);\n\n return peerConnection.setRemoteDescription(createOfferDescriptionResponse.sessionDescription)\n .catch(e => {\n this._logger.info('[%s] Failed to set remote description [%j] with message [%s]', this._channelContext.streamId, createOfferDescriptionResponse.sessionDescription, e.message);\n\n throw e;\n })\n .then(() => {\n return peerConnection.createAnswer({\n offerToReceiveAudio: true,\n offerToReceiveVideo: true\n });\n }).then(answer => {\n this._logger.info('[%s] Set local SDP answer [%j]', this._channelContext.streamId, answer);\n\n const endPoint = this._channelContext.endPoint.value as EndPoint;\n\n return endPoint.setRemoteDescription(stream, answer);\n }).then(({status, sessionDescription}) => {\n this._channelContext.state.value = this.mapSetRemoteDescriptionStatusToChannelStatus(status);\n\n if (status !== 'ok') {\n this._channelContext.playing.value = false;\n this._channelContext.standby.value = true;\n this._channelContext.stopped.value = false;\n\n return;\n }\n\n return peerConnection.setLocalDescription(sessionDescription as RTCSessionDescription)\n .catch(e => {\n this._logger.info('[%s] Failed to set local description [%j] with message [%s]', this._channelContext.streamId, sessionDescription, e.message);\n\n throw e;\n });\n });\n }).then(() => {\n listenOnStreamSetup.success(this._channelContext.streamId);\n\n return mediaStreamPromise;\n }).then(mediaStream => {\n if (requiresEncodedInsertableStreams && peerConnection?.currentRemoteDescription?.sdp) {\n const parsedRemoteDescription = new SdpParser(peerConnection.currentRemoteDescription.sdp);\n\n this._streamTransformContext.videoTrack.codec = VideoCodecMapping.convertVideoCodecTypeToVideoCodec(parsedRemoteDescription.videoCodec as VideoCodecType);\n this._streamTransformContext.audioTrack.codec = AudioCodecMapping.convertAudioCodecTypeToAudioCodec(parsedRemoteDescription.audioCodec as AudioCodecType);\n\n const receivers = peerConnection.getReceivers();\n // Note: This assumes that there is only one video MediaStreamTrack and one audio MediaStreamTrack\n const videoTrack = this._streamTransformContext.videoTrack.mediaStreamTrack = mediaStream.getVideoTracks()[0];\n // Both are expected to be present, but the type system makes them nullable, so we have to assert the presence\n const videoTrackReceiver = this._streamTransformContext.videoTrack.receiver = receivers.filter(receiver => receiver.track === videoTrack)[0];\n\n this._streamTransformContext.videoTrack.mid = peerConnection.supportsGetTransceivers\n ? peerConnection.getTransceivers().filter(transceiver => transceiver.receiver === videoTrackReceiver)[0]?.mid\n : null;\n\n const audioTrack = this._streamTransformContext.audioTrack.mediaStreamTrack = mediaStream.getAudioTracks()[0];\n const audioTrackReceiver = this._streamTransformContext.audioTrack.receiver = receivers.filter(receiver => receiver.track === audioTrack)[0];\n\n this._streamTransformContext.audioTrack.mid = peerConnection.supportsGetTransceivers\n ? peerConnection.getTransceivers().filter(transceiver => transceiver.receiver === audioTrackReceiver)[0]?.mid\n : null;\n\n this._disposables.add(InsertableStreams.createEncodedStreamPipeline(this._streamTransformContext));\n\n const requiresFrameTimingInformation = this._frameTimingInformationContext.shouldExtractTimecode.value || this._frameTimingInformationContext.shouldExtractTimestamps.value;\n\n if (requiresFrameTimingInformation) {\n const frameTimingInformationManagerContext: FrameTimingInformationManagerContext = {\n streamId: this._channelContext.streamId,\n codec: this._streamTransformContext.videoTrack.codec,\n videoElement: this._channelContext.videoElement,\n decodedFrameTimingInformationSubject: this._frameTimingInformationContext.decodedFrameTimingInformation,\n renderedFrameTimingInformationSubject: this._frameTimingInformationContext.renderedFrameTimingInformation,\n isEnabledSubject: this._frameTimingInformationContext.isEnabled,\n receiver: videoTrackReceiver,\n mid: this._streamTransformContext.videoTrack.mid!,\n trackId: this._streamTransformContext.videoTrack.mediaStreamTrack.id!,\n transformMessageRouter: this._streamTransformContext.videoTrack.transformMessageRouter!,\n transformFunctionNames: this._streamTransformContext.videoTrack.transformFunctionNames\n };\n\n this._disposables.add(new FrameTimingInformationManager(frameTimingInformationManagerContext));\n }\n\n const requiresEncodedMediaTransform = this._streamTransformContext.hasEncodedInsertableStreams.value;\n\n if (requiresEncodedMediaTransform) {\n const encodedMediaTransformManagerContext: EncodedMediaTransformManagerContext = {\n videoTrack: this._streamTransformContext.videoTrack,\n audioTrack: this._streamTransformContext.audioTrack,\n encodedVideoStreamSink: this._streamTransformContext.encodedVideoStreamSink!,\n encodedAudioStreamSink: this._streamTransformContext.encodedAudioStreamSink!\n };\n\n this._disposables.add(new EncodedMediaTransformManager(encodedMediaTransformManagerContext));\n }\n\n InsertableStreams.configureEncodedStreamPipeline(this._streamTransformContext);\n }\n\n if (this._streamTransformContext.hasInsertableStreams.value) {\n const {transformedStream, disposables} = InsertableStreams.configureInsertableStreamTransformation(mediaStream, this._streamTransformContext.videoStreamTransformCallback, this._streamTransformContext.audioStreamTransformCallback);\n\n this._disposables.add(disposables);\n mediaStream = transformedStream;\n }\n\n this._peerConnectionContext.mediaStream.value = mediaStream;\n\n const rtcConnectionMonitor = new RtcConnectionMonitor(\n peerConnection, mediaStream,\n this._channelContext.endPoint.value?.roundTripTime ? this._channelContext.endPoint.value.roundTripTime / 4 : 0,\n SDK.applicationActivityMonitor!.isForeground\n );\n\n this._disposables.add(rtcConnectionMonitor);\n\n const rtcConnectionMonitorStatisticSubscription = rtcConnectionMonitor.rtcStatistic.subscribe(statistics => {\n this._channelContext.rtcStatistics.value = statistics;\n\n if (!statistics) {\n return;\n }\n\n if (!this._channelContext.rtcVideoStatistic && !this._channelContext.rtcAudioStatistic) {\n this._channelContext.rtcAudioStatistic = statistics.audio;\n this._channelContext.rtcVideoStatistic = statistics.video;\n\n return;\n }\n\n if (!SDK.applicationActivityMonitor!.isForeground.value) {\n this._channelContext.rtcAudioStatistic = statistics.audio;\n this._channelContext.rtcVideoStatistic = statistics.video;\n\n return;\n }\n\n let audioTrackFailed = false;\n let videoTrackFailed = false;\n\n if (statistics.audio) {\n if (this._channelContext.rtcAudioStatistic && this._channelContext.rtcAudioStatistic.timestamp !== statistics.audio.timestamp) {\n audioTrackFailed = this._channelContext.rtcAudioStatistic && this._channelContext.rtcAudioStatistic.bytesReceived === statistics.audio.bytesReceived;\n\n if (audioTrackFailed && GlobalScope.value.navigatorIsOnLine) {\n this._logger.info(\n '[%s] Audio track failed with last bytesReceived [%s] is equal to previous bytesReceived [%s] within [%s]',\n this._channelContext.streamId,\n statistics.audio.bytesReceived,\n this._channelContext.rtcAudioStatistic.bytesReceived,\n new Durations(statistics.audio.timestamp - this._channelContext.rtcAudioStatistic.timestamp).toIsoString()\n );\n }\n\n this._channelContext.rtcAudioStatistic = statistics.audio;\n }\n }\n\n if (statistics.video) {\n if (this._channelContext.rtcVideoStatistic && this._channelContext.rtcVideoStatistic.timestamp !== statistics.video.timestamp) {\n videoTrackFailed = this._channelContext.rtcVideoStatistic && this._channelContext.rtcVideoStatistic.bytesReceived === statistics.video.bytesReceived;\n\n if (videoTrackFailed && GlobalScope.value.navigatorIsOnLine) {\n this._logger.info(\n '[%s] Video track failed with last bytesReceived [%s] is equal to previous bytesReceived [%s] within [%s]',\n this._channelContext.streamId,\n statistics.video.bytesReceived,\n this._channelContext.rtcVideoStatistic.bytesReceived,\n new Durations(statistics.video.timestamp - this._channelContext.rtcVideoStatistic.timestamp).toIsoString()\n );\n }\n\n this._channelContext.rtcVideoStatistic = statistics.video;\n }\n }\n\n if (!GlobalScope.value.navigatorIsOnLine) {\n this._channelContext.state.value = ChannelState.Offline;\n\n return;\n }\n\n if (videoTrackFailed || audioTrackFailed) {\n const retryCallback = (): void => {\n rtcConnectionMonitor.dispose();\n\n const ignored = this._handleStreamFailure()\n .catch(e => {\n this._logger.error(\n '[%s] Failed handling stream failure after track stopped with state [%s]',\n this._channelContext.streamId,\n peerConnection.iceConnectionState,\n e\n );\n });\n };\n\n this.reconnectPeerConnection(this._channelContext.streamId, peerConnection, retryCallback);\n } else {\n this._peerConnectionContext.peerConnectionReconnectAttempts = 0;\n\n if (this._channelContext.state.value !== ChannelState.Reconnecting && this._channelContext.state.value !== ChannelState.Offline) {\n return;\n }\n\n this._channelContext.state.value = this._channelContext.playing.value ? ChannelState.Playing : ChannelState.Paused;\n this._logger.info('Channel state restored to [%s] after reconnecting', ChannelState[this._channelContext.state.value]);\n }\n });\n\n this._disposables.add(rtcConnectionMonitorStatisticSubscription);\n\n if (!SDK.automaticallyPlayMediaStream) {\n this._channelContext.autoMuted.value = false;\n this._channelContext.autoPaused.value = true;\n this._channelContext.loading.value = false;\n this._channelContext.playing.value = false;\n this._channelContext.state.value = ChannelState.Paused;\n\n return;\n }\n\n return playMediaStreamInVideoElement(mediaStream);\n });\n });\n });\n }\n\n private async applyRtcConfiguration(\n optionalPeerConnection: IPeerConnection | null,\n rtcConfiguration: RTCConfiguration): Promise<IPeerConnection> {\n if (!optionalPeerConnection) {\n rtcConfiguration = RtcConfigurationManager.truncateIceServers(rtcConfiguration);\n\n return SDK.peerConnectionFactory.value.createPeerConnection(rtcConfiguration);\n }\n\n const newRtcConfiguration = {\n ...optionalPeerConnection.getConfiguration(),\n ...rtcConfiguration\n };\n\n optionalPeerConnection.setConfiguration(newRtcConfiguration);\n\n return optionalPeerConnection;\n }\n\n private reconnectPeerConnection(streamId: string, peerConnection: IPeerConnection, retryCallback: () => void): void {\n if (!SDK.applicationActivityMonitor!.isForeground.value) {\n this._logger.debug('[%s] Skipping peerConnection reconnection attempt while not in foreground (peerConnection state [%s])', streamId, peerConnection.iceConnectionState);\n\n return;\n }\n\n if (peerConnection.iceConnectionState === 'closed') {\n return;\n }\n\n switch (this._channelContext.state.value) {\n case ChannelState.Paused:\n case ChannelState.Stopped:\n case ChannelState.Unauthorized:\n case ChannelState.GeoRestricted:\n case ChannelState.GeoBlocked:\n case ChannelState.UnsupportedFeature:\n case ChannelState.ConfigurationError:\n this._logger.debug('[%s] Skipping peerConnection reconnection in deliberately-terminal state [%s]', streamId, ChannelState[this._channelContext.state.value]);\n\n return;\n default:\n break;\n }\n\n this._channelContext.state.value = ChannelState.Reconnecting;\n\n if (this._peerConnectionContext.peerConnectionReconnectAttempts < SDK.maximalNumberOfPeerConnectionReconnectAttempts || !SDK.automaticallyReconnectPeerConnection) {\n this._peerConnectionContext.peerConnectionReconnectAttempts++;\n\n const isClientOfferFlow = peerConnection.currentLocalDescription?.type === 'offer';\n\n if (FeatureEnablement.clientOfferDisabled ||\n !peerConnection.supportsSetConfiguration ||\n !peerConnection.supportsGetConfiguration ||\n !isClientOfferFlow\n ) {\n return;\n }\n\n this._logger.info('Reconnecting peer connection by restarting ICE');\n\n const currentLocalDescription = peerConnection.currentLocalDescription;\n const ignored = peerConnection.createOffer({iceRestart: true}).then(offer => {\n return peerConnection.setLocalDescription(offer).then(() => {\n return peerConnection.setLocalDescription(currentLocalDescription);\n });\n })\n .catch(e => {\n this._logger.error('Failed to reconnect peer connection', e);\n this._peerConnectionContext.peerConnectionReconnectAttempts = 0;\n retryCallback();\n });\n\n return;\n }\n\n this._logger.info('Failed to reconnect peer connection after [%s] attempts, performing full recovery', this._peerConnectionContext.peerConnectionReconnectAttempts);\n this._peerConnectionContext.peerConnectionReconnectAttempts = 0;\n retryCallback();\n }\n\n isStreamHealthy(): Promise<boolean> {\n const videoElement = this._channelContext.videoElement.value;\n\n if (!videoElement) {\n return Promise.resolve(false);\n }\n\n const mediaStream = this._peerConnectionContext.mediaStream.value;\n const hasActiveTracks = mediaStream?.getTracks().some(track => track.readyState === 'live') ?? false;\n\n if (videoElement.paused || !hasActiveTracks) {\n return Promise.resolve(false);\n }\n\n return VideoFrameDetector.isRenderingFrames(videoElement);\n }\n\n dispose(): void {\n this._disposables.dispose();\n }\n\n private mapSetRemoteDescriptionStatusToChannelStatus(status: SetRemoteDescriptionStatus): ChannelState {\n switch (status) {\n case 'ok':\n return ChannelState.Starting;\n case 'unauthorized':\n return ChannelState.Unauthorized;\n case 'not-found':\n case 'capacity':\n case 'rate-limited':\n case 'timeout':\n return ChannelState.Recovering;\n case 'failed':\n return ChannelState.Error;\n default:\n assertUnreachable(status);\n }\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport {IStreamSubscriber} from './IStreamSubscriber';\nimport EdgeAuthParser from '../../edgeAuth/EdgeAuthParser';\nimport ChunkedStreamSubscriber from './ChunkedStreamSubscriber';\nimport RealTimeStreamSubscriber from './RealTimeStreamSubscriber';\nimport ChunkedStreamPlaybackMode from './ChunkedStreamPlaybackMode';\nimport ChannelContext from '../context/ChannelContext';\nimport PeerConnectionContext from '../context/PeerConnectionContext';\nimport StreamTransformContext from '../context/StreamTransformContext';\nimport FrameTimingInformationContext from '../context/FrameTimingInformationContext';\n\nexport default class StreamSubscriberFactory {\n static create(token: string, channelContext: ChannelContext, peerConnectionContext: PeerConnectionContext, streamTransformContext: StreamTransformContext, frameTimingInformationContext: FrameTimingInformationContext, handleStreamFailure: () => Promise<void>): IStreamSubscriber {\n const tokenCapabilities = EdgeAuthParser.parseToken(token).capabilities;\n const hasStreaming = tokenCapabilities.includes('streaming');\n const hasOnDemand = tokenCapabilities.includes('on-demand');\n\n if (hasStreaming || hasOnDemand) {\n return new ChunkedStreamSubscriber(channelContext, !hasOnDemand ? ChunkedStreamPlaybackMode.Live : ChunkedStreamPlaybackMode.OndDemand, handleStreamFailure);\n }\n\n return new RealTimeStreamSubscriber(channelContext, peerConnectionContext, streamTransformContext, frameTimingInformationContext, handleStreamFailure);\n }\n\n constructor() {\n throw new Error('StreamSubscriberFactory is a static class that may not be instantiated');\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport GlobalScope from '../../globalScope/GlobalScope';\nimport LoggerFactory from '../../logger/LoggerFactory';\nimport ReadOnlySubject from '../../rx/ReadOnlySubject';\nimport Dimension from '../../video/Dimension';\nimport ExponentialBackoff from '../../time/ExponentialBackoff';\nimport EndPoint, {IStream} from '../discovery/EndPoint';\nimport {IOnRealTimeSubscribeRequestCallback} from './IOnRealTimeSubscribeRequestCallback';\nimport {IOnRealTimeSubscribeResponseCallback} from './IOnRealTimeSubscribeResponseCallback';\nimport SDK from '../SDK';\nimport GarbageCollectorManager from '../../dom/GarbageCollectorManager';\nimport IPeerConnection from '../../rtc/IPeerConnection';\nimport {IChannel} from './IChannel';\nimport ChannelState from './ChannelState';\nimport assertUnreachable from '../../lang/assertUnreachable';\nimport Disposable from '../../lang/Disposable';\nimport {ILogger} from '../../logger/LoggerInterface';\nimport VideoTelemetry from '../../video/VideoTelemetry';\nimport SessionTelemetry from '../../video/SessionTelemetry';\nimport {IRtcMonitorStatistic} from '../../rtc/RtcConnectionMonitor';\nimport {BitrateMode, BitrateState} from '../api/SetTemporaryMaximalBitrate';\nimport EdgeAuthParser from '../../edgeAuth/EdgeAuthParser';\nimport {EncodedEdgeToken} from '../../edgeAuth/EncodedEdgeToken';\nimport {BitsPerSecond, Millisecond} from '../../units/Units';\nimport TokenContext from '../context/TokenContext';\nimport ChannelContext, {ChannelContextOptions} from '../context/ChannelContext';\nimport EncodedStreamSink, {IEncodedStreamSink} from '../transformation/EncodedStreamSink';\nimport StreamTrackTransform, {IStreamTrackTransform} from '../transformation/StreamTrackTransform';\nimport StreamTransformContext, {StreamTransformContextOptions} from '../context/StreamTransformContext';\nimport PeerConnectionContext from '../context/PeerConnectionContext';\nimport StateContext from '../context/StateContext';\nimport FrameTimingInformationContext from '../context/FrameTimingInformationContext';\nimport {DecodedFrameTimingInformation, RenderedFrameTimingInformation} from '../frameTiming/FrameTimingInformation';\nimport {IStreamSubscriber} from '../streaming/IStreamSubscriber';\nimport StreamSubscriberFactory from '../streaming/StreamSubscriberFactory';\nimport Discovery from '../discovery/Discovery';\nimport DiscoveryUri from '../discovery/DiscoveryUri';\nimport MetricsFactory from '../../metrics/MetricsFactory';\nimport MetricsService from '../../metrics/MetricsService';\nimport FeatureEnablement from '../../environment/FeatureEnablement';\n\nconst defaultStreamTerminationReason = 'client:termination';\nconst foregroundRestartReasonBackgroundTimeout = 'client:foregrounded:background-timeout';\nconst foregroundRestartReasonUnhealthy = 'client:foregrounded:unhealthy';\nconst failureCountCleanUpIntervalInMilliseconds = 3000;\nconst standbyPollingIntervalInMilliseconds = 15000;\nconst backgroundRecoveryFailsafeIntervalInMilliseconds = 5000;\nconst streamDeletionThresholdInMilliseconds = 30000;\n\nexport type ChannelOptions = {\n targetLag?: Millisecond;\n videoStreamTransformCallback?: IStreamTrackTransform<VideoFrame>;\n audioStreamTransformCallback?: IStreamTrackTransform<AudioData>;\n encodedVideoStreamSink?: IEncodedStreamSink<RTCEncodedVideoFrame>;\n encodedAudioStreamSink?: IEncodedStreamSink<RTCEncodedAudioFrame>;\n onRealTimeSubscribeRequestCallback?: IOnRealTimeSubscribeRequestCallback;\n onRealTimeSubscribeResponseCallback?: IOnRealTimeSubscribeResponseCallback;\n};\n\nexport default class Channel implements IChannel {\n private readonly _logger: ILogger = LoggerFactory.getLogger('Channel');\n private readonly _tokenContext: TokenContext;\n private readonly _channelContext: ChannelContext;\n private readonly _peerConnectionContext: PeerConnectionContext;\n private readonly _streamTransformContext: StreamTransformContext;\n private readonly _stateContext: StateContext;\n private readonly _frameTimingInformationContext: FrameTimingInformationContext;\n private readonly _exponentialBackoff: ExponentialBackoff;\n private readonly _channelStartTime: number;\n private readonly _readOnlyPeerConnection: ReadOnlySubject<IPeerConnection | null>;\n private readonly _readOnlyState: ReadOnlySubject<ChannelState>;\n private readonly _readOnlyExists: ReadOnlySubject<boolean | null>;\n private readonly _readOnlyAutoMuted: ReadOnlySubject<boolean>;\n private readonly _readOnlyAutoPaused: ReadOnlySubject<boolean>;\n private readonly _readOnlyTokenExpiring: ReadOnlySubject<boolean>;\n private readonly _readOnlyAuthorized: ReadOnlySubject<boolean>;\n private readonly _readOnlyOnline: ReadOnlySubject<boolean>;\n private readonly _readOnlyLoading: ReadOnlySubject<boolean>;\n private readonly _readOnlyPlaying: ReadOnlySubject<boolean>;\n private readonly _readOnlyStandby: ReadOnlySubject<boolean>;\n private readonly _readOnlyStopped: ReadOnlySubject<boolean>;\n private readonly _readOnlyTargetLag: ReadOnlySubject<Millisecond>;\n private readonly _readOnlyLag: ReadOnlySubject<number | undefined>;\n private readonly _readOnlyBitrateLimit: ReadOnlySubject<BitsPerSecond>;\n private readonly _readOnlyResolution: ReadOnlySubject<Dimension>;\n private readonly _readOnlyFailureCount: ReadOnlySubject<number>;\n private readonly _readOnlyEndPoint: ReadOnlySubject<EndPoint | null>;\n private readonly _readOnlyStream: ReadOnlySubject<IStream | null>;\n private readonly _readOnlyRtcStatistics: ReadOnlySubject<IRtcMonitorStatistic | null>;\n private readonly _readOnlyMediaStream: ReadOnlySubject<MediaStream | null>;\n private readonly _readOnlyIsFrameTimingInformationEnabled: ReadOnlySubject<boolean>;\n private readonly _readOnlyDecodedFrameTimingInformation: ReadOnlySubject<DecodedFrameTimingInformation | null>;\n private readonly _readOnlyRenderedFrameTimingInformation: ReadOnlySubject<RenderedFrameTimingInformation | null>;\n\n private _metricsService: MetricsService;\n private _streamSubscriber: IStreamSubscriber | null = null;\n private readonly _sessionTelemetry: SessionTelemetry;\n private readonly _videoMetaDataChangedHandler: () => void;\n\n constructor(videoElement: HTMLVideoElement, token: EncodedEdgeToken, options?: ChannelOptions) {\n const edgeToken = EdgeAuthParser.parseToken(token);\n const channelContextOptions: ChannelContextOptions = {\n targetLag: options?.targetLag,\n onRealTimeSubscribeRequestCallback: options?.onRealTimeSubscribeRequestCallback,\n onRealTimeSubscribeResponseCallback: options?.onRealTimeSubscribeResponseCallback\n };\n const streamTransformContextOptions: StreamTransformContextOptions = {\n hasInsertableStreams: edgeToken.capabilities.includes('insertable-streams'),\n hasEncodedInsertableStreams: edgeToken.capabilities.includes('encoded-insertable-streams'),\n videoStreamTransformCallback: options?.videoStreamTransformCallback,\n audioStreamTransformCallback: options?.audioStreamTransformCallback,\n encodedVideoStreamSink: options?.encodedVideoStreamSink,\n encodedAudioStreamSink: options?.encodedAudioStreamSink\n };\n\n this._tokenContext = new TokenContext(token);\n this._channelContext = new ChannelContext(channelContextOptions);\n this._peerConnectionContext = new PeerConnectionContext();\n this._streamTransformContext = new StreamTransformContext(streamTransformContextOptions);\n this._stateContext = new StateContext();\n this._exponentialBackoff = new ExponentialBackoff();\n this._channelStartTime = Date.now();\n this._readOnlyPeerConnection = new ReadOnlySubject<IPeerConnection | null>(this._peerConnectionContext.peerConnection);\n this._readOnlyState = new ReadOnlySubject<ChannelState>(this._channelContext.state);\n this._readOnlyExists = new ReadOnlySubject<boolean | null>(this._channelContext.exists);\n this._readOnlyAutoMuted = new ReadOnlySubject<boolean>(this._channelContext.autoMuted);\n this._readOnlyAutoPaused = new ReadOnlySubject<boolean>(this._channelContext.autoPaused);\n this._readOnlyTokenExpiring = new ReadOnlySubject<boolean>(this._tokenContext.tokenExpiring);\n this._readOnlyAuthorized = new ReadOnlySubject<boolean>(this._channelContext.authorized);\n this._readOnlyOnline = new ReadOnlySubject<boolean>(this._channelContext.online);\n this._readOnlyLoading = new ReadOnlySubject<boolean>(this._channelContext.loading);\n this._readOnlyPlaying = new ReadOnlySubject<boolean>(this._channelContext.playing);\n this._readOnlyStandby = new ReadOnlySubject<boolean>(this._channelContext.standby);\n this._readOnlyStopped = new ReadOnlySubject<boolean>(this._channelContext.stopped);\n this._readOnlyTargetLag = new ReadOnlySubject<number>(this._channelContext.targetLag);\n this._readOnlyLag = new ReadOnlySubject<number | undefined>(this._channelContext.lag);\n this._readOnlyBitrateLimit = new ReadOnlySubject<BitsPerSecond>(this._channelContext.bitrateLimit);\n this._readOnlyResolution = new ReadOnlySubject<Dimension>(this._channelContext.resolution);\n this._readOnlyFailureCount = new ReadOnlySubject<number>(this._channelContext.failureCount);\n this._readOnlyEndPoint = new ReadOnlySubject<EndPoint | null>(this._channelContext.endPoint);\n this._readOnlyStream = new ReadOnlySubject<IStream | null>(this._channelContext.stream);\n this._readOnlyRtcStatistics = new ReadOnlySubject<IRtcMonitorStatistic | null>(this._channelContext.rtcStatistics);\n this._readOnlyMediaStream = new ReadOnlySubject<MediaStream | null>(this._peerConnectionContext.mediaStream);\n\n const discoveryUri = (edgeToken.uri || SDK.discoveryUri.value).toString();\n\n SDK.tenancy.value = edgeToken.tenancy || SDK.tenancy.value;\n DiscoveryUri.uri.value = discoveryUri;\n this._metricsService = MetricsFactory.getMetricsService(discoveryUri);\n this._sessionTelemetry = new SessionTelemetry(SDK.pageLoadTime, this._metricsService);\n this._channelContext.channelDisposables.add(this._sessionTelemetry);\n this._videoMetaDataChangedHandler = this.handleVideoMetaDataChanged.bind(this);\n this.videoElement = videoElement;\n\n this._frameTimingInformationContext = new FrameTimingInformationContext();\n this.configureFrameTimingInformation(edgeToken.capabilities);\n this._readOnlyIsFrameTimingInformationEnabled = new ReadOnlySubject<boolean>(this._frameTimingInformationContext.isEnabled);\n this._readOnlyDecodedFrameTimingInformation = new ReadOnlySubject<DecodedFrameTimingInformation | null>(this._frameTimingInformationContext.decodedFrameTimingInformation);\n this._readOnlyRenderedFrameTimingInformation = new ReadOnlySubject<RenderedFrameTimingInformation | null>(this._frameTimingInformationContext.renderedFrameTimingInformation);\n\n this._channelContext.channelDisposables.add(\n this._channelContext.videoElement.subscribe(videoElement => {\n this._channelContext.rendererDisposables.dispose();\n\n if (!videoElement) {\n return;\n }\n\n this._channelContext.rendererDisposables.add(this._channelContext.stream.subscribe(stream => {\n if (this._channelContext.videoTelemetry) {\n this._channelContext.videoTelemetry.dispose();\n }\n\n if (!stream) {\n return;\n }\n\n if (!this.videoElement) {\n return;\n }\n\n if (this.videoElement.dataset) {\n this.videoElement.dataset.sessionId = SDK.clientSessionId;\n this.videoElement.dataset.streamId = this.streamId;\n }\n\n this._channelContext.videoTelemetry = new VideoTelemetry(this.streamId, SDK.pageLoadTime, this._channelStartTime, this._metricsService);\n this._channelContext.videoTelemetry.setupListenerForTimeToFirstTime(this.videoElement);\n this._channelContext.videoTelemetry.setupListenerForRebuffering(this.videoElement);\n\n if (this._channelContext.state.value === ChannelState.Stopped) {\n const ignored = this.restartAfterStop();\n }\n }));\n\n this._channelContext.channelDisposables.add(this._channelContext.rendererDisposables);\n }));\n this._channelContext.channelDisposables.add(\n this._channelContext.state.subscribe(state => {\n if (this._channelContext.clearFailureCountTimeout) {\n GlobalScope.value.clearTimeout(this._channelContext.clearFailureCountTimeout);\n }\n\n if (!this._channelContext.failureCount.value) {\n return;\n }\n\n if (state !== ChannelState.Playing) {\n return;\n }\n\n this._channelContext.clearFailureCountTimeout = GlobalScope.value.setTimeout(() => {\n this._channelContext.failureCount.value = 0;\n }, failureCountCleanUpIntervalInMilliseconds);\n }));\n this._channelContext.channelDisposables.add(\n this._channelContext.resolution.subscribe(resolution => {\n if (this._channelContext.videoTelemetry) {\n this._channelContext.videoTelemetry.onVideoResolutionChanges(resolution.toString());\n }\n }));\n this._channelContext.channelDisposables.add(\n this._channelContext.bitrateLimit.subscribe(bitrateLimit => {\n if (bitrateLimit && this._channelContext.endPoint.value && this._channelContext.stream.value) {\n const elapsedInMilliseconds = Date.now() - this._channelContext.channelInitialization.getTime();\n const ignored = this._channelContext.endPoint.value.limitBitrate(\n this._channelContext.stream.value,\n elapsedInMilliseconds,\n bitrateLimit,\n BitrateState.Keep,\n BitrateMode.Normal\n )\n .catch(e => {\n this._logger.error('Error while setting limit bitrate', e);\n });\n }\n })\n );\n\n const destroyStreamOnUnmount = () => {\n if (this._channelContext.stream.value && this._channelContext.endPoint.value) {\n const ignored = this._channelContext.endPoint.value.destroyStreamOnUnmount(this._channelContext.stream.value, 'client:termination-on-window-unload');\n }\n };\n\n GlobalScope.value.addWindowEventListener('beforeunload', destroyStreamOnUnmount);\n\n this._channelContext.channelDisposables.add(new Disposable(() => {\n GlobalScope.value.removeWindowEventListener('beforeunload', destroyStreamOnUnmount);\n }));\n\n this.start();\n\n if (SDK.automaticRetryOnFailure) {\n // SDK.initialize() guarantees applicationActivityMonitor is created before any Channel can be instantiated\n this._channelContext.channelDisposables.add(\n SDK.applicationActivityMonitor!.isForeground.subscribe(isForeground => {\n if (!isForeground) {\n return;\n }\n\n const lastBackgroundDuration = SDK.applicationActivityMonitor!.getLastBackgroundDuration();\n const shouldForceRestart = FeatureEnablement.isMobile\n && lastBackgroundDuration !== null\n && lastBackgroundDuration > backgroundRecoveryFailsafeIntervalInMilliseconds;\n // Platform destroys streams after 30s of no media data. If the channel is already\n // reconnecting and the tab was backgrounded longer than that threshold, the server-side\n // stream is gone and we must do a full restart rather than waiting for the reconnect.\n const isStreamDeletedByPlatform = this._channelContext.state.value === ChannelState.Reconnecting\n && lastBackgroundDuration !== null\n && lastBackgroundDuration > streamDeletionThresholdInMilliseconds;\n\n if (shouldForceRestart || isStreamDeletedByPlatform) {\n this._logger.info('[%s] Foregrounded after [%s] ms in background, forcing restart', this._channelContext.streamId, lastBackgroundDuration);\n this.restartOnForeground(foregroundRestartReasonBackgroundTimeout);\n\n return;\n }\n\n if (this.isRetryableState()) {\n this.restartOnForeground(foregroundRestartReasonUnhealthy);\n\n return;\n }\n\n // The health check catches streams that are unhealthy while still in Playing state\n // (e.g., video stalled but no state transition yet)\n if (!this._streamSubscriber) {\n return;\n }\n\n const ignored = this.isSubscriberHealthy()\n .then(isHealthy => {\n if (isHealthy) {\n return;\n }\n\n if (this._stateContext.isStarting.value) {\n return;\n }\n\n // Only restart from Playing state — terminal states (Unauthorized, GeoBlocked,\n // Stopped, etc.) should not trigger health-check restarts\n if (this._channelContext.state.value !== ChannelState.Playing) {\n return;\n }\n\n this._channelContext.failureCount.value = 0;\n this._logger.debug('[%s] Reset failureCount to 0 and restarting Channel after returning to foreground', this._channelContext.streamId);\n\n const ignoredStart = this.start();\n })\n .catch(e => {\n this._logger.error('[%s] Unexpected error occurred when checking subscriber health while foregrounding', this._channelContext.streamId, e);\n });\n }));\n }\n }\n\n get videoElement(): HTMLVideoElement | null {\n return this._channelContext.videoElement.value;\n }\n\n set videoElement(videoElement: HTMLVideoElement) {\n if (this._channelContext.videoElement.value) {\n this._channelContext.videoElement.value.removeEventListener('loadeddata', this._videoMetaDataChangedHandler);\n this._channelContext.videoElement.value.removeEventListener('loadedmetadata', this._videoMetaDataChangedHandler);\n this._channelContext.videoElement.value.removeEventListener('resize', this._videoMetaDataChangedHandler);\n\n if (this._channelContext.videoElement.value.dataset) {\n this._channelContext.videoElement.value.dataset.sessionId = '';\n this._channelContext.videoElement.value.dataset.streamId = '';\n }\n\n this._channelContext.rendererDisposables.dispose();\n\n this._channelContext.videoElement.value.pause();\n this._channelContext.videoElement.value.srcObject = null;\n }\n\n this._channelContext.autoMuted.value = false;\n this._channelContext.autoPaused.value = false;\n this._channelContext.loading.value = false;\n this._channelContext.playing.value = false;\n\n if (this._channelContext.state.value !== ChannelState.Initializing) {\n this._channelContext.state.value = ChannelState.Stopped;\n }\n\n this._channelContext.videoElement.value = videoElement;\n\n if (this._channelContext.videoElement.value) {\n this._channelContext.videoElement.value.addEventListener('loadeddata', this._videoMetaDataChangedHandler);\n this._channelContext.videoElement.value.addEventListener('loadedmetadata', this._videoMetaDataChangedHandler);\n this._channelContext.videoElement.value.addEventListener('resize', this._videoMetaDataChangedHandler);\n }\n }\n\n private handleVideoMetaDataChanged(): void {\n const videoElement = this._channelContext.videoElement.value;\n\n if (videoElement) {\n if (this.resolution.value.width !== videoElement.videoWidth || this.resolution.value.height !== videoElement.videoHeight) {\n this._channelContext.resolution.value = new Dimension(videoElement.videoWidth, videoElement.videoHeight);\n }\n } else {\n this._channelContext.resolution.value = Dimension.empty;\n }\n }\n\n get token(): EncodedEdgeToken {\n return this._tokenContext.token.value;\n }\n\n set token(token: EncodedEdgeToken) {\n this._channelContext.disposables.dispose();\n\n this._tokenContext.token.value = token;\n this._tokenContext.tokenExpiring.value = false;\n\n const edgeToken = EdgeAuthParser.parseToken(this._tokenContext.token.value);\n const discoveryUri = (edgeToken.uri || SDK.discoveryUri.value).toString();\n\n SDK.tenancy.value = edgeToken.tenancy || SDK.tenancy.value;\n DiscoveryUri.uri.value = discoveryUri;\n\n this._metricsService = MetricsFactory.getMetricsService(discoveryUri);\n\n this._streamTransformContext.hasInsertableStreams.value = edgeToken.capabilities.includes('insertable-streams');\n this._streamTransformContext.hasEncodedInsertableStreams.value = edgeToken.capabilities.includes('encoded-insertable-streams');\n\n this.configureFrameTimingInformation(edgeToken.capabilities);\n\n this.start();\n }\n\n get peerConnection(): ReadOnlySubject<IPeerConnection | null> {\n return this._readOnlyPeerConnection;\n }\n\n get state(): ReadOnlySubject<ChannelState> {\n return this._readOnlyState;\n }\n\n get exists(): ReadOnlySubject<boolean | null> {\n return this._readOnlyExists;\n }\n\n get autoMuted(): ReadOnlySubject<boolean> {\n return this._readOnlyAutoMuted;\n }\n\n get autoPaused(): ReadOnlySubject<boolean> {\n return this._readOnlyAutoPaused;\n }\n\n get tokenExpiring(): ReadOnlySubject<boolean> {\n return this._readOnlyTokenExpiring;\n }\n\n get authorized(): ReadOnlySubject<boolean> {\n return this._readOnlyAuthorized;\n }\n\n get online(): ReadOnlySubject<boolean> {\n return this._readOnlyOnline;\n }\n\n get loading(): ReadOnlySubject<boolean> {\n return this._readOnlyLoading;\n }\n\n get playing(): ReadOnlySubject<boolean> {\n return this._readOnlyPlaying;\n }\n\n get standby(): ReadOnlySubject<boolean> {\n return this._readOnlyStandby;\n }\n\n get stopped(): ReadOnlySubject<boolean> {\n return this._readOnlyStopped;\n }\n\n get targetLag(): ReadOnlySubject<Millisecond> {\n return this._readOnlyTargetLag;\n }\n\n get lag(): ReadOnlySubject<Millisecond | undefined> {\n return this._readOnlyLag;\n }\n\n get bitrateLimit(): BitsPerSecond {\n return this._readOnlyBitrateLimit.value;\n }\n\n get resolution(): ReadOnlySubject<Dimension> {\n return this._readOnlyResolution;\n }\n\n get failureCount(): ReadOnlySubject<number> {\n return this._readOnlyFailureCount;\n }\n\n get endPoint(): ReadOnlySubject<EndPoint | null> {\n return this._readOnlyEndPoint;\n }\n\n get stream(): ReadOnlySubject<IStream | null> {\n return this._readOnlyStream;\n }\n\n get streamId(): string {\n return this._channelContext.streamId;\n }\n\n get rtcStatistics(): ReadOnlySubject<IRtcMonitorStatistic | null> {\n return this._readOnlyRtcStatistics;\n }\n\n get mediaStream(): ReadOnlySubject<MediaStream | null> {\n return this._readOnlyMediaStream;\n }\n\n get isFrameTimingInformationEnabled(): ReadOnlySubject<boolean> {\n return this._readOnlyIsFrameTimingInformationEnabled;\n }\n\n get decodedFrameTimingInformation(): ReadOnlySubject<DecodedFrameTimingInformation | null> {\n return this._readOnlyDecodedFrameTimingInformation;\n }\n\n get renderedFrameTimingInformation(): ReadOnlySubject<RenderedFrameTimingInformation | null> {\n return this._readOnlyRenderedFrameTimingInformation;\n }\n\n setBitrateLimit(bitrateLimit: BitsPerSecond): void {\n this._channelContext.bitrateLimit.value = bitrateLimit;\n }\n\n clearBitrateLimit(): void {\n if (this._channelContext.bitrateLimit.value && this._channelContext.endPoint.value && this._channelContext.stream.value) {\n const elapsedInMilliseconds = Date.now() - this._channelContext.channelInitialization.getTime();\n const bitrateInBitsPerSecond = 0;\n const ignored = this._channelContext.endPoint.value.limitBitrate(\n this._channelContext.stream.value,\n elapsedInMilliseconds,\n bitrateInBitsPerSecond,\n BitrateState.Keep,\n BitrateMode.Reset\n )\n .then(({status}) => {\n if (status === 'ok') {\n this._channelContext.bitrateLimit.value = 0;\n }\n })\n .catch(e => {\n this._logger.error('Error while setting limit bitrate', e);\n });\n }\n }\n\n updateTargetLag(lag: Millisecond): void {\n this._channelContext.targetLag.value = lag;\n }\n\n async stop(reason: string): Promise<void> {\n return new Promise(resolve => {\n if (!this._stateContext.isStarting.value) {\n this.processStop(reason);\n\n resolve();\n\n return;\n }\n\n this._channelContext.rendererDisposables.add(this._stateContext.isStarting.subscribe(isStarting => {\n if (!isStarting) {\n this.processStop(reason);\n resolve();\n }\n }));\n });\n }\n\n private processStop(reason: string): void {\n if (this._channelContext.videoElement.value) {\n this._channelContext.videoElement.value.pause();\n this._channelContext.videoElement.value.srcObject = null;\n }\n\n this._channelContext.rendererDisposables.dispose();\n\n this.cleanUpResources(reason);\n\n this._channelContext.state.value = ChannelState.Stopped;\n }\n\n async resume(): Promise<void> {\n if (this._peerConnectionContext.mediaStream.value) {\n this._channelContext.autoPaused.value = false;\n\n return this.playMediaStreamInVideoElement(this._peerConnectionContext.mediaStream.value);\n }\n }\n\n mute(): void {\n const videoElement = this._channelContext.videoElement.value;\n\n if (videoElement) {\n videoElement.muted = true;\n }\n }\n\n unmute(): void {\n const videoElement = this._channelContext.videoElement.value;\n\n if (videoElement) {\n videoElement.muted = false;\n this._channelContext.autoMuted.value = false;\n }\n }\n\n async dispose(): Promise<void> {\n return this.stop('client:channel-dispose').then(() => {\n this._channelContext.channelDisposables.dispose();\n this._stateContext.isDisposed = true;\n });\n }\n\n getUri(token: EncodedEdgeToken): URL {\n const url = EdgeAuthParser.parseToken(token).uri;\n\n if (url) {\n return url;\n }\n\n this._logger.info('Fall back to the default discover URI [%s]', SDK.discoveryUri.value);\n\n return new GlobalScope.value.URL(SDK.discoveryUri.value);\n }\n\n async start(): Promise<void> {\n if (this._stateContext.isDisposed) {\n throw new Error('Channel was already disposed');\n }\n\n if (this._stateContext.isStarting.value) {\n this._logger.info('Channel is already starting, skipping start');\n\n return;\n }\n\n this._stateContext.isStarting.value = true;\n\n return this.processStart();\n }\n\n private isRetryableState(): boolean {\n switch (this._channelContext.state.value) {\n case ChannelState.Error:\n case ChannelState.Reconnecting:\n case ChannelState.StandBy:\n case ChannelState.Offline:\n case ChannelState.Recovering:\n case ChannelState.TransientConfigurationError:\n case ChannelState.ConnectionError:\n case ChannelState.ClientStartError:\n return true;\n case ChannelState.Unauthorized:\n case ChannelState.GeoRestricted:\n case ChannelState.GeoBlocked:\n case ChannelState.Stopped:\n case ChannelState.Paused:\n case ChannelState.Initializing:\n case ChannelState.Starting:\n case ChannelState.Playing:\n case ChannelState.UnsupportedFeature:\n case ChannelState.ConfigurationError:\n return false;\n default:\n assertUnreachable(this._channelContext.state.value);\n }\n }\n\n private isSubscriberHealthy(): Promise<boolean> {\n if (!this._streamSubscriber) {\n return Promise.resolve(false);\n }\n\n return this._streamSubscriber.isStreamHealthy();\n }\n\n private restartOnForeground(reason: string): void {\n if (this._stateContext.isStarting.value) {\n this._logger.debug('[%s] Skipping failureCount reset and Channel restart due to Channel already starting', this._channelContext.streamId);\n\n return;\n }\n\n if (!this.isRetryableState()) {\n this._logger.debug('[%s] Skipping failureCount reset and Channel restart due to ChannelState [%s] which is not retryable', this._channelContext.streamId, ChannelState[this._channelContext.state.value]);\n\n return;\n }\n\n this._channelContext.failureCount.value = 0;\n this._logger.debug('[%s] Reset failureCount to 0 and restarting Channel due to [%s]', this._channelContext.streamId, reason);\n\n const ignored = this.start();\n }\n\n private async processStart(): Promise<void> {\n const isRecovery = this._channelContext.state.value !== ChannelState.Initializing;\n\n this._channelContext.state.value = isRecovery ? ChannelState.Recovering : ChannelState.Starting;\n this.cleanUpResources(isRecovery ? 'client:recover' : 'client:start');\n\n const token: EncodedEdgeToken = this._tokenContext.token.value;\n const listenOnStreamSetup = this._sessionTelemetry.listenOnStreamSetup();\n\n if (!EdgeAuthParser.isEncodedEdgeTokenValid(token)) {\n this._logger.error('Failed to parse token [%s]', token);\n this._channelContext.state.value = ChannelState.Unauthorized;\n this._channelContext.authorized.value = false;\n this._stateContext.isStarting.value = false;\n\n return;\n }\n\n if (this._streamTransformContext.videoStreamTransformCallback) {\n const {valid, validationResult} = StreamTrackTransform.validateMediaStreamTrackTransform<VideoFrame>('video', this._streamTransformContext.videoStreamTransformCallback);\n\n if (!valid) {\n this._logger.error(validationResult);\n this._channelContext.state.value = ChannelState.ConfigurationError;\n this._channelContext.authorized.value = false;\n this._stateContext.isStarting.value = false;\n\n return;\n }\n }\n\n if (this._streamTransformContext.audioStreamTransformCallback) {\n const {valid, validationResult} = StreamTrackTransform.validateMediaStreamTrackTransform<AudioData>('audio', this._streamTransformContext.audioStreamTransformCallback);\n\n if (!valid) {\n this._logger.error(validationResult);\n this._channelContext.state.value = ChannelState.ConfigurationError;\n this._channelContext.authorized.value = false;\n this._stateContext.isStarting.value = false;\n\n return;\n }\n }\n\n if (this._streamTransformContext.encodedVideoStreamSink) {\n const {valid, validationResult} = EncodedStreamSink.validateEncodedStreamSink('video', this._streamTransformContext.encodedVideoStreamSink);\n\n if (!valid) {\n this._logger.error(validationResult);\n this._channelContext.state.value = ChannelState.ConfigurationError;\n this._channelContext.authorized.value = false;\n this._stateContext.isStarting.value = false;\n\n return;\n }\n }\n\n if (this._streamTransformContext.encodedAudioStreamSink) {\n const {valid, validationResult} = EncodedStreamSink.validateEncodedStreamSink('audio', this._streamTransformContext.encodedAudioStreamSink);\n\n if (!valid) {\n this._logger.error(validationResult);\n this._channelContext.state.value = ChannelState.ConfigurationError;\n this._channelContext.authorized.value = false;\n this._stateContext.isStarting.value = false;\n\n return;\n }\n }\n\n if (this._streamTransformContext.hasInsertableStreams.value && this._streamTransformContext.hasEncodedInsertableStreams.value) {\n this._logger.error('Both insertable-streams and encoded-insertable-streams are enabled, only use one or the other');\n this._channelContext.state.value = ChannelState.ConfigurationError;\n this._channelContext.authorized.value = false;\n this._stateContext.isStarting.value = false;\n\n return;\n }\n\n const hasTransformStreamCallback = typeof this._streamTransformContext.videoStreamTransformCallback === 'function' || typeof this._streamTransformContext.audioStreamTransformCallback === 'function';\n const hasEncodedStreamSink = typeof this._streamTransformContext.encodedVideoStreamSink === 'function' || typeof this._streamTransformContext.encodedAudioStreamSink === 'function';\n\n if (hasTransformStreamCallback && hasEncodedStreamSink) {\n this._logger.error('Both Media Stream Track transform callback and encodedInsertableStreams sink function found, only use one type or the other');\n this._channelContext.state.value = ChannelState.ConfigurationError;\n this._channelContext.authorized.value = false;\n this._stateContext.isStarting.value = false;\n\n return;\n }\n\n if (this._streamTransformContext.hasInsertableStreams.value) {\n if (!FeatureEnablement.isInsertableStreamsSupported) {\n this._logger.error('Browser does not support Media Stream Track API');\n this._channelContext.state.value = ChannelState.UnsupportedFeature;\n this._channelContext.authorized.value = false;\n this._stateContext.isStarting.value = false;\n\n return;\n }\n\n if (!hasTransformStreamCallback) {\n this._logger.error('CreateChannelOptions transform callback function is missing; however, insertable-streams is enabled');\n this._channelContext.state.value = ChannelState.ConfigurationError;\n this._channelContext.authorized.value = false;\n this._stateContext.isStarting.value = false;\n\n return;\n }\n } else {\n if (hasTransformStreamCallback) {\n this._logger.error(`CreateChannelOptions transform callback function found; however, insertable-streams is not enabled`);\n this._channelContext.state.value = ChannelState.ConfigurationError;\n this._channelContext.authorized.value = false;\n this._stateContext.isStarting.value = false;\n\n return;\n }\n }\n\n if (this._streamTransformContext.hasEncodedInsertableStreams.value) {\n if (!(FeatureEnablement.isEncodedInsertableStreamsSupported || FeatureEnablement.isRTCRtpScriptTransformSupported)) {\n this._logger.error('Browser does not support encodedInsertableStreams API');\n this._channelContext.state.value = ChannelState.UnsupportedFeature;\n this._channelContext.authorized.value = false;\n this._stateContext.isStarting.value = false;\n\n return;\n }\n\n if (!hasEncodedStreamSink) {\n this._logger.error('CreateChannelOptions transform sink function is missing; however, encoded-insertable-streams is enabled');\n this._channelContext.state.value = ChannelState.ConfigurationError;\n this._channelContext.authorized.value = false;\n this._stateContext.isStarting.value = false;\n\n return;\n }\n } else {\n if (hasEncodedStreamSink) {\n this._logger.error(`CreateChannelOptions transform sink function found; however, encoded-insertable-streams is not enabled`);\n this._channelContext.state.value = ChannelState.ConfigurationError;\n this._channelContext.authorized.value = false;\n this._stateContext.isStarting.value = false;\n\n return;\n }\n }\n\n this._channelContext.loading.value = true;\n\n const uri = this.getUri(token);\n\n this._channelContext.disposables.add(\n this._channelContext.state.subscribe(state => {\n if (state === ChannelState.Error || state === ChannelState.Recovering) {\n Discovery.clearCachedClosestEndpoint(uri);\n }\n })\n );\n\n const handleStreamFailureCallback: () => Promise<void> = () => new Promise((resolve): void => {\n if (!this.isRetryableState()) {\n this._logger.debug('[%s] Ignoring stream failure callback due to ChannelState being [%s]', this._channelContext.streamId, ChannelState[this._channelContext.state.value]);\n\n return resolve();\n }\n\n this._stateContext.isStarting.value = false;\n this._channelContext.state.value = ChannelState.ConnectionError;\n\n if (this._channelContext.videoElement.value) {\n this._channelContext.videoElement.value.pause();\n this._channelContext.videoElement.value.srcObject = null;\n }\n\n this._channelContext.playing.value = false;\n this._channelContext.loading.value = true;\n\n if (!SDK.applicationActivityMonitor!.isForeground.value) {\n this._logger.debug('[%s] Deferring stream failure handling to foreground recovery', this._channelContext.streamId);\n\n const timeoutId = GlobalScope.value.setTimeout(() => {\n const ignored = this.handleStreamFailure()\n .catch(e => {\n this._logger.error('Failed handling stream failure', e);\n });\n }, backgroundRecoveryFailsafeIntervalInMilliseconds);\n\n this._channelContext.disposables.add(new Disposable(() => {\n GlobalScope.value.clearTimeout(timeoutId);\n }));\n\n return resolve();\n }\n\n return resolve(this.handleStreamFailure());\n });\n\n this._streamSubscriber = StreamSubscriberFactory.create(token, this._channelContext, this._peerConnectionContext, this._streamTransformContext, this._frameTimingInformationContext, handleStreamFailureCallback);\n\n if (!this._streamSubscriber) {\n this._stateContext.isStarting.value = false;\n\n return;\n }\n\n this._channelContext.rendererDisposables.add(this._streamSubscriber);\n\n return this._streamSubscriber.start(\n uri,\n token,\n listenOnStreamSetup,\n this.playMediaStreamInVideoElement.bind(this))\n .then(() => {\n this._channelContext.loading.value = false;\n })\n .catch(e => {\n listenOnStreamSetup.fail();\n\n this._channelContext.failureCount.value++;\n\n this._channelContext.online.value = false;\n\n this.cleanUpResources('client:cleanup-after-failed-setup');\n\n this._channelContext.state.value = ChannelState.ClientStartError;\n\n this._logger.error('Failed to start channel', e);\n })\n .finally(() => {\n this._stateContext.isStarting.value = false;\n\n if (this._channelContext.state.value === ChannelState.Playing || this._channelContext.state.value === ChannelState.Paused || this._channelContext.state.value === ChannelState.Stopped || !SDK.automaticRetryOnFailure) {\n return;\n }\n\n const timeoutId = GlobalScope.value.setTimeout(() => {\n const ignored = this.handleStreamFailure()\n .catch(e => {\n this._logger.error('Failed handling stream failure', e);\n });\n }, this.getRetryInterval());\n\n this._channelContext.disposables.add(new Disposable(() => {\n GlobalScope.value.clearTimeout(timeoutId);\n }));\n });\n }\n\n private async restartAfterStop(): Promise<void> {\n if (this._stateContext.isDisposed) {\n throw new Error('Channel was already disposed');\n }\n\n if (this._peerConnectionContext.mediaStream.value) {\n return this.playMediaStreamInVideoElement(this._peerConnectionContext.mediaStream.value);\n }\n\n if (this._tokenContext.token.value) {\n const ignored = this.start();\n }\n }\n\n public async play(): Promise<void> {\n const mediaStream = this._peerConnectionContext.mediaStream.value;\n\n if (!mediaStream) {\n return this.start();\n }\n\n return this.playMediaStreamInVideoElement(mediaStream);\n }\n\n private getRetryInterval(): number {\n switch (this._channelContext.state.value) {\n case ChannelState.Initializing:\n case ChannelState.StandBy:\n case ChannelState.Offline:\n return standbyPollingIntervalInMilliseconds;\n case ChannelState.Error:\n case ChannelState.Recovering:\n case ChannelState.Unauthorized:\n case ChannelState.GeoRestricted:\n case ChannelState.GeoBlocked:\n case ChannelState.Stopped:\n case ChannelState.Starting:\n case ChannelState.Playing:\n case ChannelState.Paused:\n case ChannelState.Reconnecting:\n case ChannelState.UnsupportedFeature:\n case ChannelState.ConfigurationError:\n case ChannelState.TransientConfigurationError:\n case ChannelState.ConnectionError:\n case ChannelState.ClientStartError:\n // First and second attempt fast, after that exponential with backoff interval\n return this._exponentialBackoff.getExponentialBackoffIntervalByFailureCount(this._channelContext.failureCount.value);\n default:\n assertUnreachable(this._channelContext.state.value);\n }\n }\n\n private async handleStreamFailure(): Promise<void> {\n switch (this._channelContext.state.value) {\n case ChannelState.Error:\n case ChannelState.Reconnecting:\n case ChannelState.StandBy:\n case ChannelState.Offline:\n case ChannelState.Recovering:\n case ChannelState.TransientConfigurationError:\n case ChannelState.ConnectionError:\n case ChannelState.ClientStartError:\n this._logger.info('Retry start with initial state [%s] [%s]', this._channelContext.state.value, ChannelState[this._channelContext.state.value]);\n\n break;\n case ChannelState.Unauthorized:\n this._logger.info('Channel is unauthorized, skipping retry of start. Please provide a new token and invoke start()');\n\n return;\n case ChannelState.GeoRestricted:\n this._logger.info('Channel is geo restricted, skipping retry of start. Please provide a new token and invoke start()');\n\n return;\n case ChannelState.GeoBlocked:\n this._logger.info('Channel is geo blocked, skipping retry of start. Please provide a new token and invoke start()');\n\n return;\n case ChannelState.Stopped:\n this._logger.info('Channel is stopped, skipping retry of start.');\n\n return;\n case ChannelState.Initializing:\n this._logger.info('Channel is already initializing, skipping retry of start');\n\n return;\n case ChannelState.Playing:\n this._logger.info('Channel is playing, skipping retry of start');\n\n return;\n case ChannelState.Paused:\n this._logger.info('Channel is paused, skipping retry of start. Please invoke play()');\n\n return;\n case ChannelState.Starting:\n this._logger.info('Channel is already starting, skipping retry of start');\n\n return;\n case ChannelState.UnsupportedFeature:\n this._logger.info('Channel is stopped due to unsupported feature, skipping retry of start.');\n\n return;\n case ChannelState.ConfigurationError:\n this._logger.info('Channel is stopped due to configuration error, skipping retry of start.');\n\n return;\n default:\n assertUnreachable(this._channelContext.state.value);\n }\n\n return this.start();\n }\n\n private cleanUpResources(reason: string = defaultStreamTerminationReason): void {\n this._streamSubscriber = null;\n this._channelContext.disposables.dispose();\n\n const peerConnection = this._peerConnectionContext.peerConnection.value;\n\n if (peerConnection) {\n this._peerConnectionContext.peerConnection.value = null;\n peerConnection.close();\n peerConnection.dispose();\n\n if (SDK.forceGarbageCollectionOnRestart && !(FeatureEnablement.isMobile && SDK.skipGarbageCollectionOnMobileDevices)) {\n GarbageCollectorManager.forceGarbageCollection();\n }\n }\n\n if (this._peerConnectionContext.mediaStream.value) {\n this._peerConnectionContext.mediaStream.value.getTracks().forEach(track => track.stop());\n this._peerConnectionContext.mediaStream.value = null;\n }\n\n this._channelContext.autoPaused.value = false;\n this._channelContext.autoMuted.value = false;\n this._channelContext.playing.value = false;\n this._channelContext.stopped.value = true;\n this._channelContext.standby.value = false;\n\n if (this._channelContext.stream.value && this._channelContext.endPoint.value) {\n const ignored = this._channelContext.endPoint.value.destroyStream(this._channelContext.stream.value, reason)\n .then(({status}) => {\n if (status !== 'ok') {\n this._logger.warn('[%s] Failed to destroy stream with reason [%s]', this.streamId, status);\n\n return;\n }\n\n this._logger.info('[%s] Destroyed stream with reason [%s]', this.streamId, status);\n })\n .catch(e => {\n this._logger.error('[%s] Failed to destroy stream', this.streamId, e);\n });\n }\n\n if (this.videoElement && this.videoElement.dataset) {\n this.videoElement.dataset.sessionId = '';\n this.videoElement.dataset.streamId = '';\n }\n\n this._channelContext.stream.value = null;\n this._channelContext.endPoint.value = null;\n this._peerConnectionContext.peerConnectionReconnectAttempts = 0;\n }\n\n private configureFrameTimingInformation(capabilities: string[]): void {\n const frameTimingInformationCapability = capabilities.find(capability => capability.startsWith('frame-timing-information='));\n\n this._frameTimingInformationContext.shouldExtractTimecode.value = false;\n this._frameTimingInformationContext.shouldExtractTimestamps.value = false;\n this._frameTimingInformationContext.isEnabled.value = false;\n\n if (!frameTimingInformationCapability) {\n this._logger.info('Disabling frame timing information as no capability was found');\n\n return;\n }\n\n if (!FeatureEnablement.isChannelFrameTimingInformationSupported) {\n this._logger.info('Disabling frame timing information as the environment does not support it [%s]', frameTimingInformationCapability);\n\n return;\n }\n\n frameTimingInformationCapability.split('=')[1]\n .split(',')\n .map(option => option.trim())\n .forEach(option => {\n switch (option) {\n case 'timecode':\n this._frameTimingInformationContext.shouldExtractTimecode.value = true;\n\n break;\n case 'timestamps':\n this._frameTimingInformationContext.shouldExtractTimestamps.value = true;\n\n break;\n default:\n this._logger.info('Ignoring unknown frame timing information option [%s]', option);\n\n break;\n }\n });\n\n this._logger.info('Frame timing information configuration [(timecode [%s], timestamps [%s])]', this._frameTimingInformationContext.shouldExtractTimecode.value, this._frameTimingInformationContext.shouldExtractTimestamps.value);\n }\n\n private async playMediaStreamInVideoElement(mediaStream: MediaStream): Promise<void> {\n const videoElement = this._channelContext.videoElement.value;\n\n if (!videoElement) {\n this._channelContext.autoMuted.value = false;\n this._channelContext.autoPaused.value = false;\n this._channelContext.loading.value = false;\n this._channelContext.playing.value = false;\n this._channelContext.state.value = ChannelState.Stopped;\n\n return;\n }\n\n if (!this._streamTransformContext.hasEncodedInsertableStreams.value) {\n videoElement.srcObject = mediaStream;\n }\n\n const playPromise = videoElement.play();\n\n if (playPromise === undefined) {\n this._channelContext.autoMuted.value = false;\n this._channelContext.autoPaused.value = false;\n this._channelContext.loading.value = false;\n this._channelContext.playing.value = true;\n this._channelContext.state.value = ChannelState.Playing;\n\n return;\n }\n\n return playPromise.then(() => {\n this._channelContext.autoMuted.value = false;\n this._channelContext.autoPaused.value = false;\n this._channelContext.loading.value = false;\n this._channelContext.playing.value = true;\n this._channelContext.state.value = ChannelState.Playing;\n }).catch(e => {\n const hasAudioTrack = !!mediaStream.getTracks().filter(track => {\n return track.kind === 'audio';\n }).length;\n const automaticallyMuteVideoOnPlayFailureOff = !SDK.automaticallyMuteVideoOnPlayFailure;\n\n if (automaticallyMuteVideoOnPlayFailureOff || videoElement.muted || !hasAudioTrack) {\n videoElement.srcObject = null;\n this._channelContext.autoMuted.value = false;\n this._channelContext.autoPaused.value = true;\n this._channelContext.loading.value = false;\n this._channelContext.playing.value = false;\n this._channelContext.state.value = ChannelState.Paused;\n\n if (automaticallyMuteVideoOnPlayFailureOff) {\n this._logger.info('[%s] Paused video after play failed. Manual user action required.', this.streamId, e);\n\n return;\n }\n\n if (hasAudioTrack) {\n this._logger.info('[%s] Failed to play video. Manual user action required.', this.streamId, e);\n\n return;\n }\n\n this._logger.info('[%s] Failed to play muted video. Manual user action required.', this.streamId, e);\n\n return;\n }\n\n videoElement.muted = true;\n\n return videoElement.play()\n .then(() => {\n this._logger.info('[%s] Played video after auto muting. Manual user action required to unmute.', this.streamId);\n\n this._channelContext.autoMuted.value = true;\n this._channelContext.autoPaused.value = false;\n this._channelContext.loading.value = false;\n this._channelContext.playing.value = true;\n this._channelContext.state.value = ChannelState.Playing;\n }).catch(e => {\n videoElement.muted = false;\n\n this._logger.info('[%s] Failed to play video. Manual user action required.', this.streamId, e);\n\n videoElement.srcObject = null;\n this._channelContext.autoMuted.value = false;\n this._channelContext.autoPaused.value = true;\n this._channelContext.loading.value = false;\n this._channelContext.playing.value = false;\n this._channelContext.state.value = ChannelState.Paused;\n });\n });\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport {Millisecond} from '../../units/Units';\nimport {EncodedEdgeToken} from '../../edgeAuth/EncodedEdgeToken';\nimport FeatureEnablement from '../../environment/FeatureEnablement';\nimport SDK from '../SDK';\nimport {IEncodedStreamSink} from '../transformation/EncodedStreamSink';\nimport {IStreamTrackTransform} from '../transformation/StreamTrackTransform';\nimport Channel, {ChannelOptions} from './Channel';\nimport {IOnRealTimeSubscribeRequestCallback} from './IOnRealTimeSubscribeRequestCallback';\nimport {IOnRealTimeSubscribeResponseCallback} from './IOnRealTimeSubscribeResponseCallback';\n\nexport type CreateChannelOptions = {\n videoElement: HTMLVideoElement;\n token: EncodedEdgeToken;\n targetLag?: Millisecond;\n videoStreamTransformCallback?: IStreamTrackTransform<VideoFrame>;\n audioStreamTransformCallback?: IStreamTrackTransform<AudioData>;\n encodedVideoStreamSink?: IEncodedStreamSink<RTCEncodedVideoFrame>;\n encodedAudioStreamSink?: IEncodedStreamSink<RTCEncodedAudioFrame>;\n};\n\nexport default class Channels {\n static createChannel(options: CreateChannelOptions): Channel {\n if (!SDK.initialized.value) {\n throw new Error('SDK is not loaded.');\n }\n\n const channelOptions: ChannelOptions = {\n targetLag: options.targetLag,\n videoStreamTransformCallback: options.videoStreamTransformCallback,\n audioStreamTransformCallback: options.audioStreamTransformCallback,\n encodedVideoStreamSink: options.encodedVideoStreamSink,\n encodedAudioStreamSink: options.encodedAudioStreamSink\n };\n const optionsWithRealTimeSubscribeCallbacks: ChannelOptions & {\n onRealTimeSubscribeRequestCallback?: IOnRealTimeSubscribeRequestCallback;\n onRealTimeSubscribeResponseCallback?: IOnRealTimeSubscribeResponseCallback;\n } = options;\n\n if (optionsWithRealTimeSubscribeCallbacks.onRealTimeSubscribeRequestCallback) {\n channelOptions.onRealTimeSubscribeRequestCallback = optionsWithRealTimeSubscribeCallbacks.onRealTimeSubscribeRequestCallback;\n }\n\n if (optionsWithRealTimeSubscribeCallbacks.onRealTimeSubscribeResponseCallback) {\n channelOptions.onRealTimeSubscribeResponseCallback = optionsWithRealTimeSubscribeCallbacks.onRealTimeSubscribeResponseCallback;\n }\n\n return new Channel(options.videoElement, options.token, channelOptions);\n }\n\n public static get isFrameTimingInformationSupported(): boolean {\n return FeatureEnablement.isChannelFrameTimingInformationSupported;\n }\n\n private constructor() {\n throw new Error('Channels is a static class that may not be instantiated');\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nenum PublisherState {\n Initializing = 0,\n Offline = 1,\n Starting = 2,\n Publishing = 3,\n Recovering = 4,\n Reconnecting = 5,\n Stopped = 6,\n Unauthorized = 7,\n GeoRestricted = 8,\n GeoBlocked = 9,\n UnsupportedFeature = 10,\n NotFound = 11,\n ConfigurationError = 12,\n TransientConfigurationError = 13,\n ConnectionError = 14,\n ClientStartError = 15,\n Error = 16\n}\n\nexport default PublisherState;","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport Subject from '../../rx/Subject';\nimport PublisherState from './PublisherState';\nimport EndPoint, {\n IStream,\n AddIceCandidatesStatus,\n SetRemoteDescriptionStatus\n} from '../discovery/EndPoint';\nimport assertUnreachable from '../../lang/assertUnreachable';\nimport Strings from '../../lang/Strings';\nimport DisposableList from '../../lang/DisposableList';\nimport {IRtcPublishMonitorStatistic} from '../../rtc/RtcPublishMonitor';\nimport {PublishStatus} from '../api/Publish';\n\nexport default class PublisherContext {\n publisherInitialization: Date;\n disposables: DisposableList;\n publisherDisposables: DisposableList;\n state: Subject<PublisherState>;\n authorized: Subject<boolean>;\n online: Subject<boolean>;\n loading: Subject<boolean>;\n publishing: Subject<boolean>;\n standby: Subject<boolean>;\n stopped: Subject<boolean>;\n failureCount: Subject<number>;\n endPoint: Subject<EndPoint | null>;\n stream: Subject<IStream | null>;\n rtcStatistics: Subject<IRtcPublishMonitorStatistic | null>;\n clearFailureCountTimeout: number;\n startReconnectionAttemptsTimeInMilliseconds: number;\n name: string;\n\n constructor(name?: string) {\n this.disposables = new DisposableList();\n this.publisherDisposables = new DisposableList();\n this.publisherInitialization = new Date();\n this.state = new Subject<PublisherState>(PublisherState.Initializing);\n this.authorized = new Subject<boolean>(true);\n this.online = new Subject<boolean>(true);\n this.loading = new Subject<boolean>(false);\n this.publishing = new Subject<boolean>(false);\n this.standby = new Subject<boolean>(false);\n this.stopped = new Subject<boolean>(false);\n this.failureCount = new Subject<number>(0);\n this.endPoint = new Subject<EndPoint | null>(null);\n this.stream = new Subject<IStream | null>(null);\n this.rtcStatistics = new Subject<IRtcPublishMonitorStatistic | null>(null);\n this.clearFailureCountTimeout = 0;\n this.name = name && name.length ? name : this.generateScreenName();\n this.startReconnectionAttemptsTimeInMilliseconds = 0;\n }\n\n get streamId(): string {\n const stream = this.stream.value;\n\n if (!stream) {\n return '-';\n }\n\n return stream.streamId;\n }\n\n applyPublishStatus(status: PublishStatus): void {\n switch (status) {\n case 'ok':\n return;\n case 'unauthorized':\n case 'geo-restricted':\n case 'geo-blocked':\n this.applyUnauthorized();\n\n return;\n case 'not-found':\n this.applyNotFound();\n\n return;\n default:\n this.applyUnhandledError();\n\n return;\n }\n }\n\n applySetRemoteDescriptionStatus(status: SetRemoteDescriptionStatus): void {\n switch (status) {\n case 'ok':\n return;\n case 'unauthorized':\n this.applyUnauthorized();\n\n return;\n case 'not-found':\n this.applyNotFound();\n\n return;\n default:\n this.applyUnhandledError();\n\n return;\n }\n }\n\n applyAddIceCandidatesStatus(status: AddIceCandidatesStatus): void {\n switch (status) {\n case 'ok':\n return;\n case 'unauthorized':\n this.applyUnauthorized();\n\n return;\n case 'not-found':\n this.applyNotFound();\n\n return;\n default:\n this.applyUnhandledError();\n\n return;\n }\n }\n\n mapPublishStatusToPublisherStatus(status: PublishStatus): PublisherState {\n switch (status) {\n case 'ok':\n return PublisherState.Starting;\n case 'not-found':\n return PublisherState.NotFound;\n case 'geo-restricted':\n return PublisherState.GeoRestricted;\n case 'geo-blocked':\n return PublisherState.GeoBlocked;\n case 'unauthorized':\n return PublisherState.Unauthorized;\n case 'capacity':\n case 'rate-limited':\n case 'timeout':\n return PublisherState.Recovering;\n case 'missing-channel-or-room-id':\n case 'forbidden-tag':\n return PublisherState.ConfigurationError;\n case 'port-in-range-not-found':\n return PublisherState.TransientConfigurationError;\n case 'failed':\n return PublisherState.Error;\n default:\n assertUnreachable(status);\n }\n }\n\n applyUnhandledError(): void {\n this.failureCount.value++;\n this.publishing.value = false;\n this.standby.value = true;\n this.stopped.value = false;\n this.stream.value = null;\n }\n\n applyUnauthorized(): void {\n this.authorized.value = false;\n this.failureCount.value = 0;\n this.publishing.value = false;\n this.standby.value = true;\n this.stopped.value = false;\n this.stream.value = null;\n }\n\n applyNotFound(): void {\n this.failureCount.value = 0;\n this.publishing.value = false;\n this.standby.value = true;\n this.stopped.value = false;\n this.stream.value = null;\n }\n\n private generateScreenName(): string {\n return Strings.random(12);\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport GlobalScope from '../globalScope/GlobalScope';\nimport IDisposable from '../lang/IDisposable';\nimport DisposableList from '../lang/DisposableList';\nimport FeatureEnablement from '../environment/FeatureEnablement';\nimport LoggerFactory from '../logger/LoggerFactory';\nimport {ILogger} from '../logger/LoggerInterface';\nimport Subject from '../rx/Subject';\nimport ReadOnlySubject from '../rx/ReadOnlySubject';\nimport IPeerConnection from './IPeerConnection';\nimport SdpParser from './SdpParser';\n\nexport interface IRtcPublishMonitorStatistic {\n [kind: string]: IRtcPublishStatistic;\n}\n\nexport interface ILegacyRTCStatsReport {\n result: () => ILegacyRTCStatsReportItem[];\n}\n\nexport interface ILegacyRTCStatsReportItem extends RTCStatsReport {\n type: string;\n names: () => string[];\n stat: (name: string) => number;\n}\n\nexport interface IRtcPublishStatistic {\n lastPacketSentTimestamp?: number;\n ssrc: string;\n mediaType: string;\n timestamp: number;\n bitrate?: number;\n bytesSent: number;\n packetsSent: number;\n retransmittedBytesSent?: number;\n firCount?: number;\n frameHeight?: number;\n frameWidth?: number;\n framesEncoded?: number;\n framesSent?: number;\n headerBytesSent?: number;\n hugeFramesSent?: number;\n pliCount?: number;\n qpSum?: number;\n totalEncodeTime?: number;\n totalEncodedBytesTarget?: number;\n codec: string;\n fps?: number;\n roundTripTime: number;\n}\n\nconst updateStatisticTimeout = 1000;\nconst getStatsTimeoutDuration = 5000;\n\nexport default class RtcPublishMonitor implements IDisposable {\n private readonly _logger: ILogger = LoggerFactory.getLogger('RtcPublishMonitor');\n private readonly _estimatedRoundTripTime: number;\n private readonly _estimatedVideoCodec: string = 'unknown';\n private readonly _estimatedAudioCodec: string = 'unknown';\n private readonly _rtcStatistic: Subject<IRtcPublishMonitorStatistic> = new Subject<IRtcPublishMonitorStatistic>({});\n private readonly _disposables: DisposableList = new DisposableList();\n private _peerConnection: IPeerConnection | null;\n private _isMonitorRunning = true;\n private _updateTimeout: number | undefined = undefined;\n private _monitorGeneration = 0;\n private _availableTracks: {\n audio: boolean;\n video: boolean;\n } | null = null;\n\n constructor(peerConnection: IPeerConnection, estimatedRoundTripTime: number, isForeground: ReadOnlySubject<boolean>) {\n this._peerConnection = peerConnection;\n this._estimatedRoundTripTime = estimatedRoundTripTime;\n\n if (this._peerConnection && this._peerConnection?.currentLocalDescription?.sdp && this._peerConnection?.currentRemoteDescription?.sdp) {\n const parsedLocalDescription = new SdpParser(this._peerConnection.currentLocalDescription.sdp);\n const parsedRemoteDescription = new SdpParser(this._peerConnection.currentRemoteDescription.sdp);\n\n this._estimatedAudioCodec = parsedRemoteDescription.audioCodec;\n this._estimatedVideoCodec = parsedRemoteDescription.videoCodec;\n\n this._availableTracks = {\n audio: parsedLocalDescription.isAudioTrackEnabled && parsedRemoteDescription.isAudioTrackEnabled,\n video: parsedLocalDescription.isVideoTrackEnabled && parsedRemoteDescription.isVideoTrackEnabled\n };\n\n let isInitialSubscriptionCallback = true;\n\n this._disposables.add(\n isForeground.subscribe(foreground => {\n if (isInitialSubscriptionCallback) {\n isInitialSubscriptionCallback = false;\n\n return;\n }\n\n if (!foreground || !this._isMonitorRunning) {\n return;\n }\n\n // Invalidate any in-flight poll from before the freeze\n this._monitorGeneration++;\n GlobalScope.value.clearTimeout(this._updateTimeout);\n\n this._logger.debug('Restarting stats polling after foreground transition');\n this.updateStatistic();\n })\n );\n\n this.updateStatistic();\n }\n }\n\n get rtcStatistic(): Subject<IRtcPublishMonitorStatistic> {\n return this._rtcStatistic;\n }\n\n public dispose(): void {\n this._monitorGeneration++;\n this._isMonitorRunning = false;\n this._peerConnection = null;\n this._disposables.dispose();\n GlobalScope.value.clearTimeout(this._updateTimeout);\n this._updateTimeout = undefined;\n }\n\n private async updateStatistic(): Promise<void> {\n if (FeatureEnablement.getStatsPromiseBasedDisabled) {\n const ignored = {\n audio: 0,\n video: 0\n };\n\n return;\n }\n\n const generation = this._monitorGeneration;\n // Safari 11 doesnt have kind or mediaType so we need to take it from the inbound-rtp object id\n const getKindForSafari11 = (item: {id: string}): string => item.id.includes('Audio') ? 'audio' : item.id.includes('Video') ? 'video' : '';\n let timeoutHandle: number | undefined;\n\n try {\n const statsPromise = this._peerConnection?.getStats(null);\n\n if (!statsPromise) {\n return;\n }\n\n const timeoutPromise = new Promise<undefined>(resolve => {\n timeoutHandle = GlobalScope.value.setTimeout(() => resolve(undefined), getStatsTimeoutDuration);\n });\n const stats = await Promise.race([statsPromise, timeoutPromise]);\n\n if (generation !== this._monitorGeneration || !this._isMonitorRunning) {\n return;\n }\n\n if (!stats) {\n this._logger.debug('getStats() timed out, skipping stats processing');\n } else {\n const rtcStatistics: IRtcPublishMonitorStatistic = {};\n let roundTripTime = this._estimatedRoundTripTime;\n let lastPacketSentTimestamp: number | undefined;\n\n stats.forEach(report => {\n if (report.type === 'candidate-pair' && report.currentRoundTripTime) {\n roundTripTime = report.currentRoundTripTime * 1000;\n\n if (rtcStatistics['audio']) {\n rtcStatistics['audio'].roundTripTime = roundTripTime;\n }\n\n if (rtcStatistics['video']) {\n rtcStatistics['video'].roundTripTime = roundTripTime;\n }\n }\n\n if (report.type === 'candidate-pair' && report.lastPacketSentTimestamp) {\n lastPacketSentTimestamp = report.lastPacketSentTimestamp;\n\n if (rtcStatistics['audio']) {\n rtcStatistics['audio'].lastPacketSentTimestamp = lastPacketSentTimestamp;\n }\n\n if (rtcStatistics['video']) {\n rtcStatistics['video'].lastPacketSentTimestamp = lastPacketSentTimestamp;\n }\n }\n\n if (report.type === 'outbound-rtp') {\n const kind: 'video' | 'audio' | undefined = report.kind || report.mediaType || getKindForSafari11(report);\n let codec = '';\n\n stats.forEach(item => {\n if (item.id === report.codecId) {\n codec = item.mimeType;\n }\n });\n\n if (kind && this._availableTracks?.[kind]) {\n const bytes = report.bytesSent || 0;\n const previousBytesSent = this._rtcStatistic.value?.[kind]?.bytesSent ?? 0;\n const bytesDelta = bytes - previousBytesSent;\n const timeDelta = report.timestamp - this._rtcStatistic.value?.[kind]?.timestamp;\n const bitrate = bytesDelta && timeDelta ? Math.floor(8 * bytesDelta /\n timeDelta * 1000) : 0;\n\n rtcStatistics[kind] = {\n ssrc: report.ssrc,\n mediaType: kind,\n timestamp: report.timestamp,\n bitrate,\n bytesSent: report.bytesSent,\n packetsSent: report.packetsSent,\n retransmittedBytesSent: report.retransmittedBytesSent,\n codec: codec || this.getCodecByType(kind),\n roundTripTime\n };\n\n if (report.lastPacketSentTimestamp || lastPacketSentTimestamp) {\n rtcStatistics[kind].lastPacketSentTimestamp = report.lastPacketSentTimestamp || lastPacketSentTimestamp;\n }\n\n if (kind === 'video') {\n rtcStatistics[kind]['firCount'] = report.firCount;\n rtcStatistics[kind]['frameHeight'] = report.frameHeight;\n rtcStatistics[kind]['frameWidth'] = report.frameWidth;\n rtcStatistics[kind]['framesEncoded'] = report.framesEncoded;\n rtcStatistics[kind]['framesSent'] = report.framesSent;\n rtcStatistics[kind]['headerBytesSent'] = report.headerBytesSent;\n rtcStatistics[kind]['hugeFramesSent'] = report.hugeFramesSent;\n rtcStatistics[kind]['pliCount'] = report.pliCount;\n rtcStatistics[kind]['qpSum'] = report.qpSum;\n rtcStatistics[kind]['totalEncodeTime'] = report.totalEncodeTime;\n rtcStatistics[kind]['totalEncodedBytesTarget'] = report.totalEncodedBytesTarget;\n\n if (this._rtcStatistic.value?.video?.framesEncoded) {\n const fps = (report.framesEncoded - this._rtcStatistic.value.video.framesEncoded) /\n (rtcStatistics[kind].timestamp - this._rtcStatistic.value.video.timestamp) *\n 1000;\n\n rtcStatistics[kind]['fps'] = fps ? Math.round(fps * 100) / 100 : 0;\n }\n }\n }\n }\n });\n\n this._rtcStatistic.value = rtcStatistics;\n }\n } catch (error) {\n if (generation !== this._monitorGeneration || !this._isMonitorRunning) {\n return;\n }\n\n this._logger.warn('getStats() rejected', error);\n } finally {\n GlobalScope.value.clearTimeout(timeoutHandle);\n }\n\n if (this._isMonitorRunning && generation === this._monitorGeneration) {\n this._updateTimeout = GlobalScope.value.setTimeout(\n () => this.updateStatistic(), updateStatisticTimeout);\n }\n }\n\n private getCodecByType(type: string): string {\n switch (type) {\n case 'audio':\n return this._estimatedAudioCodec || 'unknown';\n case 'video':\n return this._estimatedVideoCodec || 'unknown';\n default:\n return 'unknown';\n }\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport GlobalScope from '../../globalScope/GlobalScope';\nimport assertUnreachable from '../../lang/assertUnreachable';\nimport Disposable from '../../lang/Disposable';\nimport {ILogger} from '../../logger/LoggerInterface';\nimport LoggerFactory from '../../logger/LoggerFactory';\nimport SDK from '../SDK';\nimport {StreamSetupListener} from '../../dom/StreamSetupListener';\nimport GarbageCollectorManager from '../../dom/GarbageCollectorManager';\nimport FeatureEnablement from '../../environment/FeatureEnablement';\nimport {AddIceCandidatesStatus, SetRemoteDescriptionStatus} from '../discovery/EndPoint';\nimport Discovery from '../discovery/Discovery';\nimport IPeerConnection from '../../rtc/IPeerConnection';\nimport PeerConnectionService from '../../rtc/PeerConnectionService';\nimport PeerConnectionContext from '../context/PeerConnectionContext';\nimport RtcPublishMonitor from '../../rtc/RtcPublishMonitor';\n\nimport RtcConfigurationManager from '../../rtc/RtcConfigurationManager';\nimport PublisherState from './PublisherState';\nimport PublisherContext from './PublisherContext';\n\nconst iceCandidateAccumulationInterval = 100;\nconst softRestartInterval = 1000;\n\nexport default class RealTimePublisher {\n private readonly _logger: ILogger = LoggerFactory.getLogger('RealTimePublisher');\n private readonly _publisherContext: PublisherContext;\n private readonly _peerConnectionContext: PeerConnectionContext;\n private readonly _handleStreamFailure: () => Promise<void>;\n\n constructor(publisherContext: PublisherContext, peerConnectionContext: PeerConnectionContext, handleStreamFailure: () => Promise<void>) {\n this._publisherContext = publisherContext;\n this._peerConnectionContext = peerConnectionContext;\n this._handleStreamFailure = handleStreamFailure;\n }\n\n start(uri: URL, token: string, listenOnStreamSetup: StreamSetupListener): Promise<void> {\n if (!GlobalScope.value.navigatorIsOnLine) {\n this._publisherContext.state.value = PublisherState.Offline;\n\n return Promise.resolve();\n }\n\n const mediaStream = this._peerConnectionContext.mediaStream.value;\n\n if (!mediaStream) {\n this._logger.error('Publish failed no media stream provided');\n this._publisherContext.state.value = PublisherState.ConfigurationError;\n\n return Promise.resolve();\n }\n\n const mediaTracks = mediaStream.getTracks();\n const trackKinds = mediaTracks.reduce((accumulator: ('audio' | 'video')[], track) => {\n if (track.kind === 'audio' || track.kind === 'video') {\n accumulator.push(track.kind);\n } else {\n this._logger.warn('[%s] Track kind is not supported', track.kind);\n }\n\n return accumulator;\n }, []);\n\n return Promise.all([\n Discovery.discoverClosestEndPointWithCaching(uri),\n PeerConnectionService.createPeerConnectionOffer('sendonly', trackKinds)\n .then(({localOffer, peerConnection}) => {\n this._peerConnectionContext.peerConnection.value = peerConnection;\n\n return {\n localOffer,\n peerConnection\n };\n })\n ])\n .then(([endPoint, {localOffer, peerConnection}]) => {\n this._publisherContext.online.value = true;\n this._publisherContext.endPoint.value = endPoint;\n this._logger.info('Connecting to [%s]', endPoint.toString());\n this._logger.info('Local offer:\\n' + localOffer.sdp);\n\n if (FeatureEnablement.clientOfferDisabled || !peerConnection.supportsSetConfiguration || !peerConnection.supportsGetConfiguration || this._publisherContext.failureCount.value > 0) {\n peerConnection.close();\n peerConnection.dispose();\n\n if (SDK.forceGarbageCollectionOnRestart && !(FeatureEnablement.isMobile && SDK.skipGarbageCollectionOnMobileDevices)) {\n GarbageCollectorManager.forceGarbageCollection();\n }\n\n this._peerConnectionContext.peerConnection.value = null;\n\n return endPoint.publish(this._publisherContext.name, token, null, this._publisherContext.failureCount.value);\n }\n\n return endPoint.publish(this._publisherContext.name, token, localOffer, this._publisherContext.failureCount.value);\n })\n .then(response => {\n const {status} = response;\n\n this._publisherContext.state.value = this._publisherContext.mapPublishStatusToPublisherStatus(status);\n\n this._publisherContext.applyPublishStatus(status);\n\n if (status !== 'ok') {\n this._publisherContext.stream.value = null;\n\n this._logger.info(\n '[%s] Publish failed with status [%s]',\n this._publisherContext.streamId,\n status\n );\n\n return;\n }\n\n const {stream, rtcConfiguration, setRemoteDescriptionResponse, createOfferDescriptionResponse, createAnswerDescriptionResponse} = response;\n\n this._publisherContext.stream.value = stream;\n\n this._logger.debug(\n '[%s] Publish completed [%s] [%j] [%j] [%j] [%j]',\n this._publisherContext.streamId,\n status,\n rtcConfiguration,\n setRemoteDescriptionResponse,\n createOfferDescriptionResponse,\n createAnswerDescriptionResponse\n );\n\n this._publisherContext.state.value = this._publisherContext.mapPublishStatusToPublisherStatus(status);\n\n this._publisherContext.applyPublishStatus(status);\n\n return this.applyRtcConfiguration(this._peerConnectionContext.peerConnection.value, rtcConfiguration as RTCConfiguration)\n .then(peerConnection => {\n let submitCandidatesTimeout: undefined | number;\n let cancelDiscovery = false;\n let discoveryCompleted = false;\n const candidates: RTCIceCandidate[] = [];\n\n this._peerConnectionContext.peerConnection.value = peerConnection;\n\n peerConnection.addStream(this._peerConnectionContext.mediaStream.value as MediaStream);\n\n peerConnection.onicecandidate = (e): void => {\n if (this._publisherContext.stream.value !== stream) {\n return;\n }\n\n if (this._peerConnectionContext.peerConnection.value !== peerConnection) {\n return;\n }\n\n if (cancelDiscovery) {\n return;\n }\n\n if (!SDK.sendLocalCandidates.value) {\n return;\n }\n\n if (e.candidate && e.candidate.candidate) {\n candidates.push(e.candidate);\n } else {\n discoveryCompleted = true;\n }\n\n if (!submitCandidatesTimeout) {\n submitCandidatesTimeout = GlobalScope.value.setTimeout(() => {\n if (this._publisherContext.stream.value !== stream) {\n return;\n }\n\n if (cancelDiscovery) {\n return;\n }\n\n const ignored = this._publisherContext.endPoint.value?.addIceCandidates(stream, candidates, discoveryCompleted)\n .then(({status, options}) => {\n if (status !== 'ok') {\n if (this._publisherContext.stream.value !== stream) {\n return;\n }\n\n if (this._peerConnectionContext.peerConnection.value !== peerConnection) {\n return;\n }\n\n this._publisherContext.state.value = this.mapAddIceCandidatesStatusToPublisherStatus(status);\n this._publisherContext.applyAddIceCandidatesStatus(status);\n\n this._logger.warn('[%s] Failed to add ICE candidates with reason [%s]', this._publisherContext.streamId, status);\n\n const ignored = this._handleStreamFailure()\n .catch(e => {\n this._logger.error(\n '[%s] Failed handling stream failure after peer connection failed to add ICE candidates with reason [%s]',\n this._publisherContext.streamId,\n status,\n e\n );\n });\n\n return;\n }\n\n if (options?.includes('cancel')) {\n cancelDiscovery = true;\n }\n\n this._logger.info('[%s] Added ICE candidates with reason [%s] and options [%s]', this._publisherContext.streamId, status, options);\n })\n .catch(e => {\n if (this._publisherContext.stream.value !== stream) {\n return;\n }\n\n if (this._peerConnectionContext.peerConnection.value !== peerConnection) {\n return;\n }\n\n this._logger.error('[%s] Failed to add ICE candidates', this._publisherContext.streamId, e);\n this._publisherContext.state.value = PublisherState.ConnectionError;\n this._publisherContext.applyUnhandledError();\n\n const ignored = this._handleStreamFailure()\n .catch(e => {\n this._logger.error(\n '[%s] Failed handling stream failure after peer connection failed to add ICE candidates',\n this._publisherContext.streamId,\n e\n );\n });\n });\n }, iceCandidateAccumulationInterval);\n }\n };\n\n peerConnection.oniceconnectionstatechange = (): void => {\n if (this._publisherContext.stream.value !== stream) {\n return;\n }\n\n if (this._peerConnectionContext.peerConnection.value !== peerConnection) {\n return;\n }\n\n const retryCallback = (): void => {\n // If we stop normally the peer connection is unregistered first.\n // Thus anytime we see a closed peer connection that is still valid, it is an error.\n this._publisherContext.state.value = PublisherState.ConnectionError;\n this._publisherContext.publishing.value = false;\n this._publisherContext.loading.value = true;\n\n const ignored = this._handleStreamFailure()\n .catch(e => {\n this._logger.error(\n '[%s] Failed handling stream failure after peer connection stopped with state [%s]',\n this._publisherContext.streamId,\n peerConnection.iceConnectionState,\n e\n );\n });\n };\n\n switch (peerConnection.iceConnectionState) {\n case 'checking':\n case 'completed':\n case 'connected':\n case 'new':\n return;\n\n case 'disconnected':\n case 'failed':\n this._logger.info('[%s] ICE connection state changed to [%s], trying to reconnect', this._publisherContext.streamId, peerConnection.iceConnectionState);\n this.reconnectPeerConnection(peerConnection, retryCallback);\n\n return;\n case 'closed':\n this._logger.info('[%s] ICE connection state changed to [%s], retrying to connect', this._publisherContext.streamId, peerConnection.iceConnectionState);\n retryCallback();\n\n return;\n default:\n assertUnreachable(peerConnection.iceConnectionState as never);\n }\n };\n\n return new Promise<void>(resolve => {\n resolve();\n }).then(() => {\n if (!setRemoteDescriptionResponse) {\n return;\n }\n\n this._logger.info('[%s] Set local SDP offer [%s]', this._publisherContext.streamId, setRemoteDescriptionResponse.sessionDescription.sdp);\n\n return peerConnection.setLocalDescription(setRemoteDescriptionResponse.sessionDescription)\n .catch(e => {\n this._logger.info('[%s] Failed to set local description [%j] with message [%s]', this._publisherContext.streamId, setRemoteDescriptionResponse.sessionDescription, e.message);\n\n throw e;\n });\n }).then(() => {\n if (!createAnswerDescriptionResponse) {\n return;\n }\n\n this._logger.info('[%s] Set remote SDP answer [%s]', this._publisherContext.streamId, createAnswerDescriptionResponse?.sessionDescription?.sdp);\n\n return peerConnection.setRemoteDescription(createAnswerDescriptionResponse.sessionDescription)\n .catch(e => {\n this._logger.info('[%s] Failed to set remote description [%j] with message [%s]', this._publisherContext.streamId, createAnswerDescriptionResponse?.sessionDescription, e.message);\n\n throw e;\n });\n }).then(() => {\n if (!createOfferDescriptionResponse) {\n return;\n }\n\n this._logger.info('[%s] Set remote SDP offer [%s]', this._publisherContext.streamId, createOfferDescriptionResponse.sessionDescription.sdp);\n\n return peerConnection.setRemoteDescription(createOfferDescriptionResponse.sessionDescription)\n .catch(e => {\n this._logger.info('[%s] Failed to set remote description [%j] with message [%s]', this._publisherContext.streamId, createAnswerDescriptionResponse?.sessionDescription, e.message);\n\n throw e;\n })\n .then(() => {\n return peerConnection.createAnswer({\n offerToReceiveAudio: false,\n offerToReceiveVideo: false\n });\n }).then(answer => {\n this._logger.info('[%s] Set local SDP answer [%s]', this._publisherContext.streamId, answer.sdp);\n\n const endPoint = this._publisherContext.endPoint.value;\n\n if (!endPoint) {\n throw new Error('Failed to set remote description, EndPoint is not set');\n }\n\n return endPoint.setRemoteDescription(stream, answer);\n }).then(({status, sessionDescription}) => {\n this._publisherContext.state.value = this.mapSetRemoteDescriptionStatusToPublisherStatus(status);\n\n this._publisherContext.applySetRemoteDescriptionStatus(status);\n\n if (status !== 'ok') {\n return;\n }\n\n this._logger.info('[%s] Set local SDP [%s]', this._publisherContext.streamId, sessionDescription?.sdp);\n\n return peerConnection.setLocalDescription(sessionDescription as RTCSessionDescription)\n .catch(e => {\n this._logger.info('[%s] Failed to set local description [%j] with message [%s]', this._publisherContext.streamId, sessionDescription, e.message);\n\n throw e;\n });\n });\n }).then(() => {\n listenOnStreamSetup.success(this._publisherContext.streamId);\n\n if (this._publisherContext.state.value !== PublisherState.Starting) {\n return Promise.resolve();\n }\n\n this._publisherContext.state.value = PublisherState.Publishing;\n\n this._publisherContext.publishing.value = true;\n\n const rtcPublishMonitor = new RtcPublishMonitor(\n peerConnection,\n this._publisherContext.endPoint.value?.roundTripTime ? this._publisherContext.endPoint.value.roundTripTime / 4 : 0,\n SDK.applicationActivityMonitor!.isForeground\n );\n\n this._publisherContext.disposables.add(rtcPublishMonitor);\n\n const ignored = rtcPublishMonitor.rtcStatistic.subscribe(statistics => {\n this._publisherContext.rtcStatistics.value = statistics;\n });\n\n return Promise.resolve();\n });\n });\n });\n }\n\n private async applyRtcConfiguration(\n optionalPeerConnection: IPeerConnection | null,\n rtcConfiguration: RTCConfiguration): Promise<IPeerConnection> {\n if (!optionalPeerConnection) {\n rtcConfiguration = RtcConfigurationManager.truncateIceServers(rtcConfiguration);\n\n return SDK.peerConnectionFactory.value.createPeerConnection(rtcConfiguration);\n }\n\n const newRtcConfiguration = {\n ...optionalPeerConnection.getConfiguration(),\n ...rtcConfiguration\n };\n\n optionalPeerConnection.setConfiguration(newRtcConfiguration);\n\n return optionalPeerConnection;\n }\n\n private reconnectPeerConnection(peerConnection: IPeerConnection, retryCallback: () => void): void {\n if (peerConnection.iceConnectionState === 'closed') {\n return;\n }\n\n this._publisherContext.state.value = PublisherState.Reconnecting;\n\n if (this._peerConnectionContext.peerConnectionReconnectAttempts < SDK.maximalNumberOfPeerConnectionReconnectAttempts || !SDK.automaticallyReconnectPeerConnection) {\n this._peerConnectionContext.peerConnectionReconnectAttempts++;\n\n const isClientOfferFlow = peerConnection.currentLocalDescription?.type === 'offer';\n\n if (FeatureEnablement.clientOfferDisabled ||\n !peerConnection.supportsSetConfiguration ||\n !peerConnection.supportsGetConfiguration ||\n !isClientOfferFlow\n ) {\n const reconnectPeerConnectionTimeout = GlobalScope.value.setTimeout(() => {\n this.reconnectPeerConnection(peerConnection, retryCallback);\n }, softRestartInterval);\n\n this._publisherContext.disposables.add(new Disposable(() => GlobalScope.value.clearTimeout(reconnectPeerConnectionTimeout)));\n\n return;\n }\n\n this._logger.info('Reconnecting peer connection by restarting ICE');\n\n const currentLocalDescription = peerConnection.currentLocalDescription;\n const ignored = peerConnection.createOffer({iceRestart: true}).then(offer => {\n return peerConnection.setLocalDescription(offer).then(() => {\n return peerConnection.setLocalDescription(currentLocalDescription)\n .then(() => {\n if (peerConnection.iceConnectionState === 'disconnected' || peerConnection.iceConnectionState === 'failed') {\n const reconnectPeerConnectionTimeout = GlobalScope.value.setTimeout(() => {\n this.reconnectPeerConnection(peerConnection, retryCallback);\n }, softRestartInterval);\n\n this._publisherContext.disposables.add(new Disposable(() => GlobalScope.value.clearTimeout(reconnectPeerConnectionTimeout)));\n } else {\n this._publisherContext.state.value = PublisherState.Publishing;\n }\n });\n });\n })\n .catch(e => {\n this._logger.error('Failed to reconnect peer connection', e);\n this._peerConnectionContext.peerConnectionReconnectAttempts = 0;\n retryCallback();\n });\n\n return;\n }\n\n this._logger.info('Failed to reconnect peer connection after [%s] attempts, performing full recovery', this._peerConnectionContext.peerConnectionReconnectAttempts);\n this._peerConnectionContext.peerConnectionReconnectAttempts = 0;\n retryCallback();\n }\n\n private mapSetRemoteDescriptionStatusToPublisherStatus(status: SetRemoteDescriptionStatus): PublisherState {\n switch (status) {\n case 'ok':\n return PublisherState.Starting;\n case 'unauthorized':\n return PublisherState.Unauthorized;\n case 'not-found':\n return PublisherState.NotFound;\n case 'capacity':\n case 'rate-limited':\n case 'timeout':\n return PublisherState.Recovering;\n case 'failed':\n return PublisherState.Error;\n default:\n assertUnreachable(status);\n }\n }\n\n private mapAddIceCandidatesStatusToPublisherStatus(status: AddIceCandidatesStatus): PublisherState {\n switch (status) {\n case 'ok':\n return this._publisherContext.state.value;\n case 'unauthorized':\n return PublisherState.Unauthorized;\n case 'not-found':\n return PublisherState.NotFound;\n case 'capacity':\n case 'rate-limited':\n case 'timeout':\n return PublisherState.Recovering;\n case 'failed':\n return PublisherState.Error;\n default:\n assertUnreachable(status);\n }\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport GlobalScope from '../../globalScope/GlobalScope';\nimport LoggerFactory from '../../logger/LoggerFactory';\nimport IDisposable from '../../lang/IDisposable';\nimport ReadOnlySubject from '../../rx/ReadOnlySubject';\nimport ExponentialBackoff from '../../time/ExponentialBackoff';\nimport EndPoint, {IStream} from '../discovery/EndPoint';\nimport SDK from '../SDK';\nimport GarbageCollectorManager from '../../dom/GarbageCollectorManager';\nimport IPeerConnection from '../../rtc/IPeerConnection';\nimport {IRtcPublishMonitorStatistic} from '../../rtc/RtcPublishMonitor';\nimport PublisherState from './PublisherState';\nimport assertUnreachable from '../../lang/assertUnreachable';\nimport Disposable from '../../lang/Disposable';\nimport {ILogger} from '../../logger/LoggerInterface';\nimport SessionTelemetry from '../../video/SessionTelemetry';\nimport EdgeAuthParser from '../../edgeAuth/EdgeAuthParser';\n\nimport {EncodedEdgeToken} from '../../edgeAuth/EncodedEdgeToken';\nimport TokenContext from '../context/TokenContext';\nimport PublisherContext from './PublisherContext';\nimport PeerConnectionContext from '../context/PeerConnectionContext';\nimport StateContext from '../context/StateContext';\nimport Discovery from '../discovery/Discovery';\nimport DiscoveryUri from '../discovery/DiscoveryUri';\nimport MetricsFactory from '../../metrics/MetricsFactory';\nimport MetricsService from '../../metrics/MetricsService';\nimport RealTimePublisher from './RealTimePublisher';\nimport FeatureEnablement from '../../environment/FeatureEnablement';\n\nconst defaultStreamTerminationReason = 'client:termination';\nconst failureCountCleanUpIntervalInMilliseconds = 3000;\nconst standbyPollingIntervalInMilliseconds = 15000;\nconst oneHourInMilliseconds = 3600 * 1000;\nconst maxReconnectingAttemptsIntervalInMilliseconds = 2 * oneHourInMilliseconds;\n\nexport default class Publisher implements IDisposable {\n private readonly _logger: ILogger = LoggerFactory.getLogger('Publisher');\n private readonly _tokenContext: TokenContext;\n private readonly _publisherContext: PublisherContext;\n private readonly _peerConnectionContext: PeerConnectionContext;\n private readonly _stateContext: StateContext;\n private readonly _exponentialBackoff: ExponentialBackoff;\n private readonly _publisherStartTime: number;\n private readonly _readOnlyToken: ReadOnlySubject<EncodedEdgeToken>;\n private readonly _readOnlyPeerConnection: ReadOnlySubject<IPeerConnection | null>;\n private readonly _readOnlyState: ReadOnlySubject<PublisherState>;\n private readonly _readOnlyTokenExpiring: ReadOnlySubject<boolean>;\n private readonly _readOnlyAuthorized: ReadOnlySubject<boolean>;\n private readonly _readOnlyOnline: ReadOnlySubject<boolean>;\n private readonly _readOnlyLoading: ReadOnlySubject<boolean>;\n private readonly _readOnlyPublishing: ReadOnlySubject<boolean>;\n private readonly _readOnlyStandby: ReadOnlySubject<boolean>;\n private readonly _readOnlyStopped: ReadOnlySubject<boolean>;\n private readonly _readOnlyFailureCount: ReadOnlySubject<number>;\n private readonly _readOnlyEndPoint: ReadOnlySubject<EndPoint | null>;\n private readonly _readOnlyStream: ReadOnlySubject<IStream | null>;\n private readonly _readOnlyRtcStatistics: ReadOnlySubject<IRtcPublishMonitorStatistic | null>;\n private readonly _readOnlyMediaStream: ReadOnlySubject<MediaStream | null>;\n\n private _metricsService: MetricsService;\n private readonly _sessionTelemetry: SessionTelemetry;\n\n constructor(mediaStream: MediaStream, token: EncodedEdgeToken, name?: string) {\n this._tokenContext = new TokenContext(token);\n this._publisherContext = new PublisherContext(name);\n this._peerConnectionContext = new PeerConnectionContext();\n this._stateContext = new StateContext();\n this._exponentialBackoff = new ExponentialBackoff();\n this._publisherStartTime = Date.now();\n this._readOnlyToken = new ReadOnlySubject<string>(this._tokenContext.token);\n this._readOnlyPeerConnection = new ReadOnlySubject<IPeerConnection | null>(this._peerConnectionContext.peerConnection);\n this._readOnlyState = new ReadOnlySubject<PublisherState>(this._publisherContext.state);\n this._readOnlyTokenExpiring = new ReadOnlySubject<boolean>(this._tokenContext.tokenExpiring);\n this._readOnlyAuthorized = new ReadOnlySubject<boolean>(this._publisherContext.authorized);\n this._readOnlyOnline = new ReadOnlySubject<boolean>(this._publisherContext.online);\n this._readOnlyLoading = new ReadOnlySubject<boolean>(this._publisherContext.loading);\n this._readOnlyPublishing = new ReadOnlySubject<boolean>(this._publisherContext.publishing);\n this._readOnlyStandby = new ReadOnlySubject<boolean>(this._publisherContext.standby);\n this._readOnlyStopped = new ReadOnlySubject<boolean>(this._publisherContext.stopped);\n this._readOnlyFailureCount = new ReadOnlySubject<number>(this._publisherContext.failureCount);\n this._readOnlyEndPoint = new ReadOnlySubject<EndPoint | null>(this._publisherContext.endPoint);\n this._readOnlyStream = new ReadOnlySubject<IStream | null>(this._publisherContext.stream);\n this._readOnlyRtcStatistics = new ReadOnlySubject<IRtcPublishMonitorStatistic | null>(this._publisherContext.rtcStatistics);\n this._readOnlyMediaStream = new ReadOnlySubject<MediaStream | null>(this._peerConnectionContext.mediaStream);\n\n this._peerConnectionContext.mediaStream.value = mediaStream;\n\n const edgeToken = EdgeAuthParser.parseToken(this._tokenContext.token.value);\n const discoveryUri = (edgeToken.uri || SDK.discoveryUri.value).toString();\n\n SDK.tenancy.value = edgeToken.tenancy || SDK.tenancy.value;\n DiscoveryUri.uri.value = discoveryUri;\n this._metricsService = MetricsFactory.getMetricsService(discoveryUri);\n this._sessionTelemetry = new SessionTelemetry(SDK.pageLoadTime, this._metricsService);\n this._publisherContext.publisherDisposables.add(this._sessionTelemetry);\n\n this._publisherContext.publisherDisposables.add(\n this._publisherContext.state.subscribe(state => {\n if (this._publisherContext.clearFailureCountTimeout) {\n GlobalScope.value.clearTimeout(this._publisherContext.clearFailureCountTimeout);\n }\n\n if (!this._publisherContext.failureCount.value) {\n return;\n }\n\n if (state !== PublisherState.Publishing) {\n return;\n }\n\n this._publisherContext.clearFailureCountTimeout = GlobalScope.value.setTimeout(() => {\n this._publisherContext.failureCount.value = 0;\n }, failureCountCleanUpIntervalInMilliseconds);\n }));\n\n const destroyStreamOnUnmount = () => {\n if (this._publisherContext.stream.value && this._publisherContext.endPoint.value) {\n const ignored = this._publisherContext.endPoint.value.destroyStreamOnUnmount(this._publisherContext.stream.value, 'client:termination-on-window-unload');\n }\n };\n\n GlobalScope.value.addWindowEventListener('beforeunload', destroyStreamOnUnmount);\n\n this._publisherContext.publisherDisposables.add(new Disposable(() => {\n GlobalScope.value.removeWindowEventListener('beforeunload', destroyStreamOnUnmount);\n }));\n\n this.start();\n }\n\n get token(): EncodedEdgeToken {\n return this._tokenContext.token.value;\n }\n\n set token(token: EncodedEdgeToken) {\n this._publisherContext.disposables.dispose();\n\n this._tokenContext.token.value = token;\n this._tokenContext.tokenExpiring.value = false;\n\n const edgeToken = EdgeAuthParser.parseToken(this._tokenContext.token.value);\n const discoveryUri = (edgeToken.uri || SDK.discoveryUri.value).toString();\n\n SDK.tenancy.value = edgeToken.tenancy || SDK.tenancy.value;\n DiscoveryUri.uri.value = discoveryUri;\n\n this._metricsService = MetricsFactory.getMetricsService(discoveryUri);\n\n this.start();\n }\n\n get peerConnection(): ReadOnlySubject<IPeerConnection | null> {\n return this._readOnlyPeerConnection;\n }\n\n get state(): ReadOnlySubject<PublisherState> {\n return this._readOnlyState;\n }\n\n get tokenExpiring(): ReadOnlySubject<boolean> {\n return this._readOnlyTokenExpiring;\n }\n\n get authorized(): ReadOnlySubject<boolean> {\n return this._readOnlyAuthorized;\n }\n\n get online(): ReadOnlySubject<boolean> {\n return this._readOnlyOnline;\n }\n\n get loading(): ReadOnlySubject<boolean> {\n return this._readOnlyLoading;\n }\n\n get publishing(): ReadOnlySubject<boolean> {\n return this._readOnlyPublishing;\n }\n\n get standby(): ReadOnlySubject<boolean> {\n return this._readOnlyStandby;\n }\n\n get stopped(): ReadOnlySubject<boolean> {\n return this._readOnlyStopped;\n }\n\n get failureCount(): ReadOnlySubject<number> {\n return this._readOnlyFailureCount;\n }\n\n get endPoint(): ReadOnlySubject<EndPoint | null> {\n return this._readOnlyEndPoint;\n }\n\n get stream(): ReadOnlySubject<IStream | null> {\n return this._readOnlyStream;\n }\n\n get streamId(): string {\n return this._publisherContext.streamId;\n }\n\n get rtcStatistics(): ReadOnlySubject<IRtcPublishMonitorStatistic | null> {\n return this._readOnlyRtcStatistics;\n }\n\n get mediaStream(): ReadOnlySubject<MediaStream | null> {\n return this._readOnlyMediaStream;\n }\n\n async stop(reason: string): Promise<void> {\n return new Promise(resolve => {\n if (!this._stateContext.isStarting.value) {\n this.processStop(reason);\n\n resolve();\n\n return;\n }\n\n this._publisherContext.disposables.add(this._stateContext.isStarting.subscribe(isStarting => {\n if (!isStarting) {\n this.processStop(reason);\n resolve();\n }\n }));\n });\n }\n\n private processStop(reason: string): void {\n this.cleanUpResources(reason);\n\n if (this._peerConnectionContext.peerConnection.value) {\n this._peerConnectionContext.peerConnection.value.close();\n this._peerConnectionContext.peerConnection.value = null;\n }\n\n this._publisherContext.state.value = PublisherState.Stopped;\n }\n\n async dispose(): Promise<void> {\n return this.stop('client:channel-dispose').then(() => {\n this._publisherContext.publisherDisposables.dispose();\n this._stateContext.isDisposed = true;\n });\n }\n\n getUri(token: EncodedEdgeToken): URL {\n const url = EdgeAuthParser.parseToken(token).uri;\n\n if (url) {\n return url;\n }\n\n this._logger.info('Fall back to the default discover URI [%s]', SDK.discoveryUri.value);\n\n return new GlobalScope.value.URL(SDK.discoveryUri.value);\n }\n\n async start(): Promise<void> {\n if (this._stateContext.isDisposed) {\n throw new Error('Channel was already disposed');\n }\n\n if (this._stateContext.isStarting.value) {\n this._logger.info('Publisher is already starting, skipping start');\n\n return;\n }\n\n this._stateContext.isStarting.value = true;\n\n return this.processStart();\n }\n\n private async processStart(): Promise<void> {\n this._publisherContext.state.value = PublisherState.Starting;\n this.cleanUpResources('client:start');\n\n const token: EncodedEdgeToken = this._tokenContext.token.value;\n const listenOnStreamSetup = this._sessionTelemetry.listenOnStreamSetup();\n\n if (!EdgeAuthParser.isEncodedEdgeTokenValid(token)) {\n this._logger.error('Failed to parse token [%s]', token);\n this._publisherContext.state.value = PublisherState.Unauthorized;\n this._publisherContext.authorized.value = false;\n this._stateContext.isStarting.value = false;\n\n return;\n }\n\n this._publisherContext.loading.value = true;\n\n const uri = this.getUri(token);\n\n this._publisherContext.disposables.add(\n this._publisherContext.state.subscribe(state => {\n if (state === PublisherState.Error || state === PublisherState.Recovering) {\n Discovery.clearCachedClosestEndpoint(uri);\n }\n })\n );\n\n const handleStreamFailureCallback: () => Promise<void> = () => new Promise((resolve): void => {\n // Need to set isStarting to false and call handleStreamFailure if stream monitors found an issue\n this._stateContext.isStarting.value = false;\n\n return resolve(this.handleStreamFailure());\n });\n const streamPublisher = new RealTimePublisher(this._publisherContext, this._peerConnectionContext, handleStreamFailureCallback);\n\n return streamPublisher.start(\n uri,\n token,\n listenOnStreamSetup)\n .then(() => {\n this._publisherContext.loading.value = false;\n })\n .catch(e => {\n listenOnStreamSetup.fail();\n\n this._publisherContext.failureCount.value++;\n\n this._publisherContext.online.value = false;\n\n this.cleanUpResources('client:cleanup-after-failed-setup');\n\n this._publisherContext.state.value = PublisherState.ClientStartError;\n\n this._logger.error('Failed to start publishing', e);\n })\n .finally(() => {\n this._stateContext.isStarting.value = false;\n\n if (this._publisherContext.state.value === PublisherState.Publishing || !SDK.automaticRetryOnFailure) {\n this._publisherContext.startReconnectionAttemptsTimeInMilliseconds = 0;\n\n return;\n }\n\n const timeoutId = GlobalScope.value.setTimeout(() => {\n const ignored = this.handleStreamFailure()\n .catch(e => {\n this._logger.error('Failed handling stream failure', e);\n });\n }, this.getRetryInterval());\n\n this._publisherContext.disposables.add(new Disposable(() => {\n GlobalScope.value.clearTimeout(timeoutId);\n }));\n });\n }\n\n setMediaStream(mediaStream: MediaStream) {\n this._peerConnectionContext.mediaStream.value = mediaStream;\n\n if (this._peerConnectionContext.peerConnection.value) {\n mediaStream.getTracks().forEach(mediaTrack => {\n this._peerConnectionContext.peerConnection.value?.getSenders().forEach(sender => {\n if (mediaTrack.kind === sender?.track?.kind && mediaTrack.id !== sender.track.id) {\n sender.replaceTrack(mediaTrack);\n }\n });\n });\n }\n }\n\n private getRetryInterval(): number {\n switch (this._publisherContext.state.value) {\n case PublisherState.Offline:\n return standbyPollingIntervalInMilliseconds;\n case PublisherState.Initializing:\n case PublisherState.NotFound:\n case PublisherState.Error:\n case PublisherState.Recovering:\n case PublisherState.Unauthorized:\n case PublisherState.GeoRestricted:\n case PublisherState.GeoBlocked:\n case PublisherState.Stopped:\n case PublisherState.Starting:\n case PublisherState.Publishing:\n case PublisherState.Reconnecting:\n case PublisherState.UnsupportedFeature:\n case PublisherState.ConfigurationError:\n case PublisherState.TransientConfigurationError:\n case PublisherState.ConnectionError:\n case PublisherState.ClientStartError:\n // First and second attempt fast, after that exponential with backoff interval\n return this._exponentialBackoff.getExponentialBackoffIntervalByFailureCount(this._publisherContext.failureCount.value);\n\n default:\n assertUnreachable(this._publisherContext.state.value);\n }\n }\n\n private async handleStreamFailure(): Promise<void> {\n let reconnectingAttemptsInterval = 0;\n\n switch (this._publisherContext.state.value) {\n case PublisherState.Error:\n case PublisherState.Reconnecting:\n case PublisherState.Offline:\n case PublisherState.Recovering:\n case PublisherState.TransientConfigurationError:\n case PublisherState.ConnectionError:\n case PublisherState.ClientStartError:\n if (!this._publisherContext.startReconnectionAttemptsTimeInMilliseconds) {\n this._publisherContext.startReconnectionAttemptsTimeInMilliseconds = Date.now();\n }\n\n reconnectingAttemptsInterval = Date.now() - this._publisherContext.startReconnectionAttemptsTimeInMilliseconds;\n\n if (maxReconnectingAttemptsIntervalInMilliseconds <= reconnectingAttemptsInterval) {\n this._logger.info('Publisher stopped with state [%s] [%s] after exceeding timeout', this._publisherContext.state.value, PublisherState[this._publisherContext.state.value]);\n\n return;\n }\n\n this._logger.info('Retry start with initial state [%s] [%s]', this._publisherContext.state.value, PublisherState[this._publisherContext.state.value]);\n\n break;\n case PublisherState.Unauthorized:\n this._logger.info('Publisher is unauthorized, skipping retry of start. Please provide a new token and invoke start()');\n\n return;\n case PublisherState.GeoRestricted:\n this._logger.info('Publisher is geo restricted, skipping retry of start. Please provide a new token and invoke start()');\n\n return;\n case PublisherState.GeoBlocked:\n this._logger.info('Publisher is geo blocked, skipping retry of start. Please provide a new token and invoke start()');\n\n return;\n case PublisherState.Stopped:\n this._logger.info('Publisher is stopped, skipping retry of start.');\n\n return;\n case PublisherState.Publishing:\n this._logger.info('Publisher is publishing, skipping retry of start');\n\n return;\n case PublisherState.Initializing:\n this._logger.info('Publisher is initializing, skipping retry of start');\n\n return;\n case PublisherState.Starting:\n this._logger.info('Publisher is already starting, skipping retry of start');\n\n return;\n case PublisherState.UnsupportedFeature:\n this._logger.info('Publisher is stopped due to unsupported feature, skipping retry of start.');\n\n return;\n case PublisherState.NotFound:\n this._logger.info('Publisher is stopped due to channel not found, skipping retry of start.');\n\n return;\n case PublisherState.ConfigurationError:\n this._logger.info('Publisher is stopped due to configuration error, skipping retry of start.');\n\n return;\n default:\n assertUnreachable(this._publisherContext.state.value);\n }\n\n return this.start();\n }\n\n private cleanUpResources(reason: string = defaultStreamTerminationReason): void {\n this._publisherContext.disposables.dispose();\n\n const peerConnection = this._peerConnectionContext.peerConnection.value;\n\n if (peerConnection) {\n this._peerConnectionContext.peerConnection.value = null;\n peerConnection.close();\n peerConnection.dispose();\n\n if (SDK.forceGarbageCollectionOnRestart && !(FeatureEnablement.isMobile && SDK.skipGarbageCollectionOnMobileDevices)) {\n GarbageCollectorManager.forceGarbageCollection();\n }\n }\n\n this._publisherContext.publishing.value = false;\n this._publisherContext.stopped.value = true;\n this._publisherContext.standby.value = false;\n\n if (this._publisherContext.stream.value && this._publisherContext.endPoint.value) {\n const ignored = this._publisherContext.endPoint.value.destroyStream(this._publisherContext.stream.value, reason)\n .then(({status}) => {\n if (status !== 'ok') {\n this._logger.warn('[%s] Failed to destroy stream with reason [%s]', this.streamId, status);\n\n return;\n }\n\n this._logger.info('[%s] Destroyed stream with reason [%s]', this.streamId, status);\n })\n .catch(e => {\n this._logger.error('[%s] Failed to destroy stream', this.streamId, e);\n });\n }\n\n this._publisherContext.stream.value = null;\n this._publisherContext.endPoint.value = null;\n this._peerConnectionContext.peerConnectionReconnectAttempts = 0;\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport SDK from '../SDK';\nimport {EncodedEdgeToken} from '../../edgeAuth/EncodedEdgeToken';\nimport Publisher from './Publisher';\n\ntype CreatePublisherOptions = {\n mediaStream: MediaStream;\n token: EncodedEdgeToken;\n name?: string;\n};\n\nexport default class Publishers {\n static createPublisher(options: CreatePublisherOptions): Publisher {\n if (!SDK.initialized.value) {\n throw new Error('SDK is not loaded.');\n }\n\n return new Publisher(options.mediaStream, options.token, options.name);\n }\n\n private constructor() {\n throw new Error('Publishers is a static class that may not be instantiated');\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport SDK from '../SDK';\nimport Channels from '../channels/Channels';\nimport ChannelState from '../channels/ChannelState';\nimport Publishers from '../publish/Publishers';\nimport PublisherState from '../publish/PublisherState';\n\nexport {\n SDK,\n Channels,\n ChannelState,\n Publishers,\n PublisherState\n};\n\nexport default {\n SDK,\n Channels,\n ChannelState,\n Publishers,\n PublisherState\n};"],"names":["root","factory","exports","module","define","amd","self","PromiseHandler","_createClass","onFulfilled","onRejected","promise","_classCallCheck","_defineProperty","this","Promise","callback","TypeError","_state","_handled","_value","_deferreds","doResolve","key","value","_this","done","promiseResolve","reason","promiseReject","error","newValue","_typeof","then","finale","apply","arguments","e","_this2","length","_immediate","_unhandledRejection","i","len","handle","deferred","result","push","arr","resolve","reject","Array","isArray","args","prototype","slice","call","remaining","manageResponse","constructor","_","window","setTimeout","console","warn","content","workerConstructor","workerOptions","url","globalScope","blob","Blob","BlobBuilder","WebKitBlobBuilder","MozBlobBuilder","MSBlobBuilder","append","getBlob","URL","webkitURL","objectURL","createObjectURL","worker","revokeObjectURL","concat","encodeURIComponent","Error","r","a","n","__esModule","arrayLikeToArray","ReferenceError","asyncGeneratorStep","t","o","c","u","_next","_throw","toPropertyKey","_defineProperties","enumerable","configurable","writable","Object","defineProperty","_getPrototypeOf","setPrototypeOf","getPrototypeOf","bind","__proto__","create","Symbol","iterator","from","l","f","next","objectWithoutPropertiesLoose","getOwnPropertySymbols","indexOf","propertyIsEnumerable","hasOwnProperty","assertThisInitialized","_setPrototypeOf","arrayWithHoles","iterableToArrayLimit","unsupportedIterableToArray","nonIterableRest","arrayWithoutHoles","iterableToArray","nonIterableSpread","toPrimitive","String","Number","toString","name","test","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","getter","d","definition","get","obj","prop","toStringTag","Disposable","disposable","_disposed","_disposable","DisposableListener","_Disposable","listeners","listener","idx","splice","_inherits","Subject","_listeners","set","changed","comparable","equals","_i","_arr","_toConsumableArray","ReadOnlySubject","subject","_subject","subscribe","browserGlobalScope","document","location","navigator","GlobalScope","_document","_location","_navigator","_window","FormData","HTMLVideoElement","MediaStream","MediaStreamTrack","MediaSource","RTCPeerConnection","RTCSessionDescription","RTCIceCandidate","URLSearchParams","addEventListener","clearInterval","clearTimeout","createElement","hasFocus","hidden","querySelector","fetch","hostname","search","connection","onLine","queueMicrotask","removeEventListener","requestAnimationFrame","setInterval","providedGlobalScope","_readOnlyInstance","_GlobalScope","_instance","getInstance","BrowserDetector","_browserNameAndVersion","_browserName","_browserMajorVersion","_isAndroid","_isChrome69","_isChrome70","_isChrome71","_isChrome72","_isChrome74","_isChrome75","_isChrome76","_isChrome77","_isMobile","userAgent","browserNameAndVersion","match","_browserNameAndVersionRegex","parseBrowserNameAndVersionForIE","browserNameList","split","browserVersionList","fullVersion","msie","parseInt","substring","version","_BrowserDetector","parseBrowserNameAndVersion","parseBrowserName","parseBrowserMajorVersion","_navigator2","includes","FeatureEnablement","isChrome74","isChrome75","isChrome76","isChrome77","addTranceiverDisabled","isChrome69","isChrome70","isChrome71","isChrome72","browserName","browserMajorVersion","_GlobalScope$value","documentCreateElement","isMobile","MediaStreamTrackProcessor","MediaStreamTrackGenerator","RTCRtpReceiver","createEncodedStreams","RTCRtpScriptTransform","_GlobalScope$value2","requestVideoFrameCallback","_GlobalScope$value3","isRequestVideoFrameCallbackSupported","isEncodedInsertableStreamsSupported","isRTCRtpScriptTransformSupported","LoggingLevel","Logger","category","appenders","threshold","_category","_appenders","_threshold","Trace","_len","_key","log","Debug","_len2","_key2","Info","_len3","_key3","Warn","_len4","_key4","_len5","_key5","Fatal","_len6","_key6","level","date","Date","message","replacePlaceholders","forEach","appender","replacePlaceholdersString","index","replaceArgument","stringify","reduce","accumulator","currentValue","array","errorStackAlsoHasErrorMessage","stack","arg","cache","JSON","argument","data","toStringStr","Appenders","items","item","BuildFeatures","_sendLocalCandidates","_sendLogs","_sendMetrics","_logToConsole","features","__FEATURES__","sendLocalCandidates","sendLogs","sendMetrics","logToConsole","applyFeatures","LoggerDefaults","LoggingThreshold","defaultLoggingLevel","ConsoleAppender","logLevel","fullMessage","toISOString","Numbers","incrementForNegativeValue","number","countDigitsBeforeDecimal","Math","floor","countDigitsAfterDecimal","precision","power","pow","round","digitsBeforeDecimal","originalValue","modifiedValue","count","fixRounding","VersionManager","__BUILD_VERSION__","_defaultVersion","Generator","_regeneratorDefine2","p","y","G","v","return","GeneratorFunction","GeneratorFunctionPrototype","displayName","_regenerator","w","m","_invoke","TelemetryService","telemetryConfiguration","_telemetryConfiguration","getLocationHostnameFromGlobalScope","locationHostname","_domain","timestamp","runtime","valueOf","pageLoadTime","logRecord","tenancy","sessionId","sdkVersion","environment","fullQualifiedName","_logs","unshift","sendLogsIfAble","resolveLocationHostname","globalScopeSubscription","dispose","_asyncToGenerator","_callee","logMessages","formData","_context","records","method","body","_x","_sendLogsIfAble","_callee2","numberOfLogsToSend","sizeOfLogsToSend","getItemSize","getLogSize","_context2","_isSending","countNumberLength","values","sum","response","catch","TelemetryAppender","_tenancy","_sessionId","_telemetryService","TelemetryConfiguration","defaultTelemetryLoggingLevel","_url","telemetryUrl","pathname","_environment","_pageLoadTime","x","LoggingLevelMapping","loggingLevel","Off","All","assertUnreachable","loggingLevelType","TelemetryLevel","MetricsConfiguration","TelemetryDefault","defaultTelemetryLevel","metricsUrl","TelemetryLevelMapping","telemetryLevel","Essential","telemetryLevelType","ConfigurationParameterReader","readConfigurationParameterValue","readConfigurationParameterURIValue","defaultStringValue","valueFromUri","defaultBooleanValue","convertTelemetryLevelToTelemetryLevelType","convertLoggingLevelToLoggingLevelType","defaultConsoleLoggingLevel","metaValue","documentQuerySelector","getAttribute","valueURIParameterName","locationSearch","LoggerFactory","_loggers","applyLoggingLevel","applyAppenderLoggingLevel","applyConsoleLogger","applyTelemetryLogger","parameterValue","getStringValue","setThreshold","applyAppender","add","applyLoggerConfigFromParameterConfiguration","Strings","loops","ceil","fill","random","string","func","EdgeToken","edgeToken","_edgeToken$token","_edgeToken$token2","_applicationId","applicationId","_token","uri","token","capabilities","EdgeAuthParser","isEncodedEdgeTokenValid","_logger","decodedToken","atob","substr","edgeAuthTokenPrefix","parse","startsWith","getLogger","DisposableList","_list","visibilityChangeEvent","ApplicationActivityMonitor","now","_isForeground","_readOnlyIsForeground","initialize","_timeOfLastTabFocusChange","_lastBackgroundDuration","_disposables","backgroundEntryTime","handleVisibilityChange","isNowForeground","documentIsHidden","useEventCapturePhase","addDocumentEventListener","removeDocumentEventListener","VanillaPeerConnection","configuration","webkitRTCPeerConnectionEnabled","_peerConnection","webkitRTCPeerConnection","_this$_peerConnection","currentLocalDescription","_this$_peerConnection2","currentRemoteDescription","_this$_peerConnection3","connectionState","_this$_peerConnection4","iceConnectionState","_this$_peerConnection5","getConfiguration","_this$_peerConnection6","setConfiguration","_this$_peerConnection7","getTransceiversDisabled","getTransceivers","_this$_peerConnection8","addTransceiver","_createOffer","options","promiseBasedPCMethodsDisabled","createOffer","_createAnswer","createAnswer","_x2","_setLocalDescription","_callee3","description","_context3","setLocalDescription","_x3","_setRemoteDescription","_callee4","_description$sdp","_context4","sdp","setRemoteDescription","_x4","getSenders","getReceivers","selector","getStats","_this3","type","mediaStream","_this4","getTracks","track","addTrack","ontrack","handler","onicecandidate","onconnectionstatechange","oniceconnectionstatechange","_this$_peerConnection9","close","VanillaPeerConnectionFactory","_createPeerConnection","resolvePeerConnectionPromise","EncodedInsertableStreams","defaultTrackKinds","PeerConnectionService","_peerConnectionFactory","isPrecachingEnabled","precacheCreatePeerConnectionOffer","_precacheCreatePeerConnectionOffer","_cached","direction","peerConnection","createPeerConnectionOffer","_createPeerConnectionOffer","trackKinds","encodedInsertableStreams","_args3","Disabled","isTracksKindsEquivalentToDefault","Enabled","createPeerConnection","_ref","supportsAddTransceiver","audioTransceivers","videoTransceivers","_t","_t2","_t3","_t4","_t5","_t6","kind","localOffer","offerToReceiveAudio","offerToReceiveVideo","tracksKinds","countTrackKinds","trackKindCount","audio","video","countedTrackKinds","countedDefaultTrackKinds","initiateInitialPrecaching","TelemetryUrl","baseURL","segments","protocol","endsWith","join","origin","Environment","Parameters","_discoveryParameters","parameters","__PARAMETERS__","discovery","intentions","applyParameters","DiscoveryUri","_discoveryUri","discoveryParameters","searchParams","ExponentialBackoff","backoffIntervalInMillisecond","minBackoffIntervalInMillisecond","maxBackoffIntervalInMillisecond","_backoffIntervalInMillisecond","_minBackoffIntervalInMillisecond","_maxBackoffIntervalInMillisecond","failureCount","backoffIntervalInSeconds","randomization","exponentialBackoff","exponentialBackoffWithRandomization","exponentialBackoffWithRandomizationInMillisecond","max","min","MetricsType","MetricType","metrics","_metrics","TimeToFirstFrame","ChannelCreationTimeToFirstFrame","Stalled","Buffering","SetupCompleted","SetupFailed","RoundTripTime","DownlinkThroughputCapacity","NetworkType","ResolutionChanged","ApplicationForeground","ApplicationBackground","MetricsService","metricsConfiguration","_metricsConfiguration","_exponentialBackoff","metric","streamId","previousValue","resource","metricType","getTelemetryLevel","metricRecord","getName","sendMetricsIfAble","metricsMessages","_sendMetricsIfAble","isResponseStatusCodeRetryable","_failureCount","getExponentialBackoffIntervalByFailureCount","status","MetricsFactory","metricsServices","_metricsServices","SDK","clientSessionId","getTelemetryUrl","getEnvironmentFromUrl","convertTelemetryLevelTypeToTelemetryLevel","metricsService","_GlobalScope$getInsta","_clientSessionId","_loadedTimestamp","_readOnlyInitialized","_readOnlyDiscoveryUri","_readOnlyPeerConnectionFactory","_automaticallyRetryOnFailure","_automaticallyReconnectPeerConnection","_automaticallyPlayMediaStream","_automaticallyMuteVideoOnPlayFailure","_forceGarbageCollectionOnRestart","_skipGarbageCollectionOnMobileDevices","_webPlayerLoader","_shakaPlayerLoader","_hlsJsLoader","_metricsService","_applicationActivityMonitor","_telemetryUrl","_maximalNumberOfPeerConnectionReconnectAttempts","retriesAmount","_telemetryLevel","telemetryAppender","find","remove","info","getMetricsService","setTelemetryLevel","getBooleanValue","discoveryUri","channelToken","parseToken","uriValue","baseURIValue","_initialized","addWindowEventListener","applyDiscoveryUriDefaultFromParameterConfiguration","applyMetricsConfiguration","applyTelemetryConfiguration","optionsWithOptionalglobalScope","setInstance","peerConnectionFactory","convertLoggingLevelTypeToLoggingLevel","consoleLoggingLevel","consoleAppender","automaticallyPlayMediaStream","automaticallyMuteVideoOnPlayFailure","webPlayerLoader","shakaPlayerLoader","hlsJsLoader","_this$_applicationAct","_SDK","onLoad","Dimension","width","height","other","GarbageCollectorManager","isForceChromeGarbageCollectionSupported","forceChromeGarbageCollection","isQueueMicrotaskSupported","overloadMemoryToInvokeGarbageCollection","img","src","ArrayBuffer","onerror","ChannelState","Durations","duration","_duration","isNegative","abs","offset","milliseconds","seconds","minutes","hours","parts","padStart","targetLength","padString","repeat","noop","VideoTelemetry","channelStartTime","_streamId","_channelStartTime","_startRecordingFirstFrame","_listenToFirstTime","callTimeToFirstFrame","_clearTimeToFirstFrameListener","_listenForStall","onStall","_listenForContinuation","event","onContinuation","_clearRebufferingListener","toIsoString","pushTimeToFirstFrame","pushChannelCreationTimeToFirstFrame","_timeToFirstFrame","uint64","durationSincePageLoad","_channelCreationTimeToFirstFrame","_videoStalled","buffered","bufferLength","hasNotProgressedSinceLastProgressEvent","end","_lastProgress","timeSinceStop","newResolution","_videoResolution","StreamSetupListener","_startTime","recordStreamMetric","_metricSubmitted","setupTime","metricName","NetworkMonitor","navigatorConnection","isSupported","setupNetworkChangeListeners","updateStatistics","_isSupported","_rtt","_effectiveType","_downlinkThroughputCapacity","_GlobalScope$value$na","_GlobalScope$value$na2","_GlobalScope$value$na3","downlink","downlinkMax","_ref2","_GlobalScope$value$na4","_GlobalScope$value$na5","_GlobalScope$value$na6","effectiveType","_GlobalScope$value$na7","_GlobalScope$value$na8","rtt","_GlobalScope$value$na9","_GlobalScope$value$na0","getRoundTripTime","getEffectiveType","getDownlinkThroughputCapacity","SessionTelemetry","applicationActivityMonitor","_networkMonitor","isForeground","recordForegroundChange","recordNetworkRTTUpdate","recordNetworkTypeChangeUpdate","downlinkThroughputCapacity","recordNetworkDownlinkThroughputCapacityUpdate","timeSinceLastChange","getTimeSinceLastChange","newRTT","oldRtt","_lastNetworkStatistics","newNetworkType","oldNetworkType","newCapacity","oldCapacity","float","BitrateState","BitrateMode","TokenContext","tokenExpiring","ChannelContext","_options$targetLag","_options$onRealTimeSu","_options$onRealTimeSu2","disposables","channelDisposables","rendererDisposables","channelInitialization","videoElement","state","Initializing","exists","autoMuted","autoPaused","authorized","online","loading","playing","standby","stopped","targetLag","lag","bitrateLimit","resolution","empty","endPoint","onRealTimeSubscribeRequestCallback","onRealTimeSubscribeResponseCallback","stream","rtcStatistics","videoTelemetry","rtcAudioStatistic","rtcVideoStatistic","clearFailureCountTimeout","dataset","Starting","StandBy","GeoRestricted","GeoBlocked","Unauthorized","Recovering","ConfigurationError","TransientConfigurationError","EncodedStreamSink","mode","valid","validationResult","StreamTrackTransform","StreamTransformContext","hasInsertableStreams","hasEncodedInsertableStreams","videoStreamTransformCallback","audioStreamTransformCallback","encodedVideoStreamSink","encodedAudioStreamSink","audioTrack","mediaStreamTrack","receiver","mid","codec","transformPipelineWorker","transformMessageRouter","transformFunctionNames","videoTrack","PeerConnectionContext","peerConnectionReconnectAttempts","StateContext","isStarting","isDisposed","FrameTimingInformationContext","shouldExtractTimecode","shouldExtractTimestamps","isEnabled","decodedFrameTimingInformation","renderedFrameTimingInformation","BitrateModeMapping","bitrateMode","Normal","Force","Reset","BitrateStateMapping","bitrateState","Keep","EndPoint","timeout","_uri","_timeout","_roundTripTime","_ping","start","finished","buildPingUrl","race","ok","_subscribe","localSessionDescription","_options$onSubscribeR","_options$onSubscribeR3","clientVersion","requestBody","httpResponse","_options$onSubscribeR2","_response","subscribeResponse","_args2","buildUrl","apiVersion","bearerToken","httpRoundTripTime","sessionDescription","createAnswerDescription","createOfferDescription","onSubscribeRequestCallback","finally","mapHttpStatusToSubscribeStatus","onSubscribeResponseCallback","convertHttpResponseToSubscribeResponse","debug","_publish","bodyWithOffer","bodyWithoutOffer","mapHttpStatusToPublishStatus","convertHttpResponseToPublishResponse","_x5","_x6","_x7","setRemoteDescriptionResponse","sharedSecret","mapHttpStatusToSetRemoteDescriptionStatus","convertHttpResponseToSetRemoteDescriptionResponse","_x8","_x9","_limitBitrate","_callee5","elapsedInMilliseconds","bitrateInBitsPerSecond","_this5","_context5","convertBitrateStateToBitrateStateType","convertBitrateModeToBitrateModeType","mapHttpStatusToSetTemporaryMaximalBitrateStatus","_x0","_x1","_x10","_x11","_x12","_addIceCandidates","_callee6","candidates","discoveryCompleted","addIceCandidatesResponse","_this6","_args6","_context6","mapHttpStatusToAddIceCandidatesStatus","convertHttpResponseToAddIceCandidatesResponse","_x13","_x14","_x15","_destroyStream","_callee7","destroyStreamResponse","_this7","_context7","mapHttpStatusToSetDestroyStreamStatus","convertHttpResponseToDestroyStreamResponse","_x16","_x17","_destroyStreamOnUnmount","_callee8","_context8","sendBeacon","destroyStream","_x18","_x19","path","pathAsArray","_convertHttpResponseToSubscribeResponse","_callee9","rtcConfiguration","createAnswerDescriptionResponse","createOfferDescriptionResponse","otherProperties","_context9","json","_objectWithoutProperties","_excluded","_objectSpread","convertIRtcConfigurationToRTCConfiguration","_x20","_x21","_convertHttpResponseToPublishResponse","_callee0","publishResponse","_context0","_x22","_x23","iceServers","bundlePolicy","iceCandidatePoolSize","urls","username","credential","iceTransportPolicy","rtcpMuxPolicy","_convertHttpResponseToSetRemoteDescriptionResponse","_callee1","_context1","_x24","_convertHttpResponseToAddIceCandidatesResponse","_callee10","_context10","_x25","_convertHttpResponseToDestroyStreamResponse","_callee11","_context11","_x26","DiscoveryService","_discoverNearbyEndPoints","asString","endPoints","text","map","_discoverClosestEndPoint","failedRequests","propagateFailureIfAllRequestsFailed","buildDiscoveryUrl","discoverNearbyEndPoints","ping","time","Discovery","_precacheClosestEndPointDiscovery","resolveEndPointPromise","discoverClosestEndPointWithCaching","_discoverClosestEndPointWithCaching","discoveryService","cachedValue","_cache","discoverClosestEndPoint","precacheClosestEndPointDiscovery","NetworkStates","WebPlayer","manifestURI","handleStreamFailure","_videoElement","_kind","_manifestURI","encodeURI","replace","_options","_player","_lastReloadTime","_handleStreamFailure","ChunkedStreaming","phenixWebPlayer","_this$_player","_this$_player2","playerOptions","bandwidthToStartAt","errorObject","canReload","code","severity","errors","RECOVERABLE","reloadIfAble","_this$_videoElement$b","_this$_videoElement$b2","currentTime","networkState","NetworkNoSource","dataBuffered","statistics","trueCurrentTime","originStartTime","isNative","deliveryType","NetworkLoading","NetworkIdle","NetworkEmpty","hasElapsedMinTimeSinceLastReload","minTimeBeforeNextReload","reload","ShakaPlayer","_monitoredStatistics","estimatedBandwidth","playTime","shaka","Player","loadPlayer","abr","defaultBandwidthEstimate","manifest","retryParameters","streaming","liveSyncPanicThreshold","bufferingGoal","bufferBehind","maxAttempts","backoffFactor","unload","destroy","playerConfig","_this$_player4","configure","errorHandler","_this$_player3","load","play","HlsPlayer","hlsPlayer","enableWorker","maxBufferLength","backBufferLength","liveSyncDuration","liveDurationInfinity","liveMaxLatencyDuration","Infinity","highBufferWatchdogPeriod","loadSource","attachMedia","canPlayType","media","offsetWidth","offsetHeight","streamController","_hlsPlayer","_phenixWebPlayer","_shaka","_start","offerSdp","loaded","_pending","player","_play","dashManifestUrlMatch","hlsManifestUrlMatch","manifestUrl","playlistUrl","shouldUseNativeHls","preferNative","ChunkedStreamPlaybackMode","VideoFrameDetector","isRequestAnimationFrameSupported","startTime","resolved","timeoutId","ChunkedStreamSubscriber","channelContext","chunkedStreamPlaybackMode","_channelContext","_chunkedStreamPlaybackMode","_createOfferDescripti","mapSubscribeStatusToExists","mapSubscribeStatusToChannelStatus","applyStatus","applySessionAndStreamPropertiesToVideoElement","roundTripTime","retryOnStreamFailure","monitor","Stopped","_monitorFailureCount","ConnectionError","_monitorDisposables","_this3$_channelContex","_this3$_channelContex2","_this3$_channelContex3","_this3$_channelContex4","_this3$_channelContex5","newStreamStatistics","Live","_streamStatistics","paused","Playing","Paused","isRenderingFrames","SdpParser","_sdp","sdpSplitByLines","sdpSplitByTracks","_audioCodec","applyCodec","_videoCodec","_isAudioTrackEnabled","isTrackByTypeEnabled","_isVideoTrackEnabled","sdpSectionForType","sdpTrack","_sdpSplitByLines$find","rtmap","sdpLine","usedCodecLine","RtcConfigurationManager","RtcConnectionMonitor","estimatedRoundTripTime","_estimatedRoundTripTime","_tracksToMonitor","getCurrentOfferDisabled","parsedSDP","_estimatedAudioCodec","audioCodec","_estimatedVideoCodec","videoCodec","isInitialSubscriptionCallback","foreground","_isMonitorRunning","_monitorGeneration","_updateTimeout","updateStatistic","_rtcStatistic","_updateStatistic","getKindForSafari11","generation","timeoutHandle","statsPromise","timeoutPromise","stats","lastPacketReceivedTimestamp","getStatsPromiseBasedDisabled","updateStatisticLegacy","id","report","currentRoundTripTime","mediaType","codecId","mimeType","_this2$_rtcStatistic$","_this2$_rtcStatistic$2","_this2$_rtcStatistic$3","_this2$_rtcStatistic$4","_this2$_rtcStatistic$5","_this2$_rtcStatistic$6","_this2$_rtcStatistic$7","bytesDelta","bytesReceived","timeDelta","bitrate","ssrc","packetsLost","packetsReceived","getCodecByType","framesDecoded","fps","_updateStatisticLegacy","getStatsLegacy","names","stat","_this3$_rtcStatistic$","_this3$_rtcStatistic$2","VideoCodec","TransformMessageType","TransformMessageDataType","FrameTimingInformationManager","context","Map","canProcessFrameTimingInformation","setupVideoElementHandling","renderedFrameTimingInformationSubject","setupFrameTimingInformationTransform","trackId","decodedFrameTimingInformationSubject","isEnabledSubject","H264","registerRoute","FrameTimingInformation","handleFrameTimingMessage","_transformName","_Object$entries","entries","_Object$entries$_i","_slicedToArray","rtpTimestamp","metadata","rtpTimestampNumber","_decodedFrameTimingIn","_decodedFrameTimingIn2","frameTimingInformation","timecode","receiveTimestamp","sourceTimestamp","ingestTimestamp","encodeTimestamp","transcodeTimestamp","playbackState","_currentPlaybackState","_decodedFrameTimingInformationByRtpTimestamp","videoElementSubject","clear","_videoElementDisposables","setupVideoEventListeners","_armVideoFrameCallback","_step","timestampsToDelete","_iterator","_createForOfIteratorHelper","s","_step$value","frameTiming","renderTimestamp","performance","timeOrigin","err","_i2","_timestampsToDelete","delete","onPlaying","onPause","onStalled","onWaiting","onEnded","onError","_armedVideoFrameCallbackId","cancelVideoFrameCallback","handleVideoFrameCallback","Worker_fn","TransformPipelineMessageRouter","messageType","routeMessage","_messageRoutes","Chunk","Metadata","once","_arrayLikeToArray","_unsupportedIterableToArray","_n","F","InsertableStreams","streamTransformContext","createTransformPipelineWorkerForTrack","TransformStreamPipelineWorker","terminate","TransformMessageRouter","videoTrackReceiver","videoTrackMediaStreamTrack","audioTrackReceiver","audioTrackMediaStreamTrack","_configureEncodedStreamPipeline","addTrackTransforms","configureRTCRtpScriptTransform","configureEncodedStreams","transformFunctionName","postMessage","AddTransform","configureRTCRtpScriptTransformForTrack","trackReceiver","trackMediaStreamTrack","trackTransformPipelineWorker","transform","_ref3","PipelineConfigured","all","_ref4","configureEncodedStreamsForTrack","actions","encodedReceiverStreams","_ref5","ConfigurePipeline","source","readable","sink","transfer","transformedStream","transformer","TransformStream","chunk","controller","processor","generator","pipeThrough","pipeTo","removeTrack","audioPumper","Audio","srcObject","appendChild","removeChild","AudioCodec","Uint8Array","annexBFourByteStartCode","SkipFrame","SurrogateFrameDataManager","OPUS","_dummyAudioSilentPerCodec","buffer","AAC","_singleZeroByte","_isSafari","_surrogate28x16H264IFrame","_dummy2x2VideoIFramePerCodec","VP8","VP9","_isAndroidChrome","_surrogate28x16PFrameFrameNumber","_surrogate28x16PFrameFrameNumberReset","_surrogate28x16H264PFrame","_dummy2x2VideoPFramePerCodec","_SurrogateFrameDataManager","isAndroid","surrogateH26428x16IFrame","surrogateH26428x16PFrame","EncodedMediaTransformManager","EncodedVideoChunk","encodedVideoStreamCallback","EncodedAudioChunk","encodedAudioStreamCallback","_encodedAudioStreamCallback","getInvalidSurrogateAudioData","getSurrogateAudioSilentPerCodec","_encodedVideoStreamCallback","surrogate","getInvalidSurrogateVideoIFrame","getInvalidSurrogateVideoPFrame","getSurrogateVideoIFramePerCodec","getSurrogateVideoPFramePerCodec","VideoCodecMapping","videoCodecType","videoCodecString","toUpperCase","AudioCodecMapping","audioCodecType","audioCodecString","ownKeys","keys","filter","getOwnPropertyDescriptor","getOwnPropertyDescriptors","defineProperties","RealTimeStreamSubscriber","peerConnectionContext","frameTimingInformationContext","_peerConnectionContext","_streamTransformContext","_frameTimingInformationContext","listenOnStreamSetup","playMediaStreamInVideoElement","requiresEncodedInsertableStreams","_ref3$","subscribeOptions","clientOfferDisabled","supportsSetConfiguration","supportsGetConfiguration","forceGarbageCollectionOnRestart","skipGarbageCollectionOnMobileDevices","forceGarbageCollection","applyRtcConfiguration","submitCandidatesTimeout","cancelDiscovery","candidate","_this$_channelContext","addIceCandidates","retryCallback","navigatorIsOnLine","reconnectPeerConnection","mediaStreamPromise","onTrackDisabled","streams","trackListener","answer","mapSetRemoteDescriptionStatusToChannelStatus","success","_peerConnection$curre","_this$_channelContext2","_peerConnection$getTr","_peerConnection$getTr2","parsedRemoteDescription","convertVideoCodecTypeToVideoCodec","convertAudioCodecTypeToAudioCodec","receivers","getVideoTracks","supportsGetTransceivers","transceiver","getAudioTracks","createEncodedStreamPipeline","frameTimingInformationManagerContext","encodedMediaTransformManagerContext","configureEncodedStreamPipeline","_InsertableStreams$co","configureInsertableStreamTransformation","rtcConnectionMonitor","rtcConnectionMonitorStatisticSubscription","rtcStatistic","audioTrackFailed","videoTrackFailed","Reconnecting","Offline","_applyRtcConfiguration","optionalPeerConnection","newRtcConfiguration","truncateIceServers","UnsupportedFeature","maximalNumberOfPeerConnectionReconnectAttempts","automaticallyReconnectPeerConnection","_peerConnection$curre2","isClientOfferFlow","iceRestart","offer","_mediaStream$getTrack","hasActiveTracks","some","readyState","StreamSubscriberFactory","tokenCapabilities","hasStreaming","hasOnDemand","OndDemand","Channel","channelContextOptions","streamTransformContextOptions","_tokenContext","_stateContext","_readOnlyPeerConnection","_readOnlyState","_readOnlyExists","_readOnlyAutoMuted","_readOnlyAutoPaused","_readOnlyTokenExpiring","_readOnlyAuthorized","_readOnlyOnline","_readOnlyLoading","_readOnlyPlaying","_readOnlyStandby","_readOnlyStopped","_readOnlyTargetLag","_readOnlyLag","_readOnlyBitrateLimit","_readOnlyResolution","_readOnlyFailureCount","_readOnlyEndPoint","_readOnlyStream","_readOnlyRtcStatistics","_readOnlyMediaStream","_sessionTelemetry","_videoMetaDataChangedHandler","handleVideoMetaDataChanged","configureFrameTimingInformation","_readOnlyIsFrameTimingInformationEnabled","_readOnlyDecodedFrameTimingInformation","_readOnlyRenderedFrameTimingInformation","setupListenerForTimeToFirstTime","setupListenerForRebuffering","restartAfterStop","onVideoResolutionChanges","getTime","limitBitrate","destroyStreamOnUnmount","removeWindowEventListener","automaticRetryOnFailure","lastBackgroundDuration","getLastBackgroundDuration","shouldForceRestart","isStreamDeletedByPlatform","restartOnForeground","isRetryableState","_streamSubscriber","isSubscriberHealthy","isHealthy","pause","videoWidth","videoHeight","_stop","processStop","cleanUpResources","_resume","muted","_dispose","stop","processStart","ClientStartError","isStreamHealthy","_processStart","isRecovery","_StreamTrackTransform","_StreamTrackTransform2","_valid","_validationResult","_EncodedStreamSink$va","_valid2","_validationResult2","_EncodedStreamSink$va2","_valid3","_validationResult3","hasTransformStreamCallback","hasEncodedStreamSink","handleStreamFailureCallback","validateMediaStreamTrackTransform","validateEncodedStreamSink","isInsertableStreamsSupported","getUri","clearCachedClosestEndpoint","fail","getRetryInterval","_restartAfterStop","frameTimingInformationCapability","capability","isChannelFrameTimingInformationSupported","option","trim","_playMediaStreamInVideoElement","playPromise","_this8","hasAudioTrack","automaticallyMuteVideoOnPlayFailureOff","Channels","initialized","channelOptions","optionsWithRealTimeSubscribeCallbacks","PublisherState","PublisherContext","publisherDisposables","publisherInitialization","publishing","generateScreenName","startReconnectionAttemptsTimeInMilliseconds","applyUnauthorized","applyNotFound","applyUnhandledError","NotFound","RtcPublishMonitor","parsedLocalDescription","_availableTracks","isAudioTrackEnabled","isVideoTrackEnabled","lastPacketSentTimestamp","_this2$_availableTrac","bytesSent","packetsSent","retransmittedBytesSent","firCount","frameHeight","frameWidth","framesEncoded","framesSent","headerBytesSent","hugeFramesSent","pliCount","qpSum","totalEncodeTime","totalEncodedBytesTarget","RealTimePublisher","publisherContext","_publisherContext","publish","mapPublishStatusToPublisherStatus","applyPublishStatus","addStream","_this$_publisherConte","mapAddIceCandidatesStatusToPublisherStatus","applyAddIceCandidatesStatus","_createAnswerDescript","mapSetRemoteDescriptionStatusToPublisherStatus","applySetRemoteDescriptionStatus","_this$_publisherConte2","Publishing","rtcPublishMonitor","reconnectPeerConnectionTimeout","Publisher","_publisherStartTime","_readOnlyToken","_readOnlyPublishing","streamPublisher","mediaTrack","_this5$_peerConnectio","sender","_sender$track","replaceTrack","Publishers"],"sourceRoot":""}
1
+ {"version":3,"file":"full.js","mappings":"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","sources":["webpack://phenix/webpack/universalModuleDefinition","webpack://phenix/./src/promise/PromiseHandler.ts","webpack://phenix/./src/promise/Promise.ts","webpack://phenix/./node_modules/worker-loader/dist/runtime/inline.js","webpack://phenix/./node_modules/@babel/runtime/helpers/arrayLikeToArray.js","webpack://phenix/./node_modules/@babel/runtime/helpers/arrayWithHoles.js","webpack://phenix/./node_modules/@babel/runtime/helpers/arrayWithoutHoles.js","webpack://phenix/./node_modules/@babel/runtime/helpers/assertThisInitialized.js","webpack://phenix/./node_modules/@babel/runtime/helpers/asyncToGenerator.js","webpack://phenix/./node_modules/@babel/runtime/helpers/classCallCheck.js","webpack://phenix/./node_modules/@babel/runtime/helpers/createClass.js","webpack://phenix/./node_modules/@babel/runtime/helpers/defineProperty.js","webpack://phenix/./node_modules/@babel/runtime/helpers/getPrototypeOf.js","webpack://phenix/./node_modules/@babel/runtime/helpers/inherits.js","webpack://phenix/./node_modules/@babel/runtime/helpers/iterableToArray.js","webpack://phenix/./node_modules/@babel/runtime/helpers/iterableToArrayLimit.js","webpack://phenix/./node_modules/@babel/runtime/helpers/nonIterableRest.js","webpack://phenix/./node_modules/@babel/runtime/helpers/nonIterableSpread.js","webpack://phenix/./node_modules/@babel/runtime/helpers/objectWithoutProperties.js","webpack://phenix/./node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js","webpack://phenix/./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js","webpack://phenix/./node_modules/@babel/runtime/helpers/setPrototypeOf.js","webpack://phenix/./node_modules/@babel/runtime/helpers/slicedToArray.js","webpack://phenix/./node_modules/@babel/runtime/helpers/toConsumableArray.js","webpack://phenix/./node_modules/@babel/runtime/helpers/toPrimitive.js","webpack://phenix/./node_modules/@babel/runtime/helpers/toPropertyKey.js","webpack://phenix/./node_modules/@babel/runtime/helpers/typeof.js","webpack://phenix/./node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js","webpack://phenix/webpack/bootstrap","webpack://phenix/webpack/runtime/compat get default export","webpack://phenix/webpack/runtime/define property getters","webpack://phenix/webpack/runtime/hasOwnProperty shorthand","webpack://phenix/webpack/runtime/make namespace object","webpack://phenix/./src/lang/Disposable.ts","webpack://phenix/./src/rx/Subject.ts","webpack://phenix/./src/rx/ReadOnlySubject.ts","webpack://phenix/./src/globalScope/GlobalScope.ts","webpack://phenix/./src/dom/BrowserDetector.ts","webpack://phenix/./src/environment/FeatureEnablement.ts","webpack://phenix/./src/logger/Logger.ts","webpack://phenix/./src/logger/Appenders.ts","webpack://phenix/./src/environment/BuildFeatures.ts","webpack://phenix/./src/logger/LoggerDefaults.ts","webpack://phenix/./src/logger/LoggingThreshold.ts","webpack://phenix/./src/logger/ConsoleAppender.ts","webpack://phenix/./src/lang/Numbers.ts","webpack://phenix/./src/sdk/version/VersionManager.ts","webpack://phenix/./src/telemetry/TelemetryService.ts","webpack://phenix/./src/telemetry/TelemetryApender.ts","webpack://phenix/./src/telemetry/TelemetryConfiguration.ts","webpack://phenix/./src/lang/assertUnreachable.ts","webpack://phenix/./src/logger/LoggingLevelMapping.ts","webpack://phenix/./src/metrics/MetricsConfiguration.ts","webpack://phenix/./src/metrics/TelemetryDefault.ts","webpack://phenix/./src/metrics/TelemetricLevelMapping.ts","webpack://phenix/./src/dom/ConfigurationParameterReader.ts","webpack://phenix/./src/logger/LoggerFactory.ts","webpack://phenix/./src/lang/Strings.ts","webpack://phenix/./src/edgeAuth/EdgeToken.ts","webpack://phenix/./src/edgeAuth/EdgeAuthParser.ts","webpack://phenix/./src/lang/DisposableList.ts","webpack://phenix/./src/dom/ApplicationActivityMonitor.ts","webpack://phenix/./src/rtc/VanillaPeerConnection.ts","webpack://phenix/./src/rtc/VanillaPeerConnectionFactory.ts","webpack://phenix/./src/rtc/PeerConnectionService.ts","webpack://phenix/./src/sdk/TelemetryUrl.ts","webpack://phenix/./src/sdk/Environment.ts","webpack://phenix/./src/environment/Parameters.ts","webpack://phenix/./src/sdk/defaults.ts","webpack://phenix/./src/sdk/discovery/DiscoveryUri.ts","webpack://phenix/./src/time/ExponentialBackoff.ts","webpack://phenix/./src/metrics/MetricsType.ts","webpack://phenix/./src/metrics/MetricType.ts","webpack://phenix/./src/metrics/MetricsService.ts","webpack://phenix/./src/metrics/MetricsFactory.ts","webpack://phenix/./src/sdk/SDK.ts","webpack://phenix/./src/video/Dimension.ts","webpack://phenix/./src/dom/GarbageCollectorManager.ts","webpack://phenix/./src/sdk/channels/ChannelState.ts","webpack://phenix/./src/time/Duration.ts","webpack://phenix/./src/video/VideoTelemetry.ts","webpack://phenix/./src/dom/StreamSetupListener.ts","webpack://phenix/./src/dom/NetworkMonitor.ts","webpack://phenix/./src/video/SessionTelemetry.ts","webpack://phenix/./src/sdk/api/SetTemporaryMaximalBitrate.ts","webpack://phenix/./src/sdk/context/TokenContext.ts","webpack://phenix/./src/sdk/context/ChannelContext.ts","webpack://phenix/./src/sdk/transformation/EncodedStreamSink.ts","webpack://phenix/./src/sdk/transformation/StreamTrackTransform.ts","webpack://phenix/./src/sdk/context/StreamTransformContext.ts","webpack://phenix/./src/sdk/context/PeerConnectionContext.ts","webpack://phenix/./src/sdk/context/StateContext.ts","webpack://phenix/./src/sdk/context/FrameTimingInformationContext.ts","webpack://phenix/./src/sdk/discovery/BitrateModeMapping.ts","webpack://phenix/./src/sdk/discovery/BitrateStateMapping.ts","webpack://phenix/./src/sdk/discovery/EndPoint.ts","webpack://phenix/./src/sdk/discovery/DiscoveryService.ts","webpack://phenix/./src/sdk/discovery/Discovery.ts","webpack://phenix/./src/sdk/streaming/NetworkStates.ts","webpack://phenix/./src/sdk/streaming/WebPlayer.ts","webpack://phenix/./src/sdk/streaming/ShakaPlayer.ts","webpack://phenix/./src/sdk/streaming/HlsPlayer.ts","webpack://phenix/./src/sdk/streaming/ChunkedStreaming.ts","webpack://phenix/./src/sdk/streaming/ChunkedStreamPlaybackMode.ts","webpack://phenix/./src/sdk/streaming/VideoFrameDetector.ts","webpack://phenix/./src/sdk/streaming/ChunkedStreamSubscriber.ts","webpack://phenix/./src/rtc/SdpParser.ts","webpack://phenix/./src/rtc/RtcConfigurationManager.ts","webpack://phenix/./src/rtc/RtcConnectionMonitor.ts","webpack://phenix/./src/sdk/decode/bitstream/codec/VideoCodec.ts","webpack://phenix/./src/sdk/transformation/worker/TransformStreamPipelineWorkerMessage.ts","webpack://phenix/./src/sdk/frameTiming/FrameTimingInformationManager.ts","webpack://phenix/./src/sdk/transformation/worker/TransformStreamPipeline.worker.ts","webpack://phenix/./src/sdk/transformation/worker/MessageRouter.ts","webpack://phenix/./src/sdk/transformation/InsertableStreams.ts","webpack://phenix/./src/sdk/decode/bitstream/codec/AudioCodec.ts","webpack://phenix/./src/sdk/decode/bitstream/codec/h264/nalUnit/AnnexBFourByteStartCode.ts","webpack://phenix/./src/sdk/transformation/surrogateFrames/h264/surrogate28x16IFrame.ts","webpack://phenix/./src/sdk/transformation/surrogateFrames/h264/surrogate28x16PFrame.ts","webpack://phenix/./src/sdk/transformation/SurrogateFrameDataManager.ts","webpack://phenix/./src/sdk/transformation/EncodedMediaTransformManager.ts","webpack://phenix/./src/sdk/decode/bitstream/codec/VideoCodecMapping.ts","webpack://phenix/./src/sdk/decode/bitstream/codec/AudioCodecMapping.ts","webpack://phenix/./src/sdk/streaming/RealTimeStreamSubscriber.ts","webpack://phenix/./src/sdk/streaming/StreamSubscriberFactory.ts","webpack://phenix/./src/sdk/channels/Channel.ts","webpack://phenix/./src/sdk/channels/Channels.ts","webpack://phenix/./src/sdk/publish/PublisherState.ts","webpack://phenix/./src/sdk/publish/PublisherContext.ts","webpack://phenix/./src/rtc/RtcPublishMonitor.ts","webpack://phenix/./src/sdk/publish/RealTimePublisher.ts","webpack://phenix/./src/sdk/publish/Publisher.ts","webpack://phenix/./src/sdk/publish/Publishers.ts","webpack://phenix/./src/sdk/full/index.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"phenix\"] = factory();\n\telse\n\t\troot[\"phenix\"] = factory();\n})(self, () => {\nreturn ","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport Promise from './Promise';\n\nexport default class PromiseHandler<T> {\n onFulfilled: Function | null;\n onRejected: Function | null;\n promise: Promise<T>;\n\n constructor(onFulfilled: Function, onRejected: Function, promise: Promise<T>) {\n this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n this.promise = promise;\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\n// Note: This Promise polyfill is included for browser builds only to address compatibility issues\n// with older browsers whose native Promise<T>implementation does not support .finally.\n\nimport PromiseHandler from './PromiseHandler';\n\nclass Promise<T> {\n _state: number;\n _handled: boolean;\n _value: T | unknown;\n _deferreds: Array<PromiseHandler<T>>;\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n then(onFulfilled: Function | null, onRejected: Function | null): Promise<T>| void;\n\n constructor(callback: Function) {\n if (!(this instanceof Promise)) {\n throw new TypeError('Promises must be constructed via new');\n }\n\n if (typeof callback !== 'function') {\n throw new TypeError('not a function');\n }\n\n this._state = 0;\n this._handled = false;\n this._value = null;\n this._deferreds = [];\n\n this.doResolve(callback);\n }\n\n doResolve(callback: Function): void {\n let done = false;\n\n try {\n callback(\n (value: Promise<T>| null) => {\n if (done) {\n return;\n }\n\n done = true;\n this.promiseResolve(value);\n },\n (reason: Promise<T>| null) => {\n if (done) {\n return;\n }\n\n done = true;\n this.promiseReject(reason);\n }\n );\n } catch (error) {\n if (done) {\n return;\n }\n\n done = true;\n this.promiseReject(error);\n }\n }\n\n promiseResolve(newValue: Promise<T>| null | unknown): void {\n const promise = this as Promise<T>;\n\n try {\n // Promise<T>Resolution Procedure: https://github.com/Promises-aplus/Promises-spec#the-Promise-resolution-procedure\n if (newValue === promise) {\n throw new TypeError('A Promise cannot be resolved with it self.');\n }\n\n if (newValue && (typeof newValue === 'object' || typeof newValue === 'function')) {\n // Disabling a TS compiler check for next line to not do extra if statements\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const then = newValue.then;\n\n if (newValue instanceof Promise) {\n promise._state = 3;\n promise._value = newValue;\n promise.finale();\n\n return;\n } else if (typeof then === 'function') {\n promise.doResolve(function(): void {\n // eslint-disable-next-line prefer-rest-params\n then.apply(newValue, arguments as unknown as [onFulfilled: Function, onRejected: Function]);\n });\n\n return;\n }\n }\n\n promise._state = 1;\n promise._value = newValue;\n promise.finale();\n } catch (e) {\n promise.promiseReject(e);\n }\n }\n\n promiseReject(newValue: unknown): void {\n this._state = 2;\n this._value = newValue;\n this.finale();\n }\n\n finale(): void {\n if (this._state === 2 && this._deferreds.length === 0) {\n Promise._immediate(() => {\n if (!this._handled) {\n Promise._unhandledRejection(this._value);\n }\n });\n }\n\n for (let i = 0, len = this._deferreds.length; i < len; i++) {\n this.handle(this._deferreds[i]);\n }\n\n this._deferreds = [];\n }\n\n handle(deferred: PromiseHandler<T>): void {\n let promise = this as Promise<T>;\n\n while (promise._state === 3) {\n promise = promise._value as Promise<T>;\n }\n\n if (promise._state === 0) {\n promise._deferreds.push(deferred);\n\n return;\n }\n\n promise._handled = true;\n Promise._immediate(() => {\n const callback = promise._state === 1 ? deferred.onFulfilled : deferred.onRejected;\n\n if (callback === null) {\n if (promise._state === 1) {\n deferred.promise.promiseResolve(promise._value);\n } else {\n deferred.promise.promiseReject(promise._value);\n }\n\n return;\n }\n\n let result;\n\n try {\n result = callback(promise._value);\n } catch (e) {\n deferred.promise.promiseReject(e);\n\n return;\n }\n\n deferred.promise.promiseResolve(result);\n });\n }\n\n static all(arr: Array<Promise<unknown>>): Promise<unknown> {\n return new Promise((resolve: Function, reject: Function) => {\n if (!Array.isArray(arr)) {\n return reject(new TypeError('Promise.all accepts an array'));\n }\n\n const args = Array.prototype.slice.call(arr);\n\n if (args.length === 0) {\n return resolve([]);\n }\n\n let remaining = args.length;\n const manageResponse = (i: number, value: Promise<unknown>): void => {\n try {\n if (value && (typeof value === 'object' || typeof value === 'function')) {\n const then = value.then;\n\n if (typeof then === 'function') {\n then.call(\n value,\n (value: Promise<unknown>) => manageResponse(i, value),\n reject\n );\n\n return;\n }\n }\n\n args[i] = value;\n\n if (--remaining === 0) {\n resolve(args);\n }\n } catch (error) {\n reject(error);\n }\n };\n\n for (let i = 0; i < args.length; i++) {\n manageResponse(i, args[i]);\n }\n });\n }\n\n static resolve(value: unknown): Promise<unknown> {\n if (value && typeof value === 'object' && value.constructor === Promise) {\n return value;\n }\n\n return new Promise((resolve: Function) => resolve(value));\n }\n\n static reject(value: unknown): Promise<unknown> {\n return new Promise((_: undefined, reject: Function) => reject(value));\n }\n\n static race(arr: Array<Promise<unknown>>): Promise<unknown> {\n return new Promise((resolve: Function, reject: Function) => {\n if (!Array.isArray(arr)) {\n return reject(new TypeError('Promise.race accepts an array'));\n }\n\n for (let i = 0, len = arr.length; i < len; i++) {\n Promise.resolve(arr[i]).then(resolve, reject);\n }\n });\n }\n\n static _immediate(callback: Function): void {\n const ignored = window.setTimeout(callback, 0);\n }\n\n static _unhandledRejection(error: Promise<unknown>| null | unknown): void {\n if (typeof console !== 'undefined' && console) {\n console.warn('Possible Unhandled Promise Rejection:', error); // eslint-disable-line no-console\n }\n }\n}\n\n// Disabling a TS compiler check for unsupported prototype change\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nPromise.prototype['catch'] = function(onRejected: Function): unknown {\n return this.then(null, onRejected);\n};\n// Disabling a TS compiler check for unsupported prototype change\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nPromise.prototype['then'] = function(onFulfilled: Function, onRejected: Function): Promise<unknown>| void {\n const promise = new Promise((): null => null);\n\n this.handle(new PromiseHandler<unknown>(onFulfilled, onRejected, promise));\n\n return promise;\n};\n// Disabling a TS compiler check for unsupported prototype change\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nPromise.prototype['finally'] = function(callback: Function): Promise<unknown>| void {\n return this.then(\n (value: Promise<unknown>| undefined) => Promise.resolve(callback()).then(() => value, (): null => null),\n (reason: Error | string) => Promise.resolve(callback()).then(() => Promise.reject(reason), (): null => null)\n );\n};\n\nexport default Promise;","\"use strict\";\n\n/* eslint-env browser */\n\n/* eslint-disable no-undef, no-use-before-define, new-cap */\nmodule.exports = function (content, workerConstructor, workerOptions, url) {\n var globalScope = self || window;\n\n try {\n try {\n var blob;\n\n try {\n // New API\n blob = new globalScope.Blob([content]);\n } catch (e) {\n // BlobBuilder = Deprecated, but widely implemented\n var BlobBuilder = globalScope.BlobBuilder || globalScope.WebKitBlobBuilder || globalScope.MozBlobBuilder || globalScope.MSBlobBuilder;\n blob = new BlobBuilder();\n blob.append(content);\n blob = blob.getBlob();\n }\n\n var URL = globalScope.URL || globalScope.webkitURL;\n var objectURL = URL.createObjectURL(blob);\n var worker = new globalScope[workerConstructor](objectURL, workerOptions);\n URL.revokeObjectURL(objectURL);\n return worker;\n } catch (e) {\n return new globalScope[workerConstructor](\"data:application/javascript,\".concat(encodeURIComponent(content)), workerOptions);\n }\n } catch (e) {\n if (!url) {\n throw Error(\"Inline worker is not supported\");\n }\n\n return new globalScope[workerConstructor](url, workerOptions);\n }\n};","function _arrayLikeToArray(r, a) {\n (null == a || a > r.length) && (a = r.length);\n for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];\n return n;\n}\nmodule.exports = _arrayLikeToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _arrayWithHoles(r) {\n if (Array.isArray(r)) return r;\n}\nmodule.exports = _arrayWithHoles, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var arrayLikeToArray = require(\"./arrayLikeToArray.js\");\nfunction _arrayWithoutHoles(r) {\n if (Array.isArray(r)) return arrayLikeToArray(r);\n}\nmodule.exports = _arrayWithoutHoles, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _assertThisInitialized(e) {\n if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n return e;\n}\nmodule.exports = _assertThisInitialized, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function asyncGeneratorStep(n, t, e, r, o, a, c) {\n try {\n var i = n[a](c),\n u = i.value;\n } catch (n) {\n return void e(n);\n }\n i.done ? t(u) : Promise.resolve(u).then(r, o);\n}\nfunction _asyncToGenerator(n) {\n return function () {\n var t = this,\n e = arguments;\n return new Promise(function (r, o) {\n var a = n.apply(t, e);\n function _next(n) {\n asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n);\n }\n function _throw(n) {\n asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n);\n }\n _next(void 0);\n });\n };\n}\nmodule.exports = _asyncToGenerator, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _classCallCheck(a, n) {\n if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\");\n}\nmodule.exports = _classCallCheck, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var toPropertyKey = require(\"./toPropertyKey.js\");\nfunction _defineProperties(e, r) {\n for (var t = 0; t < r.length; t++) {\n var o = r[t];\n o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, toPropertyKey(o.key), o);\n }\n}\nfunction _createClass(e, r, t) {\n return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", {\n writable: !1\n }), e;\n}\nmodule.exports = _createClass, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var toPropertyKey = require(\"./toPropertyKey.js\");\nfunction _defineProperty(e, r, t) {\n return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n value: t,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }) : e[r] = t, e;\n}\nmodule.exports = _defineProperty, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _getPrototypeOf(t) {\n return (module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) {\n return t.__proto__ || Object.getPrototypeOf(t);\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports), _getPrototypeOf(t);\n}\nmodule.exports = _getPrototypeOf, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var setPrototypeOf = require(\"./setPrototypeOf.js\");\nfunction _inherits(t, e) {\n if (\"function\" != typeof e && null !== e) throw new TypeError(\"Super expression must either be null or a function\");\n t.prototype = Object.create(e && e.prototype, {\n constructor: {\n value: t,\n writable: !0,\n configurable: !0\n }\n }), Object.defineProperty(t, \"prototype\", {\n writable: !1\n }), e && setPrototypeOf(t, e);\n}\nmodule.exports = _inherits, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _iterableToArray(r) {\n if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r);\n}\nmodule.exports = _iterableToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _iterableToArrayLimit(r, l) {\n var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"];\n if (null != t) {\n var e,\n n,\n i,\n u,\n a = [],\n f = !0,\n o = !1;\n try {\n if (i = (t = t.call(r)).next, 0 === l) {\n if (Object(t) !== t) return;\n f = !1;\n } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);\n } catch (r) {\n o = !0, n = r;\n } finally {\n try {\n if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return;\n } finally {\n if (o) throw n;\n }\n }\n return a;\n }\n}\nmodule.exports = _iterableToArrayLimit, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nmodule.exports = _nonIterableRest, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nmodule.exports = _nonIterableSpread, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var objectWithoutPropertiesLoose = require(\"./objectWithoutPropertiesLoose.js\");\nfunction _objectWithoutProperties(e, t) {\n if (null == e) return {};\n var o,\n r,\n i = objectWithoutPropertiesLoose(e, t);\n if (Object.getOwnPropertySymbols) {\n var n = Object.getOwnPropertySymbols(e);\n for (r = 0; r < n.length; r++) o = n[r], t.indexOf(o) >= 0 || {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);\n }\n return i;\n}\nmodule.exports = _objectWithoutProperties, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _objectWithoutPropertiesLoose(r, e) {\n if (null == r) return {};\n var t = {};\n for (var n in r) if ({}.hasOwnProperty.call(r, n)) {\n if (e.indexOf(n) >= 0) continue;\n t[n] = r[n];\n }\n return t;\n}\nmodule.exports = _objectWithoutPropertiesLoose, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\nvar assertThisInitialized = require(\"./assertThisInitialized.js\");\nfunction _possibleConstructorReturn(t, e) {\n if (e && (\"object\" == _typeof(e) || \"function\" == typeof e)) return e;\n if (void 0 !== e) throw new TypeError(\"Derived constructors may only return object or undefined\");\n return assertThisInitialized(t);\n}\nmodule.exports = _possibleConstructorReturn, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _setPrototypeOf(t, e) {\n return (module.exports = _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {\n return t.__proto__ = e, t;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports), _setPrototypeOf(t, e);\n}\nmodule.exports = _setPrototypeOf, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var arrayWithHoles = require(\"./arrayWithHoles.js\");\nvar iterableToArrayLimit = require(\"./iterableToArrayLimit.js\");\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray.js\");\nvar nonIterableRest = require(\"./nonIterableRest.js\");\nfunction _slicedToArray(r, e) {\n return arrayWithHoles(r) || iterableToArrayLimit(r, e) || unsupportedIterableToArray(r, e) || nonIterableRest();\n}\nmodule.exports = _slicedToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var arrayWithoutHoles = require(\"./arrayWithoutHoles.js\");\nvar iterableToArray = require(\"./iterableToArray.js\");\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray.js\");\nvar nonIterableSpread = require(\"./nonIterableSpread.js\");\nfunction _toConsumableArray(r) {\n return arrayWithoutHoles(r) || iterableToArray(r) || unsupportedIterableToArray(r) || nonIterableSpread();\n}\nmodule.exports = _toConsumableArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\nfunction toPrimitive(t, r) {\n if (\"object\" != _typeof(t) || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != _typeof(i)) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\nmodule.exports = toPrimitive, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\nvar toPrimitive = require(\"./toPrimitive.js\");\nfunction toPropertyKey(t) {\n var i = toPrimitive(t, \"string\");\n return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nmodule.exports = toPropertyKey, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return (module.exports = _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports), _typeof(o);\n}\nmodule.exports = _typeof, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var arrayLikeToArray = require(\"./arrayLikeToArray.js\");\nfunction _unsupportedIterableToArray(r, a) {\n if (r) {\n if (\"string\" == typeof r) return arrayLikeToArray(r, a);\n var t = {}.toString.call(r).slice(8, -1);\n return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? arrayLikeToArray(r, a) : void 0;\n }\n}\nmodule.exports = _unsupportedIterableToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport IDisposable from './IDisposable';\n\nexport default class Disposable implements IDisposable {\n private _disposed: boolean;\n private _disposable: () => void;\n\n constructor(disposable: () => void) {\n this._disposed = false;\n this._disposable = disposable;\n }\n\n dispose(): void {\n if (this._disposed) {\n return;\n }\n\n this._disposed = true;\n\n return this._disposable.call(this);\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport IDisposable from '../lang/IDisposable';\nimport Disposable from '../lang/Disposable';\nimport IComparable from '../lang/IComparable';\n\nclass DisposableListener<T> extends Disposable {\n constructor(listeners: T[], listener: T) {\n super(() => {\n const idx = listeners.indexOf(listener);\n\n if (idx >= 0) {\n listeners.splice(idx, 1);\n }\n });\n }\n}\n\nexport default class Subject<T> {\n private readonly _listeners: ((value: T) => void)[];\n private _value: T;\n\n constructor(value: T) {\n this._listeners = [];\n this._value = value;\n }\n\n set value(value: T) {\n let changed = this._value !== value;\n\n if (changed && value) {\n const comparable = value as unknown as IComparable<T>;\n\n if (typeof comparable.equals === 'function') {\n changed = !comparable.equals(this._value);\n }\n }\n\n if (!changed) {\n return;\n }\n\n this._value = value;\n\n for (const listener of [...this._listeners]) {\n listener(value);\n }\n }\n\n get value(): T {\n return this._value;\n }\n\n subscribe(listener: (value: T) => void): IDisposable {\n this._listeners.push(listener);\n\n listener(this._value);\n\n return new DisposableListener<(value: T) => void>(this._listeners, listener);\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport Subject from './Subject';\nimport IDisposable from '../lang/IDisposable';\n\nexport default class ReadOnlySubject<T> {\n private readonly _subject: Subject<T>;\n\n constructor(subject: Subject<T>) {\n this._subject = subject;\n }\n\n get value(): T {\n return this._subject.value;\n }\n\n subscribe(listener: (value: T) => void): IDisposable {\n return this._subject.subscribe(listener);\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport IGlobalScope from './IGlobalScope';\nimport IDocument from './IDocument';\nimport ILocation from './ILocation';\nimport INetworkInformation from './INetworkInformation';\nimport INavigator from './INavigator';\nimport IWindow from './IWindow';\nimport IProvidedGlobalScope from './IProvidedGlobalScope';\nimport IDisposable from '../lang/IDisposable';\nimport Subject from '../rx/Subject';\nimport ReadOnlySubject from '../rx/ReadOnlySubject';\n\ntype BrowserGlobalScope = IProvidedGlobalScope;\n\nconst browserGlobalScope: BrowserGlobalScope = {\n document,\n location,\n navigator,\n window\n};\n\nexport class GlobalScope implements IGlobalScope {\n private static readonly _instance = new Subject<IGlobalScope>(new GlobalScope(browserGlobalScope));\n private static readonly _readOnlyInstance: ReadOnlySubject<IGlobalScope> = new ReadOnlySubject(GlobalScope._instance);\n private readonly _document: IDocument;\n private readonly _location: ILocation;\n private readonly _navigator: INavigator;\n private readonly _window: IWindow;\n\n constructor(globalScope: BrowserGlobalScope) {\n this._document = globalScope.document;\n this._location = globalScope.location;\n this._navigator = globalScope.navigator;\n this._window = globalScope.window;\n }\n\n // This method is required to maintain API consistency with ProvidedGlobalScope\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public static setInstance(providedGlobalScope: IProvidedGlobalScope): void {\n throw new Error('This build does not support setting the GlobalScope');\n }\n\n public static getInstance(): ReadOnlySubject<IGlobalScope> {\n return GlobalScope._readOnlyInstance;\n }\n\n public static subscribe(callback: (value: IGlobalScope | null) => void): IDisposable {\n return GlobalScope._readOnlyInstance.subscribe(callback);\n }\n\n get FormData(): typeof FormData {\n return this._window.FormData;\n }\n\n get HTMLVideoElement(): typeof HTMLVideoElement {\n return this._window.HTMLVideoElement;\n }\n\n get MediaStream(): typeof MediaStream {\n return this._window.MediaStream;\n }\n\n get MediaStreamTrack(): typeof MediaStreamTrack {\n return this._window.MediaStreamTrack;\n }\n\n get MediaSource(): typeof MediaSource {\n return this._window.MediaSource;\n }\n\n get RTCPeerConnection(): typeof RTCPeerConnection {\n return this._window.RTCPeerConnection;\n }\n\n get RTCSessionDescription(): typeof RTCSessionDescription {\n return this._window.RTCSessionDescription;\n }\n\n get RTCIceCandidate(): typeof RTCIceCandidate {\n return this._window.RTCIceCandidate;\n }\n\n get URL(): typeof URL {\n return this._window.URL;\n }\n\n get URLSearchParams(): typeof URLSearchParams {\n return this._window.URLSearchParams;\n }\n\n get addDocumentEventListener(): (type: string, listener: (event: Event) => void, options?: boolean | AddEventListenerOptions) => void {\n return this._document.addEventListener.bind(this._document);\n }\n\n get addWindowEventListener(): (type: string, listener: (event: Event) => void, options?: boolean | AddEventListenerOptions) => void {\n return this._window.addEventListener.bind(this._window);\n }\n\n get clearInterval(): (id?: number | undefined) => void {\n return this._window.clearInterval.bind(this._window);\n }\n\n get clearTimeout(): (id?: number | undefined) => void {\n return this._window.clearTimeout.bind(this._window);\n }\n\n get documentCreateElement(): <Element extends HTMLElement>(tag: string) => Element {\n return this._document.createElement.bind(this._document);\n }\n\n get documentHasFocus(): () => boolean {\n return this._document.hasFocus.bind(this._document);\n }\n\n get documentIsHidden(): boolean {\n return !!this._document.hidden;\n }\n\n get documentQuerySelector(): <Element extends HTMLElement>(tag: string) => Element | null {\n return this._document.querySelector.bind(this._document);\n }\n\n get fetch(): (input: string | URL | Request, init?: RequestInit) => Promise<Response> {\n return this._window.fetch.bind(this._window);\n }\n\n get locationHostname(): string {\n return this._location.hostname;\n }\n\n get locationSearch(): string {\n return this._location.search;\n }\n\n get navigatorConnection(): INetworkInformation | undefined {\n return this._navigator.connection;\n }\n\n get navigatorIsOnLine(): boolean {\n return this._navigator.onLine;\n }\n\n get pageLoadTime(): number | undefined {\n return this._window['__phenixPageLoadTime'] || this._window['__pageLoadTime'];\n }\n\n get queueMicrotask(): (microtask: () => void) => void {\n return this._window.queueMicrotask.bind(this._window);\n }\n\n get removeDocumentEventListener(): (type: string, listener: (event: Event) => void, options?: boolean | AddEventListenerOptions) => void {\n return this._document.removeEventListener.bind(this._document);\n }\n\n get requestAnimationFrame(): (callback: FrameRequestCallback) => number {\n return this._window.requestAnimationFrame.bind(this._window);\n }\n\n get removeWindowEventListener(): (type: string, listener: (event: Event) => void, options?: boolean | AddEventListenerOptions) => void {\n return this._window.removeEventListener.bind(this._window);\n }\n\n get setInterval(): (handler: string | Function, timeout?: number | undefined) => number {\n return this._window.setInterval.bind(this._window);\n }\n\n get setTimeout(): (handler: string | Function, timeout?: number | undefined) => number {\n return this._window.setTimeout.bind(this._window);\n }\n}\n\nexport default GlobalScope.getInstance();","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nexport default class BrowserDetector {\n private static readonly _browserNameAndVersionRegex = /(MSIE|(?!Gecko.+)Firefox|(?!AppleWebKit.+Chrome.+)Safari|(?!AppleWebKit.+)Chrome|AppleWebKit(?!.+Chrome|.+Safari)|Gecko(?!.+Firefox))(?: |\\/)([\\d.apre]+)/g;\n private static readonly _browserNameAndVersion = BrowserDetector.parseBrowserNameAndVersion();\n private static readonly _browserName = BrowserDetector.parseBrowserName();\n private static readonly _browserMajorVersion = BrowserDetector.parseBrowserMajorVersion();\n\n private static readonly _isMobile = (/Android|iPhone|iPad|iPod|BlackBerry|Opera Mini/i).test(navigator?.userAgent);\n private static readonly _isAndroid = (/Android/i).test(navigator?.userAgent);\n\n private static readonly _isChrome69 = BrowserDetector._browserNameAndVersion.includes('Chrome/69.');\n private static readonly _isChrome70 = BrowserDetector._browserNameAndVersion.includes('Chrome/70.');\n private static readonly _isChrome71 = BrowserDetector._browserNameAndVersion.includes('Chrome/71.');\n private static readonly _isChrome72 = BrowserDetector._browserNameAndVersion.includes('Chrome/72.');\n private static readonly _isChrome74 = BrowserDetector._browserNameAndVersion.includes('Chrome/74.');\n private static readonly _isChrome75 = BrowserDetector._browserNameAndVersion.includes('Chrome/75.');\n private static readonly _isChrome76 = BrowserDetector._browserNameAndVersion.includes('Chrome/76.');\n private static readonly _isChrome77 = BrowserDetector._browserNameAndVersion.includes('Chrome/77.');\n\n static get browserNameAndVersion(): string {\n return BrowserDetector._browserNameAndVersion;\n }\n\n static get browserName(): string {\n return this._browserName;\n }\n\n static get browserMajorVersion(): number {\n return this._browserMajorVersion;\n }\n\n static get isAndroid(): boolean {\n return BrowserDetector._isAndroid;\n }\n\n static get isChrome69(): boolean {\n return BrowserDetector._isChrome69;\n }\n\n static get isChrome70(): boolean {\n return BrowserDetector._isChrome70;\n }\n\n static get isChrome71(): boolean {\n return BrowserDetector._isChrome71;\n }\n\n static get isChrome72(): boolean {\n return BrowserDetector._isChrome72;\n }\n\n static get isChrome74(): boolean {\n return BrowserDetector._isChrome74;\n }\n\n static get isChrome75(): boolean {\n return BrowserDetector._isChrome75;\n }\n\n static get isChrome76(): boolean {\n return BrowserDetector._isChrome76;\n }\n\n static get isChrome77(): boolean {\n return BrowserDetector._isChrome77;\n }\n\n static isMobile(): boolean {\n return BrowserDetector._isMobile;\n }\n\n private static parseBrowserNameAndVersion(): string {\n if (!navigator || !navigator.userAgent) {\n return '';\n }\n\n const browserNameAndVersion = navigator.userAgent.match(BrowserDetector._browserNameAndVersionRegex);\n\n if (browserNameAndVersion && browserNameAndVersion[0]) {\n return browserNameAndVersion[0];\n }\n\n return BrowserDetector.parseBrowserNameAndVersionForIE();\n }\n\n private static parseBrowserName(): string {\n if (!BrowserDetector._browserNameAndVersion) {\n return '';\n }\n\n const browserNameList = BrowserDetector._browserNameAndVersion.split('/');\n\n if (!browserNameList || !browserNameList[0]) {\n return '';\n }\n\n return browserNameList[0];\n }\n\n private static parseBrowserMajorVersion(): number {\n if (!BrowserDetector._browserNameAndVersion) {\n return 0;\n }\n\n const browserVersionList = BrowserDetector._browserNameAndVersion.split('/');\n\n if (!browserVersionList || !browserVersionList[1]) {\n return 0;\n }\n\n const fullVersion = browserVersionList[1];\n\n if (!fullVersion) {\n return 0;\n }\n\n return Number(fullVersion.split('.')[0]) || 0;\n }\n\n private static parseBrowserNameAndVersionForIE(): string {\n if (!navigator || !navigator.userAgent) {\n return '';\n }\n\n const userAgent = navigator.userAgent;\n const msie = userAgent.indexOf('MSIE ');\n\n if (msie > 0) {\n // IE 10 or older => return version number\n return `IE/${parseInt(userAgent.substring(msie + 5, userAgent.indexOf('.', msie)), 10)}`;\n }\n\n const trident = userAgent.indexOf('Trident/');\n\n if (trident > 0) {\n // IE 11 => return version number\n const version = userAgent.indexOf('rv:');\n\n return `IE/${parseInt(userAgent.substring(version + 3, userAgent.indexOf('.', version)), 10)}`;\n }\n\n return '';\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport GlobalScope from '../globalScope/GlobalScope';\nimport BrowserDetector from '../dom/BrowserDetector';\n\nexport default class FeatureEnablement {\n static get clientOfferDisabled(): boolean {\n // Client offer workflow does not work correctly in the following browsers\n return BrowserDetector.isChrome74 ||\n BrowserDetector.isChrome75 ||\n BrowserDetector.isChrome76 ||\n BrowserDetector.isChrome77;\n }\n\n static get getTransceiversDisabled(): boolean {\n return FeatureEnablement.addTranceiverDisabled;\n }\n\n static get addTranceiverDisabled(): boolean {\n // Chrome 69, 70, 71, 72 exposes `addTranceiver` but it does not work correctly\n return BrowserDetector.isChrome69 ||\n BrowserDetector.isChrome70 ||\n BrowserDetector.isChrome71 ||\n BrowserDetector.isChrome72;\n }\n\n static get getStatsPromiseBasedDisabled(): boolean {\n return BrowserDetector.browserName === 'Chrome' && BrowserDetector.browserMajorVersion <= 66;\n }\n\n static get getCurrentOfferDisabled(): boolean {\n return BrowserDetector.browserName === 'Chrome' && BrowserDetector.browserMajorVersion <= 69 ||\n BrowserDetector.browserName === 'Firefox' && BrowserDetector.browserMajorVersion <= 56;\n }\n\n static get onTrackDisabled(): boolean {\n return BrowserDetector.browserName === 'Chrome' && BrowserDetector.browserMajorVersion <= 63 ||\n BrowserDetector.browserName === 'Firefox' && BrowserDetector.browserMajorVersion <= 52;\n }\n\n static get webkitRTCPeerConnectionEnabled(): boolean {\n return BrowserDetector.browserName === 'Chrome' && BrowserDetector.browserMajorVersion <= 55;\n }\n\n static get promiseBasedPCMethodsDisabled(): boolean {\n return BrowserDetector.browserName === 'Firefox' && BrowserDetector.browserMajorVersion <= 52;\n }\n\n static get shouldUseNativeHls(): boolean {\n return BrowserDetector.browserName === 'Safari' ||\n BrowserDetector.browserName === 'SamsungBrowser';\n }\n\n static get isPrecachingEnabled(): boolean {\n return BrowserDetector.browserName !== 'IE';\n }\n\n static get isForceChromeGarbageCollectionSupported(): boolean {\n return BrowserDetector.browserName === 'Chrome' && typeof GlobalScope.value?.documentCreateElement === 'function';\n }\n\n static get isQueueMicrotaskSupported(): boolean {\n return BrowserDetector.browserName === 'Chrome' && BrowserDetector.browserMajorVersion >= 71 ||\n BrowserDetector.browserName === 'Firefox' && BrowserDetector.browserMajorVersion >= 69 ||\n BrowserDetector.browserName === 'Safari';\n }\n\n static get isMobile(): boolean {\n return BrowserDetector.isMobile();\n }\n\n static get isInsertableStreamsSupported(): boolean {\n return !(typeof MediaStreamTrackProcessor === 'undefined' ||\n typeof MediaStreamTrackGenerator === 'undefined');\n }\n\n static get isEncodedInsertableStreamsSupported(): boolean {\n return typeof RTCRtpReceiver !== 'undefined' && typeof RTCRtpReceiver.prototype.createEncodedStreams !== 'undefined';\n }\n\n static get isRTCRtpScriptTransformSupported(): boolean {\n return typeof RTCRtpScriptTransform !== 'undefined';\n }\n\n static get isRequestVideoFrameCallbackSupported(): boolean {\n return typeof GlobalScope.value?.HTMLVideoElement.prototype.requestVideoFrameCallback !== 'undefined';\n }\n\n static get isRequestAnimationFrameSupported(): boolean {\n return typeof GlobalScope.value?.requestAnimationFrame === 'function';\n }\n\n static get isChannelFrameTimingInformationSupported(): boolean {\n return FeatureEnablement.isRequestVideoFrameCallbackSupported\n && (FeatureEnablement.isEncodedInsertableStreamsSupported || FeatureEnablement.isRTCRtpScriptTransformSupported);\n }\n\n static get errorStackAlsoHasErrorMessage(): boolean {\n return BrowserDetector.browserName !== 'Firefox' && BrowserDetector.browserName !== 'Safari';\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {IAppender} from './IAppender';\nimport Appenders from './Appenders';\nimport LoggingThreshold from './LoggingThreshold';\nimport FeatureEnablement from '../environment/FeatureEnablement';\n\nexport enum LoggingLevel {\n All = -1,\n Trace = 10,\n Debug = 20,\n Info = 30,\n Warn = 40,\n Error = 50,\n Fatal = 60,\n Off = 100,\n}\n\nexport type LoggingLevelType = 'Off' | 'Trace' | 'Debug' | 'Info' | 'Warn' | 'Error' | 'Fatal' | 'All';\n\nexport default class Logger {\n private readonly _category: string;\n private readonly _appenders: Appenders;\n private readonly _threshold: LoggingThreshold;\n\n get category(): string {\n return this._category;\n }\n\n get appenders(): Appenders {\n return this._appenders;\n }\n\n get threshold(): LoggingThreshold {\n return this._threshold;\n }\n\n trace(...args: any): void {\n if (!this._threshold.value || this._threshold.value > LoggingLevel.Trace) {\n return;\n }\n\n this.log(LoggingLevel.Trace, args);\n }\n\n debug(...args: any): void {\n if (!this._threshold.value || this._threshold.value > LoggingLevel.Debug) {\n return;\n }\n\n this.log(LoggingLevel.Debug, args);\n }\n\n info(...args: any): void {\n if (!this._threshold.value || this._threshold.value > LoggingLevel.Info) {\n return;\n }\n\n this.log(LoggingLevel.Info, args);\n }\n\n warn(...args: any): void {\n if (!this._threshold.value || this._threshold.value > LoggingLevel.Warn) {\n return;\n }\n\n this.log(LoggingLevel.Warn, args);\n }\n\n error(...args: any): void {\n if (!this._threshold.value || this._threshold.value > LoggingLevel.Error) {\n return;\n }\n\n this.log(LoggingLevel.Error, args);\n }\n\n fatal(...args: any): void {\n if (!this._threshold.value || this._threshold.value > LoggingLevel.Fatal) {\n return;\n }\n\n this.log(LoggingLevel.Fatal, args);\n }\n\n private log(level: number, args: any): void {\n const date = new Date();\n const message = this.replacePlaceholders(args);\n\n this._appenders.value.forEach((appender: IAppender) => {\n appender.log(level, message, this.category, date);\n });\n }\n\n private replacePlaceholders(args: any): string {\n let replacePlaceholdersString = args[0];\n let index = 0;\n\n while (replacePlaceholdersString.indexOf && args.length > 1 && index >= 0) {\n index = replacePlaceholdersString.indexOf('%', index);\n\n if (index > 0) {\n const type = replacePlaceholdersString.substring(index + 1, index + 2);\n\n switch (type) {\n case '%':\n // Escaped '%%' turns into '%'\n replacePlaceholdersString = replacePlaceholdersString.substring(0, index) + replacePlaceholdersString.substring(index + 1);\n index++;\n\n break;\n case 's':\n case 'd':\n // Replace '%d' or '%s' with the argument\n args[0] = replacePlaceholdersString = this.replaceArgument(\n this.toString(args[1]),\n replacePlaceholdersString,\n index\n );\n args.splice(1, 1);\n\n break;\n case 'j':\n // Replace %j' with the argument\n args[0] = replacePlaceholdersString = this.replaceArgument(\n this.stringify(args[1]),\n replacePlaceholdersString,\n index\n );\n\n args.splice(1, 1);\n\n break;\n default:\n return args.toString();\n }\n }\n }\n\n if (args.length > 1) {\n args = args.reduce((accumulator: string, currentValue: string | Error, index: number, array: string[]) => {\n if (index + 1 === array.length && currentValue instanceof Error) {\n if (FeatureEnablement.errorStackAlsoHasErrorMessage) {\n return accumulator + '\\n' + this.toString(currentValue.stack);\n }\n\n return accumulator + '\\n' + this.toString(currentValue.message) + '\\n' + this.toString(currentValue.stack);\n }\n\n return accumulator + `[${this.toString(currentValue)}]`;\n });\n }\n\n return args.toString();\n }\n\n private stringify(arg: any): string {\n const cache: object[] = [];\n\n try {\n return JSON.stringify(\n arg instanceof Error ? this.toString(arg) : arg,\n (_, value) => {\n if (!!value && value instanceof Object) {\n if (cache.includes(value)) {\n return '<recursive>';\n }\n\n cache.push(value);\n }\n\n return value;\n },\n 2\n );\n } catch (e) {\n return '[object invalid JSON.stringify]';\n }\n }\n\n private replaceArgument(argument: any, replacePlaceholdersString: string, index: number): string {\n return replacePlaceholdersString.substring(0, index) + this.toString(argument) + replacePlaceholdersString.substring(index + 2);\n }\n\n private toString(data: any): string {\n if (typeof data === 'string') {\n return data;\n }\n\n if (typeof data === 'boolean') {\n return data ? 'true' : 'false';\n }\n\n if (typeof data === 'number') {\n return data.toString();\n }\n\n let toStringStr = '';\n\n if (data) {\n if (typeof data === 'function') {\n toStringStr = data.toString();\n } else if (data instanceof Object) {\n try {\n toStringStr = data.toString();\n } catch (e) {\n toStringStr = '[object invalid toString()]';\n }\n }\n }\n\n return toStringStr;\n }\n\n constructor(category: string, appenders: Appenders, threshold: LoggingThreshold) {\n this._category = category;\n this._appenders = appenders;\n this._threshold = threshold;\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport {IAppender} from './IAppender';\n\nexport default class Appenders {\n private _appenders: Array<IAppender> = [];\n\n get value(): Array<IAppender> {\n return this._appenders;\n }\n\n add(appender: IAppender): void {\n this._appenders.push(appender);\n }\n\n remove(appender: IAppender): void {\n this._appenders = this._appenders.reduce((items, item) => {\n if (!(item === appender)) {\n items.push(item);\n }\n\n return items;\n }, [] as Array<IAppender>);\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport {LoggingLevelType} from '../logger/Logger';\nimport {TelemetryLevelType} from '../metrics/MetricsConfiguration';\n\ndeclare const __FEATURES__: {\n sendLocalCandidates: boolean;\n sendLogs: LoggingLevelType;\n sendMetrics: TelemetryLevelType;\n logToConsole: LoggingLevelType;\n};\n\nexport default class BuildFeatures {\n private static _sendLocalCandidates: boolean;\n private static _sendLogs: LoggingLevelType;\n private static _sendMetrics: TelemetryLevelType;\n private static _logToConsole: LoggingLevelType;\n\n static get sendLocalCandidates(): boolean {\n return this._sendLocalCandidates;\n }\n\n static get sendLogs(): LoggingLevelType {\n return this._sendLogs;\n }\n\n static get sendMetrics(): TelemetryLevelType {\n return this._sendMetrics;\n }\n\n static get logToConsole(): LoggingLevelType {\n return this._logToConsole;\n }\n\n static applyFeatures(): void {\n try {\n const features = __FEATURES__;\n\n this._sendLocalCandidates = 'sendLocalCandidates' in features ? features.sendLocalCandidates : true;\n this._sendLogs = 'sendLogs' in features ? features.sendLogs : 'All';\n this._sendMetrics = 'sendMetrics' in features ? features.sendMetrics : 'All';\n this._logToConsole = 'logToConsole' in features ? features.logToConsole : 'All';\n } catch (e) {\n this._sendLocalCandidates = true;\n this._sendLogs = 'All';\n this._sendMetrics = 'All';\n this._logToConsole = 'All';\n }\n }\n}\n\nBuildFeatures.applyFeatures();","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport BuildFeatures from '../environment/BuildFeatures';\nimport {LoggingLevel} from '../logger/Logger';\n\nexport default class LoggerDefaults {\n static get defaultLoggingLevel(): LoggingLevel {\n return LoggingLevel[BuildFeatures.sendLogs];\n }\n\n static get defaultConsoleLoggingLevel(): LoggingLevel {\n return LoggingLevel[BuildFeatures.logToConsole];\n }\n\n static get defaultTelemetryLoggingLevel(): LoggingLevel {\n return LoggingLevel.Info;\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport LoggerDefaults from './LoggerDefaults';\nimport {LoggingLevel} from './Logger';\n\nexport default class LoggingThreshold {\n private _threshold: LoggingLevel = LoggerDefaults.defaultLoggingLevel;\n\n get value(): LoggingLevel {\n return this._threshold;\n }\n\n setThreshold(threshold: LoggingLevel): void {\n this._threshold = threshold;\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport {IAppender} from './IAppender';\nimport {LoggingLevel} from './Logger';\n\nexport default class ConsoleAppender implements IAppender {\n private readonly _threshold: LoggingLevel;\n\n log(logLevel: LoggingLevel, message: string, category: string, date: Date): void {\n if (logLevel < this._threshold) {\n return;\n }\n\n const fullMessage = `${date.toISOString()} [${category}] [${LoggingLevel[logLevel]}] ${message}`;\n\n if (logLevel < LoggingLevel.Warn) {\n console.log(fullMessage);\n\n return;\n }\n\n console.error(fullMessage);\n }\n\n constructor(threshold: LoggingLevel) {\n this._threshold = threshold;\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\n// As float in ECMAScript use 64-bit format it cannot have/handle more than 15 symbols after dot.\nconst maxDigitsInFloatAfterDot = 15;\n\nexport default class Numbers {\n static countNumberLength(value: number): number {\n let incrementForNegativeValue = 0;\n let number = value;\n\n if (number < 0) {\n number *= -1;\n incrementForNegativeValue++;\n }\n\n return Numbers.countDigitsBeforeDecimal(number) + incrementForNegativeValue + (number !== Math.floor(number) ? Numbers.countDigitsAfterDecimal(number) + 1 : 0);\n }\n\n private static fixRounding(value: number, precision: number): number {\n const power = Math.pow(10, precision);\n\n return Math.round(value * power) / power;\n }\n\n private static countDigitsBeforeDecimal(value: number): number {\n let digitsBeforeDecimal = 1;\n let number = value;\n\n while (number >= 10) {\n number = number / 10;\n digitsBeforeDecimal++;\n }\n\n return digitsBeforeDecimal;\n }\n\n private static countDigitsAfterDecimal(value: number): number {\n const originalValue = value;\n let modifiedValue = Math.floor(value);\n let count = 0;\n\n while (modifiedValue !== originalValue && count < maxDigitsInFloatAfterDot) {\n count++;\n modifiedValue = Numbers.fixRounding(originalValue, count);\n }\n\n return count;\n }\n\n private constructor() {\n throw new Error('Numbers is a static class that may not be instantiated');\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\ndeclare const __BUILD_VERSION__: string;\n\nexport default class VersionManager {\n private static _defaultVersion = new Date().toISOString();\n\n static get sdkVersion(): string {\n try {\n return __BUILD_VERSION__;\n } catch (e) {\n return this._defaultVersion;\n }\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport GlobalScope from '../globalScope/GlobalScope';\nimport Numbers from '../lang/Numbers';\nimport {LoggingLevel} from '../logger/Logger';\nimport TelemetryConfiguration from './TelemetryConfiguration';\nimport VersionManager from '../sdk/version/VersionManager';\n\nconst requestSizeLimit = 8192;\n\ninterface ILogItem {\n timestamp: string;\n tenancy: string;\n level: string;\n category: string;\n message: string;\n sessionId: string;\n version: string;\n environment: string;\n fullQualifiedName: string;\n runtime: number;\n}\n\nexport default class TelemetryService {\n private readonly _telemetryConfiguration: TelemetryConfiguration;\n\n private _logs: Array<ILogItem> = [];\n private _isSending: boolean = false;\n private _domain = '';\n\n constructor(telemetryConfiguration: TelemetryConfiguration) {\n this._telemetryConfiguration = telemetryConfiguration;\n this.getLocationHostnameFromGlobalScope().then(locationHostname => {\n this._domain = locationHostname;\n });\n }\n\n push(logLevel: LoggingLevel, message: string, category: string, timestamp: Date): void {\n const runtime = (timestamp.valueOf() - this._telemetryConfiguration.pageLoadTime) / 1000;\n const logRecord = {\n timestamp: timestamp.toISOString(),\n tenancy: this._telemetryConfiguration.tenancy,\n level: LoggingLevel[logLevel],\n category,\n message,\n sessionId: this._telemetryConfiguration.sessionId,\n version: VersionManager.sdkVersion,\n environment: this._telemetryConfiguration.environment,\n fullQualifiedName: this._domain,\n runtime\n };\n\n if (logLevel < LoggingLevel.Error) {\n this._logs.push(logRecord);\n } else {\n this._logs.unshift(logRecord);\n }\n\n const ignored = this.sendLogsIfAble();\n }\n\n private getLocationHostnameFromGlobalScope(): Promise<string> {\n return new Promise<string>(resolveLocationHostname => {\n const globalScopeSubscription = GlobalScope.subscribe(globalScope => {\n if (!globalScope) {\n return;\n }\n\n resolveLocationHostname(globalScope.locationHostname);\n globalScope.setTimeout(() => globalScopeSubscription.dispose(), 0);\n });\n });\n }\n\n private async sendLogs(logMessages: Array<ILogItem>): Promise<Response | void> {\n const formData = new GlobalScope.value.FormData();\n\n formData.append('jsonBody', JSON.stringify({records: logMessages}));\n\n return await GlobalScope.value.fetch(this._telemetryConfiguration.url, {\n method: 'POST',\n body: formData\n });\n }\n\n private async sendLogsIfAble(): Promise<Response | void> {\n if (this._logs.length <= 0 || this._isSending || !GlobalScope.value) {\n return;\n }\n\n let numberOfLogsToSend = 0;\n let sizeOfLogsToSend = 0;\n\n this._isSending = true;\n\n const getItemSize = (item: number | string) => typeof item === 'number' ? Numbers.countNumberLength(item) : item.length;\n const getLogSize = (log: ILogItem): number => Object.values(log)\n .reduce((sum, item) => sum + (item ? getItemSize(item) : 0), 0);\n\n while (this._logs.length > numberOfLogsToSend && getLogSize(this._logs[numberOfLogsToSend]) + sizeOfLogsToSend < requestSizeLimit) {\n sizeOfLogsToSend += getLogSize(this._logs[numberOfLogsToSend]);\n numberOfLogsToSend++;\n }\n\n if (!numberOfLogsToSend) {\n this._logs[numberOfLogsToSend].message = this._logs[numberOfLogsToSend].message.substring(0,\n getLogSize(this._logs[numberOfLogsToSend]) + (requestSizeLimit - getLogSize(this._logs[numberOfLogsToSend])));\n numberOfLogsToSend = 1;\n }\n\n const logMessages = this._logs.slice(0, numberOfLogsToSend);\n\n this._logs = this._logs.slice(numberOfLogsToSend);\n\n return this.sendLogs(logMessages).then(response => {\n this._isSending = false;\n\n const ignored = this.sendLogsIfAble();\n\n return response;\n }).catch(() => {\n this._isSending = false;\n\n const ignored = this.sendLogsIfAble();\n });\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport TelemetryService from './TelemetryService';\nimport TelemetryConfiguration from './TelemetryConfiguration';\nimport {IAppender} from '../logger/IAppender';\nimport {LoggingLevel} from '../logger/Logger';\n\nexport default class TelemetryAppender implements IAppender {\n private readonly _telemetryService: TelemetryService;\n private readonly _tenancy: string;\n private readonly _sessionId: string;\n private readonly _threshold: LoggingLevel;\n\n constructor(telemetryConfiguration: TelemetryConfiguration) {\n this._tenancy = telemetryConfiguration.tenancy;\n this._sessionId = telemetryConfiguration.sessionId;\n this._threshold = telemetryConfiguration.threshold;\n this._telemetryService = new TelemetryService(telemetryConfiguration);\n }\n\n log(logLevel: LoggingLevel, message: string, category: string, date: Date): void {\n if (logLevel < this._threshold) {\n return;\n }\n\n this._telemetryService.push(logLevel, message, category, date);\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport GlobalScope from '../globalScope/GlobalScope';\nimport {LoggingLevel} from '../logger/Logger';\nimport LoggerDefaults from '../logger/LoggerDefaults';\n\nexport default class TelemetryConfiguration {\n private _url = 'https://telemetry.phenixrts.com/telemetry/logs';\n private _tenancy: string = '-';\n private _sessionId: string = '-';\n private _environment: string = '-';\n private _pageLoadTime: number = 0;\n private _threshold = LoggerDefaults.defaultTelemetryLoggingLevel;\n\n get url(): string {\n return this._url;\n }\n\n set url(url: string) {\n const telemetryUrl = new GlobalScope.value.URL(url);\n\n telemetryUrl.pathname = telemetryUrl.pathname + '/logs';\n\n this._url = telemetryUrl.toString();\n }\n\n get environment(): string {\n return this._environment;\n }\n\n set environment(environment: string) {\n this._environment = environment;\n }\n\n get tenancy(): string {\n return this._tenancy;\n }\n\n set tenancy(tenancy: string) {\n this._tenancy = tenancy;\n }\n\n get sessionId(): string {\n return this._sessionId;\n }\n\n set sessionId(sessionId: string) {\n this._sessionId = sessionId;\n }\n\n get pageLoadTime(): number {\n return this._pageLoadTime;\n }\n\n set pageLoadTime(pageLoadTime: number) {\n this._pageLoadTime = pageLoadTime;\n }\n\n get threshold(): LoggingLevel {\n return this._threshold;\n }\n\n set threshold(threshold: LoggingLevel) {\n this._threshold = threshold;\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nexport function assertUnreachable(x: never): never {\n throw new Error(`Unexpected value [${x}]. This should never be reached`);\n}\n\nexport default assertUnreachable;","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport assertUnreachable from '../lang/assertUnreachable';\nimport {LoggingLevel, LoggingLevelType} from './Logger';\n\nexport default class LoggingLevelMapping {\n static convertLoggingLevelToLoggingLevelType(loggingLevel: LoggingLevel): LoggingLevelType {\n switch (loggingLevel) {\n case LoggingLevel.Off:\n return 'Off';\n case LoggingLevel.Trace:\n return 'Trace';\n case LoggingLevel.Debug:\n return 'Debug';\n case LoggingLevel.Info:\n return 'Trace';\n case LoggingLevel.Warn:\n return 'Warn';\n case LoggingLevel.Error:\n return 'Error';\n case LoggingLevel.Fatal:\n return 'Fatal';\n case LoggingLevel.All:\n return 'All';\n default:\n assertUnreachable(loggingLevel);\n }\n }\n\n static convertLoggingLevelTypeToLoggingLevel(loggingLevelType: LoggingLevelType): LoggingLevel {\n switch (loggingLevelType) {\n case 'Off':\n return LoggingLevel.Off;\n case 'Trace':\n return LoggingLevel.Trace;\n case 'Debug':\n return LoggingLevel.Debug;\n case 'Info':\n return LoggingLevel.Info;\n case 'Warn':\n return LoggingLevel.Warn;\n case 'Error':\n return LoggingLevel.Error;\n case 'Fatal':\n return LoggingLevel.Fatal;\n case 'All':\n return LoggingLevel.All;\n default:\n assertUnreachable(loggingLevelType);\n }\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport GlobalScope from '../globalScope/GlobalScope';\nimport TelemetryDefault from './TelemetryDefault';\n\nexport enum TelemetryLevel {\n Off = 100,\n Essential = 10,\n All = -1\n}\n\nexport type TelemetryLevelType = 'Off' | 'Essential' | 'All';\n\nexport default class MetricsConfiguration {\n private _url = 'https://telemetry.phenixrts.com/telemetry/metrics';\n private _tenancy: string = '-';\n private _sessionId: string = '-';\n private _environment: string = '-';\n private _threshold: TelemetryLevel = TelemetryDefault.defaultTelemetryLevel;\n\n get url(): string {\n return this._url;\n }\n\n set url(url: string) {\n const metricsUrl = new GlobalScope.value.URL(url);\n\n metricsUrl.pathname = metricsUrl.pathname + '/metrics';\n\n this._url = metricsUrl.toString();\n }\n\n get environment(): string {\n return this._environment;\n }\n\n set environment(environment: string) {\n this._environment = environment;\n }\n\n get tenancy(): string {\n return this._tenancy;\n }\n\n set tenancy(tenancy: string) {\n this._tenancy = tenancy;\n }\n\n get sessionId(): string {\n return this._sessionId;\n }\n\n set sessionId(sessionId: string) {\n this._sessionId = sessionId;\n }\n\n get threshold(): TelemetryLevel {\n return this._threshold;\n }\n\n set threshold(threshold: TelemetryLevel) {\n this._threshold = threshold;\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport BuildFeatures from '../environment/BuildFeatures';\nimport {TelemetryLevel} from '../metrics/MetricsConfiguration';\n\nexport default class TelemetryDefault {\n static get defaultTelemetryLevel(): TelemetryLevel {\n return TelemetryLevel[BuildFeatures.sendMetrics];\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport {TelemetryLevel, TelemetryLevelType} from './MetricsConfiguration';\nimport assertUnreachable from '../lang/assertUnreachable';\n\nexport default class TelemetryLevelMapping {\n static convertTelemetryLevelToTelemetryLevelType(telemetryLevel: TelemetryLevel): TelemetryLevelType {\n switch (telemetryLevel) {\n case TelemetryLevel.Off:\n return 'Off';\n case TelemetryLevel.Essential:\n return 'Essential';\n case TelemetryLevel.All:\n return 'All';\n default:\n assertUnreachable(telemetryLevel);\n }\n }\n\n static convertTelemetryLevelTypeToTelemetryLevel(telemetryLevelType: TelemetryLevelType): TelemetryLevel {\n switch (telemetryLevelType) {\n case 'Off':\n return TelemetryLevel.Off;\n case 'Essential':\n return TelemetryLevel.Essential;\n case 'All':\n return TelemetryLevel.All;\n default:\n assertUnreachable(telemetryLevelType);\n }\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport GlobalScope from '../globalScope/GlobalScope';\nimport LoggerDefaults from '../logger/LoggerDefaults';\nimport LoggingLevelMapping from '../logger/LoggingLevelMapping';\nimport TelemetryDefault from '../metrics/TelemetryDefault';\nimport TelemetryLevelMapping from '../metrics/TelemetricLevelMapping';\n\nexport default class ConfigurationParameterReader {\n public static getStringValue(name: string): string {\n return ConfigurationParameterReader.readConfigurationParameterValue(name) ||\n ConfigurationParameterReader.readConfigurationParameterURIValue(`${name}-uri-parameter-name`) ||\n ConfigurationParameterReader.defaultStringValue[name];\n }\n\n public static getBooleanValue(name: string): boolean {\n const value = ConfigurationParameterReader.readConfigurationParameterValue(name);\n\n if (value) {\n return value === 'true' || value === '1' || value === 'On';\n }\n\n const valueFromUri = ConfigurationParameterReader.readConfigurationParameterURIValue(`${name}-uri-parameter-name`);\n\n if (valueFromUri) {\n return valueFromUri === 'true' || valueFromUri === '1' || valueFromUri === 'On';\n }\n\n return ConfigurationParameterReader.defaultBooleanValue[name] === true;\n }\n\n private static get defaultStringValue(): { [name: string]: string} {\n return {\n 'phenix-metrics-level': TelemetryLevelMapping.convertTelemetryLevelToTelemetryLevelType(TelemetryDefault.defaultTelemetryLevel),\n 'phenix-logging-level': LoggingLevelMapping.convertLoggingLevelToLoggingLevelType(LoggerDefaults.defaultLoggingLevel),\n 'phenix-console-logging-level': LoggingLevelMapping.convertLoggingLevelToLoggingLevelType(LoggerDefaults.defaultConsoleLoggingLevel),\n 'phenix-telemetry-logging-level': LoggingLevelMapping.convertLoggingLevelToLoggingLevelType(LoggerDefaults.defaultTelemetryLoggingLevel),\n 'phenix-channel-token': '',\n 'phenix-uri': '',\n 'phenix-base-uri': ''\n };\n }\n\n private static get defaultBooleanValue(): { [name: string]: boolean } {\n return {\n 'phenix-automatically-retry-on-failure': true,\n 'phenix-automatically-reconnect-peer-connection': true,\n 'phenix-force-garbage-collection-on-restart': true,\n 'phenix-skip-garbage-collection-on-mobile-devices': true\n };\n }\n\n private static readConfigurationParameterValue(name: string): string | undefined {\n const metaValue = GlobalScope.value.documentQuerySelector(`meta[name='${name}']`);\n\n if (!metaValue) {\n return;\n }\n\n const value = metaValue.getAttribute('value');\n\n if (!value) {\n return;\n }\n\n return value;\n }\n\n private static readConfigurationParameterURIValue(name: string): string | undefined {\n const valueURIParameterName = ConfigurationParameterReader.readConfigurationParameterValue(name);\n\n if (!valueURIParameterName) {\n return;\n }\n\n const value = new GlobalScope.value.URLSearchParams(GlobalScope.value.locationSearch).get(valueURIParameterName) || undefined;\n\n if (!value) {\n return;\n }\n\n return value;\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport {ILogger} from './LoggerInterface';\nimport Logger, {LoggingLevel, LoggingLevelType} from './Logger';\nimport Appenders from './Appenders';\nimport LoggingThreshold from './LoggingThreshold';\nimport ConsoleAppender from './ConsoleAppender';\nimport TelemetryAppender from '../telemetry/TelemetryApender';\nimport TelemetryConfiguration from '../telemetry/TelemetryConfiguration';\nimport ConfigurationParameterReader from '../dom/ConfigurationParameterReader';\nimport LoggerDefaults from './LoggerDefaults';\n\nexport default class LoggerFactory {\n private static _loggers: {[category: string]: ILogger} = {};\n private static _appenders: Appenders = new Appenders();\n private static _threshold: LoggingThreshold = new LoggingThreshold();\n private static _telemetryConfiguration: TelemetryConfiguration = new TelemetryConfiguration();\n\n static get telemetryConfiguration(): TelemetryConfiguration {\n return LoggerFactory._telemetryConfiguration;\n }\n\n static getLogger(category: string): ILogger {\n if (typeof category !== 'string') {\n category = 'SDK';\n }\n\n const logger = LoggerFactory._loggers[category];\n\n if (logger) {\n return logger;\n }\n\n return LoggerFactory._loggers[category] = new Logger(category, this._appenders, this._threshold);\n }\n\n static applyLoggerConfigFromParameterConfiguration(): void {\n LoggerFactory.applyLoggingLevel();\n LoggerFactory.applyAppenderLoggingLevel('console', LoggerFactory.applyConsoleLogger.bind(this));\n LoggerFactory.applyAppenderLoggingLevel('telemetry', LoggerFactory.applyTelemetryLogger.bind(this));\n }\n\n private static applyLoggingLevel(): void {\n const parameterValue = ConfigurationParameterReader.getStringValue('phenix-logging-level') as LoggingLevelType;\n\n if (LoggingLevel[parameterValue]) {\n this._threshold.setThreshold(LoggingLevel[parameterValue]);\n }\n\n return;\n }\n\n private static applyAppenderLoggingLevel(name: string, applyAppender: (level: LoggingLevel) => void): void {\n const parameterValue = ConfigurationParameterReader.getStringValue(`phenix-${name}-logging-level`) as LoggingLevelType;\n\n if (parameterValue === 'Off') {\n return;\n }\n\n applyAppender(LoggingLevel[parameterValue]);\n }\n\n private static applyConsoleLogger(level: LoggingLevel): void {\n this._appenders.add(new ConsoleAppender(level || LoggerDefaults.defaultConsoleLoggingLevel));\n }\n\n private static applyTelemetryLogger(level: LoggingLevel): void {\n this._telemetryConfiguration.threshold = level || LoggerDefaults.defaultTelemetryLoggingLevel;\n\n this._appenders.add(new TelemetryAppender(this._telemetryConfiguration));\n }\n\n private constructor() {\n throw new Error('LoggerFactory is a static class that may not be instantiated');\n }\n}\n\nLoggerFactory.applyLoggerConfigFromParameterConfiguration();","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nexport default class Strings {\n static random(length: number): string {\n const random13Characters = (): string => {\n return Math.random().toString(16).substring(2, 15);\n };\n\n const loops: number = Math.ceil(length / 13);\n\n return new Array(loops).fill(random13Characters).reduce((string, func) => {\n return string + func();\n }, '').substring(0, length);\n }\n\n private constructor() {\n throw new Error('Strings is a static class that may not be instantiated');\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport GlobalScope from '../globalScope/GlobalScope';\n\ninterface IToken {\n uri: URL | null;\n capabilities: string[];\n}\n\ninterface IEdgeToken {\n applicationId: string;\n token: IToken;\n}\n\nexport default class EdgeToken {\n private readonly _applicationId: string;\n private readonly _token: IToken;\n\n constructor(edgeToken: IEdgeToken | null) {\n this._applicationId = edgeToken?.applicationId || '';\n this._token = {\n uri: edgeToken?.token?.uri ? new GlobalScope.value.URL(edgeToken.token.uri) : null,\n capabilities: edgeToken?.token?.capabilities || []\n };\n }\n\n get uri(): URL | null {\n return this._token.uri;\n }\n\n get capabilities(): string[] {\n return this._token.capabilities;\n }\n\n get tenancy(): string {\n return this._applicationId;\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport LoggerFactory from '../logger/LoggerFactory';\nimport {ILogger} from '../logger/LoggerInterface';\nimport EdgeToken from './EdgeToken';\nimport {EncodedEdgeToken} from './EncodedEdgeToken';\n\nconst edgeAuthTokenPrefix = 'DIGEST:';\n\nexport default class EdgeAuthParser {\n private static _logger: ILogger = LoggerFactory.getLogger('EdgeAuthParser');\n\n static parseToken(token: EncodedEdgeToken): EdgeToken {\n if (!this.isEncodedEdgeTokenValid(token)) {\n EdgeAuthParser._logger.error('Token is not valid [%s]', token);\n\n return new EdgeToken(null);\n }\n\n try {\n const decodedToken = atob(token.substr(edgeAuthTokenPrefix.length));\n const edgeToken = JSON.parse(decodedToken);\n\n edgeToken.token = JSON.parse(edgeToken.token);\n\n return new EdgeToken(edgeToken);\n } catch (e) {\n EdgeAuthParser._logger.error('Cannot parse token value', e);\n\n return new EdgeToken(null);\n }\n }\n\n static isEncodedEdgeTokenValid(token: EncodedEdgeToken): boolean {\n return !!token && token.startsWith(edgeAuthTokenPrefix);\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport IDisposable from './IDisposable';\n\nexport default class DisposableList {\n private readonly _list: IDisposable[] = [];\n\n add(disposable: IDisposable): void {\n this._list.push(disposable);\n }\n\n dispose(): void {\n this._list.forEach(disposable => disposable.dispose());\n this._list.length = 0;\n }\n\n toString(): string {\n return `DisposableList[disposables=${this._list.length}]`;\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport {Millisecond} from '../units/Units';\nimport GlobalScope from '../globalScope/GlobalScope';\nimport Disposable from '../lang/Disposable';\nimport DisposableList from '../lang/DisposableList';\nimport Subject from '../rx/Subject';\nimport ReadOnlySubject from '../rx/ReadOnlySubject';\n\nconst visibilityChangeEvent = 'visibilitychange';\n\nexport default class ApplicationActivityMonitor {\n private readonly _disposables: DisposableList = new DisposableList();\n private readonly _readOnlyIsForeground: ReadOnlySubject<boolean>;\n private readonly _isForeground: Subject<boolean>;\n private readonly _timeOfLastTabFocusChange: number = Date.now();\n private _lastBackgroundDuration: Millisecond | null = null;\n\n constructor() {\n this._isForeground = new Subject<boolean>(true);\n this._readOnlyIsForeground = new ReadOnlySubject(this._isForeground);\n this.initialize();\n }\n\n get isForeground(): ReadOnlySubject<boolean> {\n return this._readOnlyIsForeground;\n }\n\n public getTimeSinceLastChange(): number {\n return Date.now() - this._timeOfLastTabFocusChange;\n }\n\n public getLastBackgroundDuration(): Millisecond | null {\n return this._lastBackgroundDuration;\n }\n\n public dispose(): void {\n this._disposables.dispose();\n }\n\n private initialize(): void {\n let backgroundEntryTime: Millisecond | null = null;\n const handleVisibilityChange = () => {\n const isNowForeground = !GlobalScope.value.documentIsHidden;\n\n if (!isNowForeground) {\n backgroundEntryTime = Date.now();\n this._lastBackgroundDuration = null;\n } else if (backgroundEntryTime) {\n this._lastBackgroundDuration = Date.now() - backgroundEntryTime;\n }\n\n this._isForeground.value = isNowForeground;\n };\n\n const useEventCapturePhase = false;\n\n GlobalScope.value.addDocumentEventListener(visibilityChangeEvent, handleVisibilityChange, useEventCapturePhase);\n\n this._disposables.add(new Disposable(() => GlobalScope.value.removeDocumentEventListener(visibilityChangeEvent, handleVisibilityChange, useEventCapturePhase)));\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport GlobalScope from '../globalScope/GlobalScope';\nimport LoggerFactory from '../logger/LoggerFactory';\nimport IPeerConnection from './IPeerConnection';\nimport {ILogger} from '../logger/LoggerInterface';\nimport FeatureEnablement from '../environment/FeatureEnablement';\nimport {ILegacyRTCStatsReport} from './RtcConnectionMonitor';\n\nclass VanillaPeerConnection implements IPeerConnection {\n private readonly _logger: ILogger = LoggerFactory.getLogger('VanillaPeerConnection');\n private _peerConnection: RTCPeerConnection | null;\n\n constructor(configuration?: RTCConfiguration) {\n if (FeatureEnablement.webkitRTCPeerConnectionEnabled) {\n // Ignored as legacy webkitRTCPeerConnection class is deprecated\n // This was a Chrome specific implementation\n // Requires a ts-ignore directive to prevent typescript errors\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this._peerConnection = new webkitRTCPeerConnection(configuration);\n\n return;\n }\n\n this._peerConnection = new GlobalScope.value.RTCPeerConnection(configuration);\n }\n\n get native(): RTCPeerConnection | null {\n return this._peerConnection;\n }\n\n get currentLocalDescription(): RTCSessionDescription | null {\n return this._peerConnection?.currentLocalDescription || null;\n }\n\n get currentRemoteDescription(): RTCSessionDescription | null {\n return this._peerConnection?.currentRemoteDescription || null;\n }\n\n get connectionState(): RTCPeerConnectionState | null {\n return this._peerConnection?.connectionState || null;\n }\n\n get iceConnectionState(): RTCIceConnectionState | null {\n return this._peerConnection?.iceConnectionState || null;\n }\n\n get supportsGetConfiguration(): boolean {\n return typeof this._peerConnection?.getConfiguration === 'function';\n }\n\n get supportsSetConfiguration(): boolean {\n return typeof this._peerConnection?.setConfiguration === 'function';\n }\n\n get supportsGetTransceivers(): boolean {\n return !FeatureEnablement.getTransceiversDisabled && typeof this._peerConnection?.getTransceivers === 'function';\n }\n\n get supportsAddTransceiver(): boolean {\n return !FeatureEnablement.addTranceiverDisabled && typeof this._peerConnection?.addTransceiver === 'function';\n }\n\n async createOffer(options?: RTCOfferOptions): Promise<RTCSessionDescriptionInit> {\n if (!this._peerConnection) {\n throw new Error('No PeerConnection initialized');\n }\n\n if (FeatureEnablement.promiseBasedPCMethodsDisabled) {\n // Ignored as legacy createOffer method with callbacks is deprecated\n // Requires a ts-ignore directive to prevent typescript errors\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return new Promise((resolve, reject) => this._peerConnection.createOffer(resolve, reject, options));\n }\n\n return this._peerConnection.createOffer(options);\n }\n\n async createAnswer(options?: RTCAnswerOptions): Promise<RTCSessionDescriptionInit> {\n if (!this._peerConnection) {\n throw new Error('No PeerConnection initialized');\n }\n\n if (FeatureEnablement.promiseBasedPCMethodsDisabled) {\n // Ignored as legacy createAnswer method with callbacks is deprecated\n // Requires a ts-ignore directive to prevent typescript errors\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return new Promise((resolve, reject) => this._peerConnection.createAnswer(resolve, reject, options));\n }\n\n return this._peerConnection.createAnswer(options);\n }\n\n async setLocalDescription(description: RTCSessionDescriptionInit): Promise<void> {\n if (!this._peerConnection) {\n throw new Error('No PeerConnection initialized');\n }\n\n return this._peerConnection.setLocalDescription(FeatureEnablement.promiseBasedPCMethodsDisabled ?\n new RTCSessionDescription(description) : description);\n }\n\n async setRemoteDescription(description: RTCSessionDescriptionInit): Promise<void> {\n if (!this._peerConnection) {\n throw new Error('No PeerConnection initialized');\n }\n\n const hasCrypto = description.sdp?.match(/a=crypto:/i);\n\n if (hasCrypto) {\n this._logger.warn('SDP a=crypto is not supported');\n }\n\n return this._peerConnection.setRemoteDescription(FeatureEnablement.promiseBasedPCMethodsDisabled ?\n new RTCSessionDescription(description) : description);\n }\n\n getSenders(): RTCRtpSender[] {\n if (!this._peerConnection) {\n throw new Error('No PeerConnection initialized');\n }\n\n return this._peerConnection.getSenders();\n }\n\n getReceivers(): RTCRtpReceiver[] {\n if (!this._peerConnection) {\n throw new Error('No PeerConnection initialized');\n }\n\n return this._peerConnection.getReceivers();\n }\n\n getStats(selector?: MediaStreamTrack | null): Promise<RTCStatsReport> {\n if (!this._peerConnection) {\n throw new Error('No PeerConnection initialized');\n }\n\n return this._peerConnection.getStats(selector);\n }\n\n getStatsLegacy(): Promise<ILegacyRTCStatsReport> {\n if (!this._peerConnection) {\n throw new Error('No PeerConnection initialized');\n }\n\n return new Promise(resolve => {\n // Ignored due to typescript not having legacy 'getStats' method type definition\n // This was a Chrome specific implementation of the 'getStats' method for\n // Chrome@<= 66 detailed here: https://bugs.chromium.org/p/chromium/issues/detail?id=627816\n // Requires a ts-ignore directive to prevent typescript errors\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const ignored = this._peerConnection.getStats(resolve);\n });\n }\n\n addEventListener<T extends keyof RTCPeerConnectionEventMap>(type: T, listener: (this: RTCPeerConnection, event: RTCPeerConnectionEventMap[T]) => unknown, options?: boolean | AddEventListenerOptions): void {\n if (!this._peerConnection) {\n throw new Error('No PeerConnection initialized');\n }\n\n this._peerConnection.addEventListener(type, listener, options);\n }\n\n removeEventListener<T extends keyof RTCPeerConnectionEventMap>(type: T, listener: (this: RTCPeerConnection, event: RTCPeerConnectionEventMap[T]) => unknown, options?: boolean | AddEventListenerOptions): void {\n if (!this._peerConnection) {\n throw new Error('No PeerConnection initialized');\n }\n\n this._peerConnection.removeEventListener(type, listener, options);\n }\n\n getTransceivers(): RTCRtpTransceiver[] {\n if (!this._peerConnection) {\n throw new Error('No PeerConnection initialized');\n }\n\n return this._peerConnection.getTransceivers();\n }\n\n addTransceiver(name: string, options: RTCRtpTransceiverInit): RTCRtpTransceiver {\n if (!this._peerConnection) {\n throw new Error('No PeerConnection initialized');\n }\n\n return this._peerConnection.addTransceiver(name, options);\n }\n\n addStream(mediaStream: MediaStream): void {\n mediaStream.getTracks().forEach(track => {\n if (!this._peerConnection) {\n throw new Error('No PeerConnection initialized');\n }\n\n this._peerConnection.addTrack(track);\n });\n }\n\n getConfiguration(): RTCConfiguration {\n if (!this._peerConnection) {\n throw new Error('No PeerConnection initialized');\n }\n\n return this._peerConnection.getConfiguration();\n }\n\n setConfiguration(configuration: RTCConfiguration): void {\n if (!this._peerConnection) {\n throw new Error('No PeerConnection initialized');\n }\n\n this._peerConnection.setConfiguration(configuration);\n }\n\n set ontrack(handler: ((this: RTCPeerConnection, event: RTCTrackEvent) => unknown) | null) {\n if (!this._peerConnection) {\n throw new Error('No PeerConnection initialized');\n }\n\n this._peerConnection.ontrack = handler;\n }\n\n get ontrack(): ((this: RTCPeerConnection, event: RTCTrackEvent) => unknown) | null {\n if (!this._peerConnection) {\n throw new Error('No PeerConnection initialized');\n }\n\n return this._peerConnection.ontrack;\n }\n\n set onicecandidate(handler: ((this: RTCPeerConnection, event: RTCPeerConnectionIceEvent) => unknown) | null) {\n if (!this._peerConnection) {\n throw new Error('No PeerConnection initialized');\n }\n\n this._peerConnection.onicecandidate = handler;\n }\n\n get onicecandidate(): ((this: RTCPeerConnection, event: RTCPeerConnectionIceEvent) => unknown) | null {\n if (!this._peerConnection) {\n throw new Error('No PeerConnection initialized');\n }\n\n return this._peerConnection.onicecandidate;\n }\n\n set onconnectionstatechange(handler: ((this: RTCPeerConnection, event: Event) => unknown) | null) {\n if (!this._peerConnection) {\n throw new Error('No PeerConnection initialized');\n }\n\n this._peerConnection.onconnectionstatechange = handler;\n }\n\n get onconnectionstatechange(): ((this: RTCPeerConnection, event: Event) => unknown) | null {\n if (!this._peerConnection) {\n throw new Error('No PeerConnection initialized');\n }\n\n return this._peerConnection.onconnectionstatechange;\n }\n\n set oniceconnectionstatechange(handler: ((this: RTCPeerConnection, event: Event) => unknown) | null) {\n if (!this._peerConnection) {\n throw new Error('No PeerConnection initialized');\n }\n\n this._peerConnection.oniceconnectionstatechange = handler;\n }\n\n get oniceconnectionstatechange(): ((this: RTCPeerConnection, event: Event) => unknown) | null {\n if (!this._peerConnection) {\n throw new Error('No PeerConnection initialized');\n }\n\n return this._peerConnection.oniceconnectionstatechange;\n }\n\n close(): void {\n this._peerConnection?.close();\n }\n\n dispose(): void {\n this._peerConnection = null;\n }\n}\n\nexport default VanillaPeerConnection;","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport GlobalScope from '../globalScope/GlobalScope';\nimport IPeerConnectionFactory from './IPeerConnectionFactory';\nimport IPeerConnection from './IPeerConnection';\nimport VanillaPeerConnection from './VanillaPeerConnection';\n\nexport default class VanillaPeerConnectionFactory implements IPeerConnectionFactory {\n async createPeerConnection(configuration?: RTCConfiguration): Promise<IPeerConnection> {\n return new Promise<IPeerConnection>(resolvePeerConnectionPromise => {\n const globalScopeSubscription = GlobalScope.subscribe(globalScope => {\n if (!globalScope) {\n return;\n }\n\n resolvePeerConnectionPromise(new VanillaPeerConnection(configuration));\n globalScopeSubscription.dispose();\n });\n });\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport LoggerFactory from '../logger/LoggerFactory';\nimport {ILogger} from '../logger/LoggerInterface';\nimport Subject from '../rx/Subject';\nimport FeatureEnablement from '../environment/FeatureEnablement';\nimport IPeerConnection from './IPeerConnection';\nimport IPeerConnectionFactory from './IPeerConnectionFactory';\nimport VanillaPeerConnectionFactory from './VanillaPeerConnectionFactory';\n\nexport interface IPeerConnectionOfferInit {\n audioTransceivers?: RTCRtpTransceiver[];\n videoTransceivers?: RTCRtpTransceiver[];\n peerConnection: IPeerConnection;\n localOffer: RTCSessionDescriptionInit;\n}\n\nexport enum EncodedInsertableStreams {\n Disabled,\n Enabled\n}\n\nexport const defaultTrackKinds: ('audio' | 'video')[] = ['audio', 'video'];\n\nexport default class PeerConnectionService {\n private static _logger: ILogger = LoggerFactory.getLogger('PeerConnectionService');\n private static readonly _peerConnectionFactory: Subject<IPeerConnectionFactory> = new Subject<IPeerConnectionFactory>(new VanillaPeerConnectionFactory());\n private static _cached: {\n direction?: RTCRtpTransceiverDirection;\n peerConnection: Promise<IPeerConnectionOfferInit>;\n } | null;\n\n static get peerConnectionFactory(): Subject<IPeerConnectionFactory> {\n return PeerConnectionService._peerConnectionFactory;\n }\n\n static initiateInitialPrecaching(): void {\n if (FeatureEnablement.isPrecachingEnabled) {\n const ignored = PeerConnectionService.precacheCreatePeerConnectionOffer()\n .catch(e => PeerConnectionService._logger.error('Failed to pre-cache peer connection offer', e));\n }\n }\n\n static async precacheCreatePeerConnectionOffer(): Promise<{ peerConnection: Promise<IPeerConnectionOfferInit | void>; direction: RTCRtpTransceiverDirection }> {\n return PeerConnectionService._cached = {\n direction: 'recvonly',\n peerConnection: PeerConnectionService.createPeerConnectionOffer()\n .catch(e => {\n PeerConnectionService._cached = null;\n\n throw e;\n })\n };\n }\n\n static async createPeerConnectionOffer(direction: RTCRtpTransceiverDirection = 'recvonly', trackKinds = defaultTrackKinds, encodedInsertableStreams: EncodedInsertableStreams = EncodedInsertableStreams.Disabled): Promise<IPeerConnectionOfferInit> {\n if (PeerConnectionService._cached && PeerConnectionService._cached.direction === direction && encodedInsertableStreams === EncodedInsertableStreams.Disabled && this.isTracksKindsEquivalentToDefault(trackKinds)) {\n const value = PeerConnectionService._cached.peerConnection;\n\n PeerConnectionService._cached = null;\n\n return value;\n }\n\n const configuration: RTCConfiguration | undefined = FeatureEnablement.isEncodedInsertableStreamsSupported ? {encodedInsertableStreams: encodedInsertableStreams === EncodedInsertableStreams.Enabled} : undefined;\n\n return PeerConnectionService._peerConnectionFactory.value.createPeerConnection(configuration)\n .then(async peerConnection => {\n const supportsAddTransceiver = peerConnection.supportsAddTransceiver;\n const audioTransceivers: RTCRtpTransceiver[] = [];\n const videoTransceivers: RTCRtpTransceiver[] = [];\n\n if (supportsAddTransceiver) {\n trackKinds.forEach(kind => {\n if (kind === 'audio') {\n audioTransceivers.push(peerConnection.addTransceiver(kind, {direction}));\n\n return;\n }\n\n if (kind === 'video') {\n videoTransceivers.push(peerConnection.addTransceiver(kind, {direction}));\n\n return;\n }\n });\n\n return {\n audioTransceivers,\n videoTransceivers,\n peerConnection: peerConnection,\n localOffer: await peerConnection.createOffer(undefined)\n };\n }\n\n const options = direction === 'recvonly' ? {\n offerToReceiveAudio: true,\n offerToReceiveVideo: true\n } : {};\n\n return {\n peerConnection: peerConnection,\n localOffer: await peerConnection.createOffer(options)\n };\n });\n }\n\n private static isTracksKindsEquivalentToDefault(tracksKinds: ('audio' | 'video')[]): boolean {\n if (tracksKinds.length !== defaultTrackKinds.length) {\n return false;\n }\n\n const countTrackKinds = (array: ('audio' | 'video')[]) => array.reduce((trackKindCount, kind) => {\n trackKindCount[kind] = (trackKindCount[kind] || 0) + 1;\n\n return trackKindCount;\n }, {\n audio: 0,\n video: 0\n });\n const countedTrackKinds = countTrackKinds(tracksKinds);\n const countedDefaultTrackKinds = countTrackKinds(defaultTrackKinds);\n\n return countedTrackKinds.audio === countedDefaultTrackKinds.audio && countedTrackKinds.video === countedDefaultTrackKinds.video;\n }\n\n private constructor() {\n throw new Error('PeerConnectionService is a static class that may not be instantiated');\n }\n}\n\nPeerConnectionService.initiateInitialPrecaching();","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport GlobalScope from '../globalScope/GlobalScope';\n\nexport default class TelemetryUrl {\n static getTelemetryUrl(url: string): string {\n try {\n const baseURL = new GlobalScope.value.URL(url);\n const segments = baseURL.hostname.split('.');\n\n switch (baseURL.protocol) {\n case 'ws:':\n baseURL.protocol = 'http:';\n\n break;\n case 'wss:':\n baseURL.protocol = 'https:';\n\n break;\n\n default:\n break;\n }\n\n if (segments.length === 2 ||\n (segments.length === 3 && segments[segments.length - 2].length <= 2 && segments[segments.length - 1].length <= 3)\n ) {\n segments.unshift('telemetry');\n } else if (segments[0].startsWith('stg-') || segments[0].endsWith('-stg') || segments[0].includes('-stg-') || segments[0] === 'stg') {\n segments[0] = 'telemetry-stg';\n } else if (segments[0].startsWith('local') || segments[0].endsWith('-local')) {\n // Leave URL unchanged\n } else {\n segments[0] = 'telemetry';\n }\n\n baseURL.hostname = segments.join('.');\n\n return `${baseURL.origin}/telemetry`;\n } catch (e) {\n return url;\n }\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport GlobalScope from '../globalScope/GlobalScope';\n\nexport default class Environment {\n static getEnvironmentFromUrl(url: string): string {\n try {\n const baseURL = new GlobalScope.value.URL(url);\n\n return baseURL.origin;\n } catch (e) {\n return '';\n }\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\ndeclare const __PARAMETERS__: {\n discovery: IDiscoveryParameter;\n};\n\ninterface IDiscoveryParameter{\n intentions: string;\n}\n\nexport default class Parameters {\n private static _discoveryParameters: IDiscoveryParameter ;\n\n static get discoveryParameters(): IDiscoveryParameter {\n return this._discoveryParameters;\n }\n\n static applyParameters(): void {\n try {\n const parameters = __PARAMETERS__;\n\n this._discoveryParameters = 'discovery' in parameters ? parameters.discovery : {intentions: ''};\n } catch (e) {\n this._discoveryParameters = {intentions: ''};\n }\n }\n}\n\nParameters.applyParameters();","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nconst defaultDiscoveryUri = 'https://pcast.phenixrts.com/pcast/endPoints';\n\nexport {defaultDiscoveryUri};","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport GlobalScope from '../../globalScope/GlobalScope';\nimport Subject from '../../rx/Subject';\nimport VersionManager from '../version/VersionManager';\nimport Parameters from '../../environment/Parameters';\nimport {defaultDiscoveryUri} from '../defaults';\n\nexport default class DiscoveryUri {\n private static readonly _discoveryUri: Subject<string> = new Subject<string>(defaultDiscoveryUri);\n\n static get uri(): Subject<string> {\n return DiscoveryUri._discoveryUri;\n }\n\n static buildDiscoveryUrl(uri: URL): string {\n const url = new GlobalScope.value.URL(uri.toString());\n const sdkVersion = VersionManager.sdkVersion;\n const intentions = Parameters.discoveryParameters.intentions;\n\n url.searchParams.set('version', sdkVersion);\n url.searchParams.set('intentions', intentions);\n url.searchParams.set('_', `${Date.now()}`);\n\n if (url.pathname === '/') {\n url.pathname = '/pcast/endPoints';\n }\n\n return url.toString();\n }\n\n private constructor() {\n throw new Error('DiscoveryUri is a static class that may not be instantiated');\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nconst defaultBackoffIntervalInMillisecond = 2000;\nconst defaultMinBackoffIntervalInMillisecond = 1;\nconst defaultMaxBackoffIntervalInMillisecond = 300000;\n\nexport default class ExponentialBackoff {\n private readonly _backoffIntervalInMillisecond: number;\n private readonly _minBackoffIntervalInMillisecond: number;\n private readonly _maxBackoffIntervalInMillisecond: number;\n\n constructor(\n backoffIntervalInMillisecond: number = defaultBackoffIntervalInMillisecond,\n minBackoffIntervalInMillisecond: number = defaultMinBackoffIntervalInMillisecond,\n maxBackoffIntervalInMillisecond: number = defaultMaxBackoffIntervalInMillisecond\n ) {\n this._backoffIntervalInMillisecond = backoffIntervalInMillisecond;\n this._minBackoffIntervalInMillisecond = minBackoffIntervalInMillisecond;\n this._maxBackoffIntervalInMillisecond = maxBackoffIntervalInMillisecond;\n }\n\n getExponentialBackoffIntervalByFailureCount(failureCount: number): number {\n const backoffIntervalInSeconds = this._backoffIntervalInMillisecond / 1000;\n const randomization = 0.5 + (0.5 * Math.random()); // [0.5, 1)\n const exponentialBackoff = Math.pow(backoffIntervalInSeconds, failureCount - 2); // [1/4 1/2 1 2 4 8 ....]\n const exponentialBackoffWithRandomization = Math.floor(exponentialBackoff) * randomization;\n const exponentialBackoffWithRandomizationInMillisecond = Math.ceil(Math.max(exponentialBackoffWithRandomization * 1000, this._minBackoffIntervalInMillisecond));\n\n return Math.min(exponentialBackoffWithRandomizationInMillisecond, this._maxBackoffIntervalInMillisecond);\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nenum MetricsType {\n TimeToFirstFrame,\n ChannelCreationTimeToFirstFrame,\n Stalled,\n Buffering,\n SetupCompleted,\n SetupFailed,\n RoundTripTime,\n DownlinkThroughputCapacity,\n NetworkType,\n ResolutionChanged,\n ApplicationForeground,\n ApplicationBackground\n}\n\nexport default MetricsType;","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport {TelemetryLevel} from './MetricsConfiguration';\nimport assertUnreachable from '../lang/assertUnreachable';\nimport MetricsType from './MetricsType';\n\nexport default class MetricType {\n private readonly _metrics: MetricsType;\n\n constructor(metrics: MetricsType) {\n this._metrics = metrics;\n }\n\n getName(): string {\n return MetricsType[this._metrics];\n }\n\n getTelemetryLevel(): TelemetryLevel {\n switch (this._metrics) {\n case MetricsType.TimeToFirstFrame:\n return TelemetryLevel.Essential;\n case MetricsType.ChannelCreationTimeToFirstFrame:\n return TelemetryLevel.Essential;\n case MetricsType.Stalled:\n return TelemetryLevel.All;\n case MetricsType.Buffering:\n return TelemetryLevel.All;\n case MetricsType.SetupCompleted:\n return TelemetryLevel.All;\n case MetricsType.SetupFailed:\n return TelemetryLevel.All;\n case MetricsType.RoundTripTime:\n return TelemetryLevel.All;\n case MetricsType.DownlinkThroughputCapacity:\n return TelemetryLevel.All;\n case MetricsType.NetworkType:\n return TelemetryLevel.All;\n case MetricsType.ResolutionChanged:\n return TelemetryLevel.All;\n case MetricsType.ApplicationForeground:\n return TelemetryLevel.All;\n case MetricsType.ApplicationBackground:\n return TelemetryLevel.All;\n default:\n assertUnreachable(this._metrics);\n }\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport GlobalScope from '../globalScope/GlobalScope';\nimport {ILogger} from '../logger/LoggerInterface';\nimport LoggerFactory from '../logger/LoggerFactory';\nimport ExponentialBackoff from '../time/ExponentialBackoff';\nimport VersionManager from '../sdk/version/VersionManager';\nimport MetricType from './MetricType';\nimport MetricsType from './MetricsType';\nimport MetricsConfiguration from './MetricsConfiguration';\n\nconst requestSizeLimit = 1024;\nconst maxBufferedRecords = 2048;\n\ninterface IValue {\n string?: string;\n uint64?: number;\n float?: number;\n}\n\ninterface IMetricRecord {\n timestamp: string;\n tenancy: string;\n sessionId: string;\n streamId?: string;\n metric: string;\n value?: IValue;\n previousValue?: IValue;\n fullQualifiedName: string;\n environment: string;\n version: string;\n runtime: number;\n resource?: string;\n kind?: string;\n}\n\ninterface IMetric {\n streamId?: string;\n metricType: MetricsType;\n value?: IValue;\n previousValue?: IValue;\n runtime: number;\n resource?: string;\n kind?: string;\n}\n\nexport default class MetricsService {\n private readonly _logger: ILogger = LoggerFactory.getLogger('MetricsService');\n private readonly _metricsConfiguration: MetricsConfiguration;\n private readonly _exponentialBackoff: ExponentialBackoff;\n private _metrics: Array<IMetricRecord> = [];\n private _isSending: boolean = false;\n private _failureCount = 0;\n private _domain = '';\n\n constructor(metricsConfiguration: MetricsConfiguration) {\n this._metricsConfiguration = metricsConfiguration;\n this._exponentialBackoff = new ExponentialBackoff();\n this.getLocationHostnameFromGlobalScope().then(locationHostname => {\n this._domain = locationHostname;\n });\n }\n\n get metricsConfiguration(): MetricsConfiguration {\n return this._metricsConfiguration;\n }\n\n push(metric: IMetric): void {\n const {streamId, value, previousValue, runtime, resource, kind} = metric;\n const metricType = new MetricType(metric.metricType);\n\n if (this._metricsConfiguration.threshold > metricType.getTelemetryLevel()) {\n return;\n }\n\n const metricRecord = {\n timestamp: new Date().toISOString(),\n tenancy: this._metricsConfiguration.tenancy,\n sessionId: this._metricsConfiguration.sessionId,\n streamId,\n metric: metricType.getName(),\n value,\n previousValue,\n fullQualifiedName: this._domain,\n environment: this._metricsConfiguration.environment,\n version: VersionManager.sdkVersion,\n runtime,\n resource,\n kind\n };\n\n this._metrics.push(metricRecord);\n\n const ignored = this.sendMetricsIfAble();\n }\n\n private getLocationHostnameFromGlobalScope(): Promise<string> {\n return new Promise<string>(resolveLocationHostname => {\n const globalScopeSubscription = GlobalScope.subscribe(globalScope => {\n if (!globalScope) {\n return;\n }\n\n resolveLocationHostname(globalScope.locationHostname);\n globalScope.setTimeout(() => globalScopeSubscription.dispose(), 0);\n });\n });\n }\n\n private async sendMetrics(metricsMessages: Array<IMetricRecord>): Promise<Response> {\n const formData = new GlobalScope.value.FormData();\n\n formData.append('jsonBody', JSON.stringify({records: metricsMessages}));\n\n return await GlobalScope.value.fetch(this._metricsConfiguration.url, {\n method: 'POST',\n body: formData\n });\n }\n\n private async sendMetricsIfAble(): Promise<Response | void> {\n if (this._metrics.length <= 0 || this._isSending || !GlobalScope.value) {\n return;\n }\n\n this._isSending = true;\n\n const metricsMessages = this._metrics.slice(0, requestSizeLimit);\n\n this._metrics = this._metrics.slice(requestSizeLimit);\n\n return this.sendMetrics(metricsMessages).then(response => {\n if (this.isResponseStatusCodeRetryable(response)) {\n if (this._metrics.length <= maxBufferedRecords) {\n this._failureCount++;\n\n GlobalScope.value.setTimeout(() => {\n this._metrics = [...metricsMessages, ...this._metrics];\n\n this._isSending = false;\n\n const ignored = this.sendMetricsIfAble();\n }, this._exponentialBackoff.getExponentialBackoffIntervalByFailureCount(this._failureCount));\n\n return;\n }\n\n this._logger.error('Too many cached metric records [%s], dropping [%s] records', this._metrics.length, metricsMessages.length);\n }\n\n this._isSending = false;\n this._failureCount = 0;\n\n const ignored = this.sendMetricsIfAble();\n\n return response;\n }).catch(() => {\n this._isSending = false;\n\n const ignored = this.sendMetricsIfAble();\n });\n }\n\n private isResponseStatusCodeRetryable({status}: Response): boolean {\n return /^5\\d{2}$/.test(status.toString());\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport MetricsService from './MetricsService';\nimport MetricsConfiguration, {TelemetryLevel} from './MetricsConfiguration';\nimport SDK from '../sdk/SDK';\nimport TelemetryUrl from '../sdk/TelemetryUrl';\nimport Environment from '../sdk/Environment';\nimport TelemetryLevelMapping from './TelemetricLevelMapping';\n\nexport default class MetricsFactory {\n private static _metricsServices: {[category: string]: MetricsService} = {};\n\n static getMetricsService(url: string): MetricsService {\n if (typeof url !== 'string') {\n throw new Error(`url must be a string instead received [${typeof url}]`);\n }\n\n const metricsServices = MetricsFactory._metricsServices[url];\n\n if (metricsServices) {\n return metricsServices;\n }\n\n const metricsConfiguration = new MetricsConfiguration();\n\n metricsConfiguration.sessionId = SDK.clientSessionId;\n metricsConfiguration.tenancy = SDK.tenancy.value;\n metricsConfiguration.url = TelemetryUrl.getTelemetryUrl(url);\n metricsConfiguration.environment = Environment.getEnvironmentFromUrl(url);\n\n metricsConfiguration.threshold = TelemetryLevelMapping.convertTelemetryLevelTypeToTelemetryLevel(SDK.telemetryLevel);\n\n return MetricsFactory._metricsServices[url] = new MetricsService(metricsConfiguration);\n }\n\n static setTelemetryLevel(telemetryLevel: TelemetryLevel): void {\n const metricsServices = Object.values(MetricsFactory._metricsServices);\n\n if (metricsServices && metricsServices.length) {\n metricsServices.forEach(metricsService => {\n const metricsConfiguration = metricsService.metricsConfiguration;\n\n metricsConfiguration.threshold = telemetryLevel;\n });\n }\n }\n\n private constructor() {\n throw new Error('MetricsFactory is a static class that may not be instantiated');\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport IGlobalScope from '../globalScope/IGlobalScope';\nimport {GlobalScope} from '../globalScope/GlobalScope';\nimport LoggerFactory from '../logger/LoggerFactory';\nimport Strings from '../lang/Strings';\nimport Subject from '../rx/Subject';\nimport ReadOnlySubject from '../rx/ReadOnlySubject';\nimport EdgeAuthParser from '../edgeAuth/EdgeAuthParser';\nimport {ILogger} from '../logger/LoggerInterface';\nimport {LoggingLevel, LoggingLevelType} from '../logger/Logger';\nimport ConsoleAppender from '../logger/ConsoleAppender';\nimport TelemetryAppender from '../telemetry/TelemetryApender';\nimport ConfigurationParameterReader from '../dom/ConfigurationParameterReader';\nimport MetricsConfiguration, {TelemetryLevel, TelemetryLevelType} from '../metrics/MetricsConfiguration';\nimport MetricsService from '../metrics/MetricsService';\nimport TelemetryLevelMapping from '../metrics/TelemetricLevelMapping';\nimport LoggingLevelMapping from '../logger/LoggingLevelMapping';\nimport BuildFeatures from '../environment/BuildFeatures';\nimport BrowserDetector from '../dom/BrowserDetector';\nimport ApplicationActivityMonitor from '../dom/ApplicationActivityMonitor';\nimport IPeerConnectionFactory from '../rtc/IPeerConnectionFactory';\nimport PeerConnectionService from '../rtc/PeerConnectionService';\nimport TelemetryUrl from './TelemetryUrl';\nimport Environment from './Environment';\nimport DiscoveryUri from './discovery/DiscoveryUri';\nimport MetricsFactory from '../metrics/MetricsFactory';\nimport TelemetryDefault from '../metrics/TelemetryDefault';\nimport {ShakaPlayerType} from './streaming/IShakaPlayer';\nimport {HlsPlayerType} from './streaming/IHlsPlayer';\nimport {WebPlayerType} from './streaming/IWebPlayer';\nimport IProvidedGlobalScope from '../globalScope/IProvidedGlobalScope';\n\nconst pageLoadTime = GlobalScope.getInstance().value?.pageLoadTime || Date.now();\n\ninterface IInitOptions {\n discoveryUri?: string;\n peerConnectionFactory?: IPeerConnectionFactory;\n telemetryLevel?: TelemetryLevelType;\n loggingLevel?: LoggingLevelType;\n consoleLoggingLevel?: LoggingLevelType;\n automaticallyPlayMediaStream?: boolean;\n automaticallyMuteVideoOnPlayFailure?: boolean;\n webPlayerLoader?: (value: (player: WebPlayerType) => void) => void;\n shakaPlayerLoader?: (value: (player: ShakaPlayerType) => void) => void;\n hlsJsLoader?: (value: (player: HlsPlayerType) => void) => void;\n}\n\nexport default class SDK {\n private static _automaticallyRetryOnFailure = ConfigurationParameterReader.getBooleanValue('phenix-automatically-retry-on-failure');\n private static _automaticallyReconnectPeerConnection = ConfigurationParameterReader.getBooleanValue('phenix-automatically-reconnect-peer-connection');\n private static _automaticallyPlayMediaStream = true;\n private static _automaticallyMuteVideoOnPlayFailure = true;\n private static _forceGarbageCollectionOnRestart = ConfigurationParameterReader.getBooleanValue('phenix-force-garbage-collection-on-restart');\n private static _skipGarbageCollectionOnMobileDevices = ConfigurationParameterReader.getBooleanValue('phenix-skip-garbage-collection-on-mobile-devices');\n private static _webPlayerLoader: (value: (player: WebPlayerType) => void) => void;\n private static _shakaPlayerLoader: (value: (player: ShakaPlayerType) => void) => void;\n private static _hlsJsLoader: (value: (player: HlsPlayerType) => void) => void;\n private static _applicationActivityMonitor: ApplicationActivityMonitor | null;\n private static _environment: Subject<string> = new Subject<string>('');\n private static _telemetryUrl: Subject<string> = new Subject<string>('https://telemetry.phenixrts.com/telemetry');\n private static _maximalNumberOfPeerConnectionReconnectAttempts = 8;\n private static _telemetryLevel: Subject<TelemetryLevel> = new Subject<TelemetryLevel>(TelemetryDefault.defaultTelemetryLevel);\n private static _metricsService: MetricsService;\n private static _metricsConfiguration: MetricsConfiguration;\n private static readonly _sendLocalCandidates: Subject<boolean> = new Subject(BuildFeatures.sendLocalCandidates);\n private static readonly _tenancy: Subject<string> = new Subject<string>('');\n private static readonly _clientSessionId: string = Strings.random(32);\n private static readonly _loadedTimestamp: Date = new Date();\n private static readonly _logger: ILogger = LoggerFactory.getLogger('SDK');\n private static readonly _initialized: Subject<boolean> = new Subject<boolean>(false);\n private static readonly _readOnlyInitialized: ReadOnlySubject<boolean> = new ReadOnlySubject<boolean>(SDK._initialized);\n private static readonly _readOnlyDiscoveryUri: ReadOnlySubject<string> = new ReadOnlySubject<string>(DiscoveryUri.uri);\n private static readonly _readOnlyPeerConnectionFactory: ReadOnlySubject<IPeerConnectionFactory> = new ReadOnlySubject<IPeerConnectionFactory>(PeerConnectionService.peerConnectionFactory);\n\n static get pageLoadTime(): number {\n return pageLoadTime;\n }\n\n static get sendLocalCandidates(): Subject<boolean> {\n return this._sendLocalCandidates;\n }\n\n static get tenancy(): Subject<string> {\n return this._tenancy;\n }\n\n static get clientSessionId(): string {\n return SDK._clientSessionId;\n }\n\n static get loadedTimestamp(): Date {\n return SDK._loadedTimestamp;\n }\n\n static get initialized(): ReadOnlySubject<boolean> {\n return SDK._readOnlyInitialized;\n }\n\n static get discoveryUri(): ReadOnlySubject<string> {\n return SDK._readOnlyDiscoveryUri;\n }\n\n static get peerConnectionFactory(): ReadOnlySubject<IPeerConnectionFactory> {\n return SDK._readOnlyPeerConnectionFactory;\n }\n\n static get automaticRetryOnFailure(): boolean {\n return SDK._automaticallyRetryOnFailure;\n }\n\n static get automaticallyReconnectPeerConnection(): boolean {\n return SDK._automaticallyReconnectPeerConnection;\n }\n\n static get automaticallyPlayMediaStream(): boolean {\n return SDK._automaticallyPlayMediaStream;\n }\n\n static get automaticallyMuteVideoOnPlayFailure(): boolean {\n return SDK._automaticallyMuteVideoOnPlayFailure;\n }\n\n static get forceGarbageCollectionOnRestart(): boolean {\n return this._forceGarbageCollectionOnRestart;\n }\n\n static get skipGarbageCollectionOnMobileDevices(): boolean {\n return this._skipGarbageCollectionOnMobileDevices;\n }\n\n static get webPlayerLoader(): (value: (player: WebPlayerType) => void) => void {\n return this._webPlayerLoader;\n }\n\n static get shakaPlayerLoader(): (value: (player: ShakaPlayerType) => void) => void {\n return this._shakaPlayerLoader;\n }\n\n static get hlsJsLoader(): (value: (player: HlsPlayerType) => void) => void {\n return this._hlsJsLoader;\n }\n\n static get metricsService(): MetricsService {\n return SDK._metricsService;\n }\n\n static get applicationActivityMonitor(): ApplicationActivityMonitor | null {\n return this._applicationActivityMonitor;\n }\n\n static get telemetryUrl(): Subject<string> {\n return this._telemetryUrl;\n }\n\n static get maximalNumberOfPeerConnectionReconnectAttempts(): number {\n return this._maximalNumberOfPeerConnectionReconnectAttempts;\n }\n\n static set maximalNumberOfPeerConnectionReconnectAttempts(retriesAmount: number) {\n this._maximalNumberOfPeerConnectionReconnectAttempts = retriesAmount;\n }\n\n static get loggingLevel(): LoggingLevelType {\n return LoggingLevelMapping.convertLoggingLevelToLoggingLevelType(this._logger.threshold.value);\n }\n\n static get telemetryLevel(): TelemetryLevelType {\n return TelemetryLevelMapping.convertTelemetryLevelToTelemetryLevelType(SDK._telemetryLevel.value);\n }\n\n static get browserDetector(): BrowserDetector {\n return BrowserDetector;\n }\n\n static applyTelemetryConfiguration(): void {\n const telemetryConfiguration = LoggerFactory.telemetryConfiguration;\n\n telemetryConfiguration.sessionId = SDK.clientSessionId;\n telemetryConfiguration.pageLoadTime = SDK.pageLoadTime;\n\n const ignoredEnvironment = SDK._environment.subscribe(environment => {\n telemetryConfiguration.environment = environment;\n });\n const ignoredDiscoveryUri = SDK.telemetryUrl.subscribe(value => {\n const telemetryAppender = this._logger.appenders.value.find(appender => appender instanceof TelemetryAppender);\n\n if (telemetryAppender) {\n telemetryConfiguration.url = value;\n\n this._logger.appenders.remove(telemetryAppender);\n this._logger.appenders.add(new TelemetryAppender(telemetryConfiguration));\n this._logger.info('Telemetry URL was set to [%s]', telemetryConfiguration.url);\n }\n });\n const ignoredTenancy = SDK._tenancy.subscribe(tenancy => {\n const telemetryAppender = this._logger.appenders.value.find(appender => appender instanceof TelemetryAppender);\n\n if (telemetryAppender && tenancy) {\n telemetryConfiguration.tenancy = tenancy;\n\n this._logger.appenders.remove(telemetryAppender);\n this._logger.appenders.add(new TelemetryAppender(telemetryConfiguration));\n this._logger.info('Telemetry tenancy was set to [%s]', telemetryConfiguration.tenancy);\n }\n });\n }\n\n static applyMetricsConfiguration(): void {\n SDK._metricsService = MetricsFactory.getMetricsService(DiscoveryUri.uri.value);\n SDK._metricsConfiguration = SDK._metricsService.metricsConfiguration;\n\n SDK._metricsConfiguration.sessionId = SDK.clientSessionId;\n\n const ignoredEnvironment = SDK._environment.subscribe(environment => {\n SDK._metricsConfiguration.environment = environment;\n });\n const ignoredDiscoveryUri = SDK.telemetryUrl.subscribe(value => {\n SDK._metricsConfiguration.url = value;\n });\n const ignoredTenancy = SDK._tenancy.subscribe(tenancy => {\n SDK._metricsConfiguration.tenancy = tenancy;\n });\n const value = ConfigurationParameterReader.getStringValue('phenix-metrics-level') as TelemetryLevelType;\n\n if (value) {\n MetricsFactory.setTelemetryLevel(TelemetryLevel[value]);\n }\n\n const ignoredTelemetryLevel = SDK._telemetryLevel.subscribe(telemetryLevel => {\n MetricsFactory.setTelemetryLevel(telemetryLevel);\n });\n }\n\n static applyAutomaticallyRetryOnFailureFromParameterConfiguration(): void {\n this._automaticallyRetryOnFailure = ConfigurationParameterReader.getBooleanValue('phenix-automatically-retry-on-failure');\n this._logger.info('Automatically retry on failure is set to: [%s]', this._automaticallyRetryOnFailure);\n\n return;\n }\n\n static applyAutomaticallyReconnectPeerConnectionFromParameterConfiguration(): void {\n this._automaticallyReconnectPeerConnection = ConfigurationParameterReader.getBooleanValue('phenix-automatically-reconnect-peer-connection');\n this._logger.info('Automatically reconnect peer connection is set to: [%s]', this._automaticallyReconnectPeerConnection);\n\n return;\n }\n\n static applyForceGarbageCollectionOnRestartFromParameterConfiguration(): void {\n this._forceGarbageCollectionOnRestart = ConfigurationParameterReader.getBooleanValue('phenix-force-garbage-collection-on-restart');\n this._logger.info('Force garbage collection on restart is set to: [%s]', this._forceGarbageCollectionOnRestart);\n\n return;\n }\n\n static applySkipGarbageCollectionOnMobileDevicesFromParameterConfiguration(): void {\n this._skipGarbageCollectionOnMobileDevices = ConfigurationParameterReader.getBooleanValue('phenix-skip-garbage-collection-on-mobile-devices');\n this._logger.info('Skip garbage collection on mobile devices on restart is set to: [%s]', this._skipGarbageCollectionOnMobileDevices);\n\n return;\n }\n\n static applyDiscoveryUriDefaultFromParameterConfiguration(): void {\n SDK.discoveryUri.subscribe(value => {\n SDK.telemetryUrl.value = SDK.getTelemetryUrl(value);\n SDK._environment.value = Environment.getEnvironmentFromUrl(value);\n });\n\n const channelToken = ConfigurationParameterReader.getStringValue('phenix-channel-token');\n\n if (channelToken) {\n const edgeToken = EdgeAuthParser.parseToken(channelToken);\n\n SDK._tenancy.value = edgeToken.tenancy;\n DiscoveryUri.uri.value = (edgeToken.uri || SDK.discoveryUri.value).toString();\n\n this._logger.info('Discovery URI set from configuration parameter to [%s]', SDK.discoveryUri.value);\n\n return;\n }\n\n const uriValue = ConfigurationParameterReader.getStringValue('phenix-uri');\n\n if (uriValue) {\n DiscoveryUri.uri.value = uriValue;\n this._logger.info('Discovery URI set from \"phenix-uri\" configuration parameter tag to [%s]', SDK.discoveryUri.value);\n\n return;\n }\n\n const baseURIValue = ConfigurationParameterReader.getStringValue('phenix-base-uri');\n\n if (baseURIValue) {\n const globalScope = GlobalScope.getInstance().value;\n const uri = new globalScope.URL(baseURIValue);\n\n uri.pathname = '/pcast/endPoints';\n DiscoveryUri.uri.value = uri.toString();\n this._logger.info('Discovery URI set from \"phenix-base-uri\" configuration parameter tag to [%s]', SDK.discoveryUri.value);\n\n return;\n }\n }\n\n static onLoad(globalScope: IGlobalScope | null): void {\n if (!globalScope) {\n return;\n }\n\n if (this._initialized.value) {\n this._logger.warn('SDK has already been loaded');\n\n return;\n }\n\n globalScope.addWindowEventListener('unload', () => {\n SDK.dispose();\n });\n\n SDK.applyDiscoveryUriDefaultFromParameterConfiguration();\n SDK.applyMetricsConfiguration();\n SDK.applyTelemetryConfiguration();\n\n this._applicationActivityMonitor = new ApplicationActivityMonitor();\n\n this._logger.info('Automatically retry on failure is set to: [%s]', this._automaticallyRetryOnFailure);\n this._logger.info('Automatically reconnect peer connection is set to: [%s]', this._automaticallyReconnectPeerConnection);\n this._logger.info('Force garbage collection on restart is set to: [%s]', this._forceGarbageCollectionOnRestart);\n this._logger.info('Skip garbage collection on mobile devices on restart is set to: [%s]', this._skipGarbageCollectionOnMobileDevices);\n\n this._initialized.value = true;\n }\n\n static init(options?: IInitOptions): void {\n if (!options) {\n return;\n }\n\n const optionsWithOptionalglobalScope: IInitOptions & {globalScope?: IProvidedGlobalScope} = options;\n\n if (optionsWithOptionalglobalScope.globalScope) {\n GlobalScope.setInstance(optionsWithOptionalglobalScope.globalScope);\n }\n\n if (options.discoveryUri) {\n DiscoveryUri.uri.value = options.discoveryUri;\n }\n\n if (options.peerConnectionFactory) {\n PeerConnectionService.peerConnectionFactory.value = options.peerConnectionFactory;\n }\n\n if (options.telemetryLevel && TelemetryLevel[options.telemetryLevel]) {\n SDK._telemetryLevel.value = TelemetryLevelMapping.convertTelemetryLevelTypeToTelemetryLevel(options.telemetryLevel);\n }\n\n if (options.loggingLevel && LoggingLevel[options.loggingLevel]) {\n this._logger.threshold.setThreshold(LoggingLevelMapping.convertLoggingLevelTypeToLoggingLevel(options.loggingLevel));\n }\n\n if (options.consoleLoggingLevel && LoggingLevel[options.consoleLoggingLevel]) {\n const consoleAppender = this._logger.appenders.value.find(appender => appender instanceof ConsoleAppender);\n\n if (consoleAppender) {\n this._logger.appenders.remove(consoleAppender);\n }\n\n if (options.consoleLoggingLevel !== 'Off') {\n this._logger.appenders.add(new ConsoleAppender(LoggingLevelMapping.convertLoggingLevelTypeToLoggingLevel(options.consoleLoggingLevel)));\n }\n }\n\n if (typeof options.automaticallyPlayMediaStream === 'boolean') {\n this._automaticallyPlayMediaStream = options.automaticallyPlayMediaStream;\n }\n\n if (typeof options.automaticallyMuteVideoOnPlayFailure === 'boolean') {\n this._automaticallyMuteVideoOnPlayFailure = options.automaticallyMuteVideoOnPlayFailure;\n }\n\n if (options.webPlayerLoader) {\n this._webPlayerLoader = options.webPlayerLoader;\n }\n\n if (options.shakaPlayerLoader) {\n this._shakaPlayerLoader = options.shakaPlayerLoader;\n }\n\n if (options.hlsJsLoader) {\n this._hlsJsLoader = options.hlsJsLoader;\n }\n }\n\n static dispose(): void {\n SDK._initialized.value = false;\n this._applicationActivityMonitor?.dispose();\n this._applicationActivityMonitor = null;\n }\n\n static getTelemetryUrl(url: string): string {\n return TelemetryUrl.getTelemetryUrl(url);\n }\n\n private constructor() {\n throw new Error('SDK is a static class that may not be instantiated');\n }\n}\n\nGlobalScope.subscribe(SDK.onLoad.bind(SDK));","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport IComparable from '../lang/IComparable';\n\nexport default class Dimension implements IComparable<Dimension> {\n readonly width: number;\n readonly height: number;\n\n static get empty(): Dimension {\n return new Dimension(0, 0);\n }\n\n constructor(width: number, height: number) {\n this.width = width;\n this.height = height;\n }\n\n equals(other: Dimension): boolean {\n return other && this.width === other.width && this.height === other.height;\n }\n\n toString(): string {\n return `${this.width}x${this.height}`;\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport GlobalScope from '../globalScope/GlobalScope';\nimport FeatureEnablement from '../environment/FeatureEnablement';\n\nexport default class GarbageCollectorManager {\n static forceGarbageCollection(): void {\n if (FeatureEnablement.isForceChromeGarbageCollectionSupported) {\n this.forceChromeGarbageCollection();\n }\n }\n\n private static forceChromeGarbageCollection(): void {\n if (FeatureEnablement.isQueueMicrotaskSupported) {\n GlobalScope.value.queueMicrotask(this.overloadMemoryToInvokeGarbageCollection.bind(this));\n } else {\n GlobalScope.value.setTimeout(this.overloadMemoryToInvokeGarbageCollection.bind(this), 0);\n }\n }\n\n private static overloadMemoryToInvokeGarbageCollection(): void {\n let img: HTMLImageElement | null = GlobalScope.value.documentCreateElement<HTMLImageElement>('img');\n\n img.src = GlobalScope.value.URL.createObjectURL(new Blob([new ArrayBuffer(10e+7)])); // 100Mb or less or more depending on as you wish to force/invoke GC cycle run\n img.onerror = function() {\n GlobalScope.value.URL.revokeObjectURL(this.src);\n\n img = null;\n };\n }\n\n private constructor() {\n throw new Error('GarbageCollectorManager is a static class that may not be instantiated');\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nenum ChannelState {\n Initializing = 0,\n Offline = 1,\n Starting = 2,\n Paused = 3,\n Playing = 4,\n Recovering = 5,\n Reconnecting = 6,\n StandBy = 7,\n Stopped = 8,\n Unauthorized = 9,\n GeoRestricted = 10,\n GeoBlocked = 11,\n UnsupportedFeature = 12,\n ConfigurationError = 13,\n TransientConfigurationError = 14,\n ConnectionError = 15,\n ClientStartError = 16,\n Error = 17\n}\n\nexport default ChannelState;","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nexport default class Durations {\n private readonly _duration: number;\n\n constructor(duration = 0) {\n this._duration = duration;\n }\n\n toIsoString(): string {\n if (this._duration === 0) {\n return 'P0S';\n }\n\n const isNegative = this._duration < 0;\n const duration = isNegative ? Math.abs(this._duration) : this._duration;\n let offset = Math.floor(duration);\n const milliseconds = offset % 1000;\n\n offset = Math.floor(offset / 1000);\n\n const seconds = offset % 60;\n\n offset = Math.floor(offset / 60);\n\n const minutes = offset % 60;\n\n offset = Math.floor(offset / 60);\n\n const hours = offset % 24;\n const parts = ['PT'];\n\n if (isNegative) {\n parts.unshift('-');\n }\n\n if (hours) {\n parts.push(hours + 'H');\n }\n\n if (minutes) {\n parts.push(minutes + 'M');\n }\n\n if (seconds || milliseconds) {\n parts.push(String(seconds));\n\n if (milliseconds) {\n parts.push('.' + this.padStart(milliseconds.toString(), 3, '0'));\n }\n\n parts.push('S');\n }\n\n return parts.join('');\n }\n\n padStart(item: string, targetLength: number, padString: string): string {\n targetLength = targetLength >> 0;\n padString = String((typeof padString !== 'undefined' ? padString : ' '));\n\n if (item.length > targetLength) {\n return item;\n }\n\n targetLength = targetLength - item.length;\n\n if (targetLength > padString.length) {\n padString += padString.repeat(targetLength / padString.length);\n }\n\n return padString.slice(0, targetLength) + item;\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport LoggerFactory from '../logger/LoggerFactory';\nimport {ILogger} from '../logger/LoggerInterface';\nimport Durations from '../time/Duration';\nimport Disposable from '../lang/Disposable';\nimport IDisposable from '../lang/IDisposable';\nimport MetricsType from '../metrics/MetricsType';\nimport DisposableList from '../lang/DisposableList';\nimport MetricsService from '../metrics/MetricsService';\n\ntype ContinuationEvent = HTMLVideoElementEventMap['play' | 'playing' | 'progress' | 'timeupdate'];\nconst noop = (): void => undefined;\n\nexport default class VideoTelemetry implements IDisposable {\n private readonly _pageLoadTime: number;\n private readonly _channelStartTime: number;\n private readonly _logger: ILogger = LoggerFactory.getLogger('StreamTelemetry');\n private readonly _disposables: DisposableList = new DisposableList();\n private readonly _streamId: string;\n private readonly _metricsService: MetricsService;\n private _listenToFirstTime: () => void = noop;\n private _listenForStall: () => void = noop;\n private _listenForContinuation: (event: ContinuationEvent) => void = noop;\n private _timeToFirstFrame: number = 0;\n private _channelCreationTimeToFirstFrame: number = 0;\n private _startRecordingFirstFrame: number = 0;\n private _videoStalled: number | null = null;\n private _lastProgress: number = 0;\n private _videoResolution: string = '';\n private _clearTimeToFirstFrameListener: Disposable = new Disposable(() => null);\n private _clearRebufferingListener: Disposable = new Disposable(() => null);\n\n constructor(streamId: string, pageLoadTime: number, channelStartTime: number, metricsService: MetricsService) {\n this._streamId = streamId;\n this._pageLoadTime = pageLoadTime;\n this._channelStartTime = channelStartTime;\n\n this._metricsService = metricsService;\n }\n\n setupListenerForTimeToFirstTime(video: HTMLVideoElement): void {\n this._startRecordingFirstFrame = Date.now();\n\n this._listenToFirstTime = (): void => this.callTimeToFirstFrame();\n\n video.addEventListener('loadeddata', this._listenToFirstTime);\n video.addEventListener('loadedmetadata', this._listenToFirstTime);\n\n this._clearTimeToFirstFrameListener = new Disposable(() => {\n video.removeEventListener('loadeddata', this._listenToFirstTime);\n video.removeEventListener('loadedmetadata', this._listenToFirstTime);\n });\n this._disposables.add(this._clearTimeToFirstFrameListener);\n }\n\n setupListenerForRebuffering(video: HTMLVideoElement): void {\n this._listenForStall = (): void => this.onStall();\n\n this._listenForContinuation = (event: ContinuationEvent): void => this.onContinuation(event, video);\n\n video.addEventListener('stalled', this._listenForStall);\n video.addEventListener('pause', this._listenForStall);\n video.addEventListener('suspend', this._listenForStall);\n video.addEventListener('play', this._listenForContinuation);\n video.addEventListener('playing', this._listenForContinuation);\n video.addEventListener('progress', this._listenForContinuation);\n video.addEventListener('timeupdate', this._listenForContinuation);\n\n this._clearRebufferingListener = new Disposable(() => {\n video.removeEventListener('stalled', this._listenForStall);\n video.removeEventListener('pause', this._listenForStall);\n video.removeEventListener('suspend', this._listenForStall);\n video.removeEventListener('play', this._listenForContinuation);\n video.removeEventListener('playing', this._listenForContinuation);\n video.removeEventListener('progress', this._listenForContinuation);\n video.removeEventListener('timeupdate', this._listenForContinuation);\n });\n\n this._disposables.add(this._clearRebufferingListener);\n }\n\n dispose(): void {\n this._disposables.dispose();\n }\n\n private get durationSincePageLoad(): string {\n const now = Date.now();\n\n return new Durations(now - this._pageLoadTime).toIsoString();\n }\n\n private callTimeToFirstFrame(): void {\n const now = Date.now();\n\n this.pushTimeToFirstFrame(now);\n this.pushChannelCreationTimeToFirstFrame(now);\n\n this._clearTimeToFirstFrameListener.dispose();\n }\n\n private pushTimeToFirstFrame(now: number): void {\n this._timeToFirstFrame = now - this._startRecordingFirstFrame;\n\n this._metricsService.push({\n metricType: MetricsType.TimeToFirstFrame,\n runtime: (now - this._pageLoadTime) / 1000,\n value: {uint64: this._timeToFirstFrame},\n streamId: this._streamId\n });\n\n this._logger.info(\n '[%s] [%s] First frame [%s]',\n this.durationSincePageLoad,\n this._streamId,\n new Durations(this._timeToFirstFrame).toIsoString()\n );\n }\n\n private pushChannelCreationTimeToFirstFrame(now: number): void {\n this._channelCreationTimeToFirstFrame = now - this._channelStartTime;\n\n this._metricsService.push({\n metricType: MetricsType.ChannelCreationTimeToFirstFrame,\n runtime: (now - this._pageLoadTime) / 1000,\n value: {uint64: this._channelCreationTimeToFirstFrame},\n streamId: this._streamId\n });\n\n this._logger.info(\n '[%s] [%s] Channel creation to first frame [%s]',\n this.durationSincePageLoad,\n this._streamId,\n new Durations(this._channelCreationTimeToFirstFrame).toIsoString()\n );\n }\n\n private onStall(): void {\n if (this._videoStalled) {\n return;\n }\n\n this._metricsService.push({\n metricType: MetricsType.Stalled,\n runtime: (Date.now() - this._pageLoadTime) / 1000,\n streamId: this._streamId\n });\n\n this._videoStalled = Date.now();\n\n this._logger.info(\n '[%s] [%s] [buffering] Stream has stalled',\n this.durationSincePageLoad,\n this._streamId\n );\n }\n\n private onContinuation(event: ContinuationEvent, video: HTMLVideoElement): void {\n if (!video.buffered) {\n return;\n }\n\n const bufferLength = video.buffered.length;\n const hasNotProgressedSinceLastProgressEvent = event.type === 'playing'\n || bufferLength > 0 ? (event.type === 'progress'\n || event.type === 'timeupdate')\n && video.buffered.end(bufferLength - 1) === this._lastProgress : true;\n\n if (!this._videoStalled || hasNotProgressedSinceLastProgressEvent) {\n return;\n }\n\n if (event.type === 'progress') {\n this._lastProgress = video.buffered.end(bufferLength - 1);\n }\n\n const timeSinceStop = Date.now() - this._videoStalled;\n\n this._metricsService.push({\n metricType: MetricsType.Buffering,\n runtime: (Date.now() - this._pageLoadTime) / 1000,\n value: {uint64: timeSinceStop},\n streamId: this._streamId\n });\n\n this._logger.info(\n '[%s] [%s] [buffering] Stream has recovered from stall after [%s]',\n this.durationSincePageLoad,\n this._streamId,\n new Durations(timeSinceStop).toIsoString()\n );\n this._videoStalled = null;\n }\n\n onVideoResolutionChanges(newResolution: string): void {\n this._metricsService.push({\n metricType: MetricsType.ResolutionChanged,\n runtime: (Date.now() - this._pageLoadTime) / 1000,\n value: {string: newResolution},\n previousValue: this._videoResolution ? {string: this._videoResolution} : undefined,\n streamId: this._streamId\n });\n\n this._videoResolution = newResolution;\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport MetricsType from '../metrics/MetricsType';\nimport MetricType from '../metrics/MetricType';\nimport Durations from '../time/Duration';\nimport {ILogger} from '../logger/LoggerInterface';\nimport SDK from '../sdk/SDK';\nimport LoggerFactory from '../logger/LoggerFactory';\n\nexport class StreamSetupListener {\n private readonly _logger: ILogger = LoggerFactory.getLogger('StreamSetupListener');\n private readonly metricsService = SDK.metricsService;\n private readonly _pageLoadTime: number;\n private readonly _startTime: number;\n private _metricSubmitted = false;\n\n constructor(pageLoadTime: number) {\n this._startTime = Date.now();\n this._pageLoadTime = pageLoadTime;\n }\n\n success(streamId: string): void {\n this.recordStreamMetric(MetricsType.SetupCompleted, streamId);\n }\n\n fail(): void {\n this.recordStreamMetric(MetricsType.SetupFailed);\n }\n\n private recordStreamMetric(metricType: MetricsType, streamId?: string): void {\n if (this._metricSubmitted) {\n return ;\n }\n\n this._metricSubmitted = true;\n\n const now = Date.now();\n const setupTime = now - this._startTime;\n const metricName = new MetricType(metricType).getName();\n\n this.metricsService.push({\n metricType,\n runtime: (now - this._pageLoadTime) / 1000,\n value: {uint64: setupTime},\n streamId\n });\n\n this._logger.info(\n '[%s] [%s] Stream metric [%s] in [%s]',\n new Durations(now - this._pageLoadTime).toIsoString(),\n streamId,\n metricName,\n new Durations(setupTime).toIsoString()\n );\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport GlobalScope from '../globalScope/GlobalScope';\nimport IDisposable from '../lang/IDisposable';\nimport Disposable from '../lang/Disposable';\nimport DisposableList from '../lang/DisposableList';\nimport Subject from '../rx/Subject';\n\nexport default class NetworkMonitor implements IDisposable {\n private readonly _disposables: DisposableList = new DisposableList();\n private readonly _isSupported: boolean = GlobalScope.value.navigatorConnection !== undefined;\n private readonly _rtt: Subject<number | undefined> = new Subject<number | undefined>(undefined);\n private readonly _effectiveType: Subject<string | undefined> = new Subject<string | undefined>(undefined);\n private readonly _downlinkThroughputCapacity: Subject<number | undefined> = new Subject<number | undefined>(undefined);\n\n constructor() {\n if (!this.isSupported) {\n return;\n }\n\n this.setupNetworkChangeListeners();\n this.updateStatistics();\n }\n\n get isSupported(): boolean {\n return this._isSupported;\n }\n\n get rtt(): Subject<number | undefined> {\n return this._rtt;\n }\n\n get effectiveType(): Subject<string | undefined> {\n return this._effectiveType;\n }\n\n get downlinkThroughputCapacity(): Subject<number | undefined> {\n return this._downlinkThroughputCapacity;\n }\n\n dispose(): void {\n this._disposables.dispose();\n }\n\n private getDownlinkThroughputCapacity(): number {\n return GlobalScope.value.navigatorConnection?.downlink ?? GlobalScope.value.navigatorConnection?.downlinkMax ?? -1;\n }\n\n private getEffectiveType(): string {\n return GlobalScope.value.navigatorConnection?.effectiveType ?? GlobalScope.value.navigatorConnection?.type ?? 'Unknown';\n }\n\n private getRoundTripTime(): number {\n return GlobalScope.value.navigatorConnection?.rtt ?? -1;\n }\n\n private setupNetworkChangeListeners(): void {\n const listener = (): void => this.updateStatistics();\n\n GlobalScope.value.navigatorConnection?.addEventListener('change', listener);\n\n this._disposables.add(new Disposable(() => GlobalScope.value.navigatorConnection?.removeEventListener('change', listener)));\n }\n\n private updateStatistics(): void {\n this._rtt.value = this.getRoundTripTime();\n this._effectiveType.value = this.getEffectiveType();\n this._downlinkThroughputCapacity.value = this.getDownlinkThroughputCapacity();\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport {StreamSetupListener} from '../dom/StreamSetupListener';\nimport {ILogger} from '../logger/LoggerInterface';\nimport LoggerFactory from '../logger/LoggerFactory';\nimport NetworkMonitor from '../dom/NetworkMonitor';\nimport SDK from '../sdk/SDK';\nimport MetricsType from '../metrics/MetricsType';\nimport Durations from '../time/Duration';\nimport IDisposable from '../lang/IDisposable';\nimport DisposableList from '../lang/DisposableList';\nimport MetricsService from '../metrics/MetricsService';\n\ninterface INetworkStatistics {\n rtt?: number;\n effectiveType?: string;\n downlinkThroughputCapacity?: number;\n}\n\nexport default class SessionTelemetry implements IDisposable {\n private readonly _logger: ILogger = LoggerFactory.getLogger('SessionTelemetry');\n private readonly _metricsService: MetricsService;\n private readonly _applicationActivityMonitor = SDK.applicationActivityMonitor;\n private readonly _networkMonitor: NetworkMonitor = new NetworkMonitor();\n private readonly _pageLoadTime: number;\n private readonly _disposables: DisposableList = new DisposableList();\n private _lastNetworkStatistics: INetworkStatistics = {};\n\n constructor(pageLoadTime: number, metricsService: MetricsService) {\n this._pageLoadTime = pageLoadTime;\n this._disposables.add(this._networkMonitor);\n this._metricsService = metricsService;\n\n if (!this._applicationActivityMonitor) {\n throw new Error('SessionTelemetry Failed: No application monitor initialized.');\n }\n\n if (!this._networkMonitor.isSupported) {\n return;\n }\n\n this._disposables.add(this._applicationActivityMonitor.isForeground.subscribe(isForeground => {\n this.recordForegroundChange(isForeground);\n }));\n this._disposables.add(this._networkMonitor.rtt.subscribe(value => {\n if (!value) {\n return;\n }\n\n this.recordNetworkRTTUpdate(value);\n }));\n this._disposables.add(this._networkMonitor.effectiveType.subscribe(value => {\n if (!value) {\n return;\n }\n\n this.recordNetworkTypeChangeUpdate(value);\n }));\n this._disposables.add(this._networkMonitor.downlinkThroughputCapacity.subscribe(value => {\n if (!value) {\n return;\n }\n\n this.recordNetworkDownlinkThroughputCapacityUpdate(value);\n }));\n }\n\n listenOnStreamSetup(): StreamSetupListener {\n return new StreamSetupListener(this._pageLoadTime);\n }\n\n dispose(): void {\n this._disposables.dispose();\n }\n\n private recordForegroundChange(isForeground: boolean): void {\n const now = Date.now();\n const timeSinceLastChange = this._applicationActivityMonitor?.getTimeSinceLastChange();\n\n if (!timeSinceLastChange) {\n return;\n }\n\n this._metricsService.push({\n metricType: isForeground ? MetricsType.ApplicationForeground : MetricsType.ApplicationBackground,\n runtime: (now - this._pageLoadTime) / 1000,\n value: {uint64: timeSinceLastChange}\n });\n\n this._logger.info(\n 'Application has gone into the [%s] after [%s] ms',\n isForeground ? 'foreground' : 'background',\n new Durations(timeSinceLastChange).toIsoString(),\n );\n }\n\n private recordNetworkRTTUpdate(newRTT: number): void {\n const now = Date.now();\n const oldRtt = this._lastNetworkStatistics.rtt;\n\n this._lastNetworkStatistics.rtt = newRTT;\n\n this._metricsService.push({\n metricType: MetricsType.RoundTripTime,\n runtime: (now - this._pageLoadTime) / 1000,\n value: {uint64: newRTT},\n previousValue: oldRtt ? {uint64: oldRtt} : undefined,\n resource: 'navigator'\n });\n\n this._logger.info(\n '[%s] Network RTT changed to [%s] from [%s]',\n new Durations(now - this._pageLoadTime).toIsoString(),\n newRTT,\n oldRtt\n );\n }\n\n private recordNetworkTypeChangeUpdate(newNetworkType: string): void {\n const now = Date.now();\n const oldNetworkType = this._lastNetworkStatistics.effectiveType;\n\n this._lastNetworkStatistics.effectiveType = newNetworkType;\n\n this._metricsService.push({\n metricType: MetricsType.NetworkType,\n runtime: (now - this._pageLoadTime) / 1000,\n value: {string: newNetworkType},\n previousValue: oldNetworkType ? {string: oldNetworkType} : undefined\n });\n\n this._logger.info(\n '[%s] Network effective type has changed to [%s] from [%s]',\n new Durations(now - this._pageLoadTime).toIsoString(),\n newNetworkType,\n oldNetworkType\n );\n }\n\n private recordNetworkDownlinkThroughputCapacityUpdate(newCapacity: number): void {\n const now = Date.now();\n const oldCapacity = this._lastNetworkStatistics.downlinkThroughputCapacity;\n\n this._lastNetworkStatistics.downlinkThroughputCapacity = newCapacity;\n\n this._metricsService.push({\n metricType: MetricsType.DownlinkThroughputCapacity,\n runtime: (now - this._pageLoadTime) / 1000,\n value: {float: newCapacity},\n previousValue: oldCapacity ? {float: oldCapacity} : undefined\n });\n\n this._logger.info(\n '[%s] Network downlink throughput capacity changed to [%s] from [%s]',\n new Durations(now - this._pageLoadTime).toIsoString(),\n newCapacity,\n oldCapacity\n );\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nexport type BitrateStateType = 'Keep' | 'Reset';\nexport type BitrateModeType = 'Normal' | 'Force' | 'Reset';\n\nexport enum BitrateState {\n Keep,\n Reset\n}\n\nexport enum BitrateMode {\n Normal,\n Force,\n Reset\n}\n\nexport interface ISetTemporaryMaximalBitrate {\n apiVersion: number;\n sharedSecret: string;\n elapsedInMilliseconds: number;\n bitrateInBitsPerSecond: number;\n bitrateState: BitrateStateType;\n bitrateMode: BitrateModeType;\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport Subject from '../../rx/Subject';\nimport {EncodedEdgeToken} from '../../edgeAuth/EncodedEdgeToken';\n\nexport default class TokenContext {\n token: Subject<EncodedEdgeToken>;\n tokenExpiring: Subject<boolean>;\n\n constructor(token: EncodedEdgeToken) {\n this.token = new Subject<EncodedEdgeToken>(token);\n this.tokenExpiring = new Subject<boolean>(false);\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport Subject from '../../rx/Subject';\nimport ChannelState from '../channels/ChannelState';\nimport Dimension from '../../video/Dimension';\nimport EndPoint, {IStream, SubscribeStatus} from '../discovery/EndPoint';\nimport {IOnRealTimeSubscribeRequestCallback} from '../channels/IOnRealTimeSubscribeRequestCallback';\nimport {IOnRealTimeSubscribeResponseCallback} from '../channels/IOnRealTimeSubscribeResponseCallback';\nimport VideoTelemetry from '../../video/VideoTelemetry';\nimport {IRtcMonitorStatistic, IRtcStatistic} from '../../rtc/RtcConnectionMonitor';\nimport SDK from '../SDK';\nimport assertUnreachable from '../../lang/assertUnreachable';\nimport DisposableList from '../../lang/DisposableList';\nimport {BitsPerSecond, Millisecond} from '../../units/Units';\n\nconst defaultTargetLag = 0;\n\nexport type ChannelContextOptions = {\n targetLag?: number;\n onRealTimeSubscribeRequestCallback?: IOnRealTimeSubscribeRequestCallback;\n onRealTimeSubscribeResponseCallback?: IOnRealTimeSubscribeResponseCallback;\n};\n\nexport default class ChannelContext {\n channelInitialization: Date;\n disposables: DisposableList;\n channelDisposables: DisposableList;\n rendererDisposables: DisposableList;\n videoElement: Subject<HTMLVideoElement | null>;\n state: Subject<ChannelState>;\n exists: Subject<boolean | null>;\n autoMuted: Subject<boolean>;\n autoPaused: Subject<boolean>;\n authorized: Subject<boolean>;\n online: Subject<boolean>;\n loading: Subject<boolean>;\n playing: Subject<boolean>;\n standby: Subject<boolean>;\n stopped: Subject<boolean>;\n targetLag: Subject<Millisecond>;\n lag: Subject<Millisecond | undefined>;\n bitrateLimit: Subject<BitsPerSecond>;\n resolution: Subject<Dimension>;\n failureCount: Subject<number>;\n endPoint: Subject<EndPoint | null>;\n onRealTimeSubscribeRequestCallback: IOnRealTimeSubscribeRequestCallback | null;\n onRealTimeSubscribeResponseCallback: IOnRealTimeSubscribeResponseCallback | null;\n stream: Subject<IStream | null>;\n rtcStatistics: Subject<IRtcMonitorStatistic | null>;\n videoTelemetry: VideoTelemetry | null;\n rtcAudioStatistic: IRtcStatistic | null;\n rtcVideoStatistic: IRtcStatistic | null;\n clearFailureCountTimeout: number;\n\n constructor(options?: ChannelContextOptions) {\n this.disposables = new DisposableList();\n this.channelDisposables = new DisposableList();\n this.rendererDisposables = new DisposableList();\n this.channelInitialization = new Date();\n this.videoElement = new Subject<HTMLVideoElement | null>(null);\n this.state = new Subject<ChannelState>(ChannelState.Initializing);\n this.exists = new Subject<boolean | null>(null);\n this.autoMuted = new Subject<boolean>(false);\n this.autoPaused = new Subject<boolean>(false);\n this.authorized = new Subject<boolean>(true);\n this.online = new Subject<boolean>(true);\n this.loading = new Subject<boolean>(false);\n this.playing = new Subject<boolean>(false);\n this.standby = new Subject<boolean>(false);\n this.stopped = new Subject<boolean>(false);\n this.targetLag = new Subject<Millisecond>(options?.targetLag ?? defaultTargetLag);\n this.lag = new Subject<Millisecond | undefined>(undefined);\n this.bitrateLimit = new Subject<BitsPerSecond>(0);\n this.resolution = new Subject<Dimension>(Dimension.empty);\n this.failureCount = new Subject<number>(0);\n this.endPoint = new Subject<EndPoint | null>(null);\n this.onRealTimeSubscribeRequestCallback = options?.onRealTimeSubscribeRequestCallback ?? null;\n this.onRealTimeSubscribeResponseCallback = options?.onRealTimeSubscribeResponseCallback ?? null;\n this.stream = new Subject<IStream | null>(null);\n this.rtcStatistics = new Subject<IRtcMonitorStatistic | null>(null);\n this.videoTelemetry = null;\n this.rtcAudioStatistic = null;\n this.rtcVideoStatistic = null;\n this.clearFailureCountTimeout = 0;\n }\n\n get streamId(): string {\n const stream = this.stream.value;\n\n if (!stream) {\n return '-';\n }\n\n return stream.streamId;\n }\n\n applyStatus(status: SubscribeStatus): void {\n switch (status) {\n case 'ok':\n break;\n case 'unauthorized':\n case 'geo-restricted':\n case 'geo-blocked':\n this.authorized.value = false;\n this.failureCount.value = 0;\n this.playing.value = false;\n this.standby.value = true;\n this.stopped.value = false;\n this.stream.value = null;\n\n return;\n case 'no-stream':\n case 'not-found':\n this.failureCount.value = 0;\n this.playing.value = false;\n this.standby.value = true;\n this.stopped.value = false;\n this.stream.value = null;\n\n return;\n default:\n this.failureCount.value++;\n this.playing.value = false;\n this.standby.value = true;\n this.stopped.value = false;\n this.stream.value = null;\n\n return;\n }\n }\n\n applySessionAndStreamPropertiesToVideoElement(): void {\n if (this.videoElement.value && this.videoElement.value.dataset) {\n this.videoElement.value.dataset.sessionId = SDK.clientSessionId;\n this.videoElement.value.dataset.streamId = this.streamId;\n }\n }\n\n mapSubscribeStatusToChannelStatus(status: SubscribeStatus): ChannelState {\n switch (status) {\n case 'ok':\n return ChannelState.Starting;\n case 'no-stream':\n case 'not-found':\n return ChannelState.StandBy;\n case 'geo-restricted':\n return ChannelState.GeoRestricted;\n case 'geo-blocked':\n return ChannelState.GeoBlocked;\n case 'unauthorized':\n return ChannelState.Unauthorized;\n case 'capacity':\n case 'rate-limited':\n case 'timeout':\n return ChannelState.Recovering;\n case 'forbidden-tag':\n return ChannelState.ConfigurationError;\n case 'port-in-range-not-found':\n return ChannelState.TransientConfigurationError;\n case 'failed':\n return ChannelState.Error;\n default:\n assertUnreachable(status);\n }\n }\n\n mapSubscribeStatusToExists(status: SubscribeStatus): boolean | null {\n switch (status) {\n case 'ok':\n case 'no-stream':\n case 'geo-restricted':\n case 'geo-blocked':\n case 'forbidden-tag':\n case 'port-in-range-not-found':\n return true;\n case 'not-found':\n return false;\n case 'unauthorized':\n case 'timeout':\n case 'rate-limited':\n case 'capacity':\n case 'failed':\n return this.exists.value;\n default:\n assertUnreachable(status);\n }\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nexport interface IEncodedStreamSink<T extends RTCEncodedAudioFrame | RTCEncodedVideoFrame> {\n (track: MediaStreamTrack, chunk: T): boolean | PromiseLike<boolean>;\n}\n\nexport default class EncodedStreamSink {\n static validateEncodedStreamSink<T extends RTCEncodedAudioFrame | RTCEncodedVideoFrame>(mode: 'audio' | 'video', item: IEncodedStreamSink<T>) {\n if (typeof item !== 'function') {\n return {\n valid: false,\n validationResult: `Unexpected ${mode} Encoded Stream Sink function type. Found [${typeof item}]`\n };\n }\n\n if (item.length !== 2) {\n return {\n valid: false,\n validationResult: `Unexpected ${mode} Encoded Stream Sink function parameter length. Expected 2. Found [${item.length}]`\n };\n }\n\n return {\n valid: true,\n validationResult: 'ok'\n };\n }\n\n constructor() {\n throw new Error('EncodedStreamSink is a static class that may not be instantiated');\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nexport interface IStreamTrackTransform<T extends AudioData | VideoFrame> {\n (track: MediaStreamTrack, chunk: T, controller: TransformStreamDefaultController<T>): void | PromiseLike<void>;\n}\n\nexport default class StreamTrackTransform {\n static validateMediaStreamTrackTransform<T extends AudioData | VideoFrame>(mode: 'audio' | 'video', item: IStreamTrackTransform<T>) {\n if (typeof item !== 'function') {\n return {\n valid: false,\n validationResult: `Unexpected ${mode} Media Stream Track transform function type. Found [${typeof item}]`\n };\n }\n\n if (item.length !== 3) {\n return {\n valid: false,\n validationResult: `Unexpected ${mode} Media Stream Track transform function parameter length. Expected 3. Found [${item.length}]`\n };\n }\n\n return {\n valid: true,\n validationResult: 'ok'\n };\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport Subject from '../../rx/Subject';\nimport {VideoCodec} from '../decode/bitstream/codec/VideoCodec';\nimport {AudioCodec} from '../decode/bitstream/codec/AudioCodec';\nimport {IStreamTrackTransform} from '../transformation/StreamTrackTransform';\nimport {IEncodedStreamSink} from '../transformation/EncodedStreamSink';\nimport TransformMessageRouter from '../transformation/worker/MessageRouter';\n\nexport type StreamTransformContextOptions = {\n hasInsertableStreams: boolean;\n hasEncodedInsertableStreams: boolean;\n videoStreamTransformCallback: IStreamTrackTransform<VideoFrame> | undefined;\n audioStreamTransformCallback: IStreamTrackTransform<AudioData> | undefined;\n encodedVideoStreamSink: IEncodedStreamSink<RTCEncodedVideoFrame> | undefined;\n encodedAudioStreamSink: IEncodedStreamSink<RTCEncodedAudioFrame> | undefined;\n};\n\nexport type StreamTransformContextTrack = {\n mediaStreamTrack: MediaStreamTrack | null;\n receiver: RTCRtpReceiver | null;\n mid: string | null;\n codec: VideoCodec | AudioCodec | null;\n transformPipelineWorker: Worker | null;\n transformMessageRouter: TransformMessageRouter | null;\n transformFunctionNames: string[];\n};\n\nexport default class StreamTransformContext {\n readonly hasInsertableStreams: Subject<boolean>;\n readonly hasEncodedInsertableStreams: Subject<boolean>;\n readonly videoStreamTransformCallback: IStreamTrackTransform<VideoFrame> | undefined;\n readonly audioStreamTransformCallback: IStreamTrackTransform<AudioData> | undefined;\n readonly encodedVideoStreamSink: IEncodedStreamSink<RTCEncodedVideoFrame> | undefined;\n readonly encodedAudioStreamSink: IEncodedStreamSink<RTCEncodedAudioFrame> | undefined;\n readonly audioTrack: StreamTransformContextTrack;\n readonly videoTrack: StreamTransformContextTrack;\n\n constructor(options: StreamTransformContextOptions) {\n this.hasInsertableStreams = new Subject<boolean>(options.hasInsertableStreams);\n this.hasEncodedInsertableStreams = new Subject<boolean>(options.hasEncodedInsertableStreams);\n this.videoStreamTransformCallback = options.videoStreamTransformCallback;\n this.audioStreamTransformCallback = options.audioStreamTransformCallback;\n this.encodedVideoStreamSink = options.encodedVideoStreamSink;\n this.encodedAudioStreamSink = options.encodedAudioStreamSink;\n this.audioTrack = {\n mediaStreamTrack: null,\n receiver: null,\n mid: null,\n codec: null,\n transformPipelineWorker: null,\n transformMessageRouter: null,\n transformFunctionNames: []\n };\n this.videoTrack = {\n mediaStreamTrack: null,\n receiver: null,\n mid: null,\n codec: null,\n transformPipelineWorker: null,\n transformMessageRouter: null,\n transformFunctionNames: []\n };\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport Subject from '../../rx/Subject';\nimport IPeerConnection from '../../rtc/IPeerConnection';\n\nexport default class PeerConnectionContext {\n mediaStream: Subject<MediaStream | null>;\n peerConnection: Subject<IPeerConnection | null>;\n peerConnectionReconnectAttempts: number;\n\n constructor() {\n this.mediaStream = new Subject<MediaStream | null>(null);\n this.peerConnection = new Subject<IPeerConnection | null>(null);\n this.peerConnectionReconnectAttempts = 0;\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport Subject from '../../rx/Subject';\n\nexport default class StateContext {\n isStarting: Subject<boolean>;\n isDisposed: boolean;\n\n constructor() {\n this.isStarting = new Subject<boolean>(false);\n this.isDisposed = false;\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport Subject from '../../rx/Subject';\nimport {DecodedFrameTimingInformation, RenderedFrameTimingInformation} from '../frameTiming/FrameTimingInformation';\n\nexport default class FrameTimingInformationContext {\n public readonly shouldExtractTimecode: Subject<boolean>;\n public readonly shouldExtractTimestamps: Subject<boolean>;\n public readonly isEnabled: Subject<boolean>;\n public readonly decodedFrameTimingInformation: Subject<DecodedFrameTimingInformation | null>;\n public readonly renderedFrameTimingInformation: Subject<RenderedFrameTimingInformation | null>;\n\n constructor() {\n this.shouldExtractTimecode = new Subject<boolean>(false);\n this.shouldExtractTimestamps = new Subject<boolean>(false);\n this.isEnabled = new Subject<boolean>(false);\n this.decodedFrameTimingInformation = new Subject<DecodedFrameTimingInformation | null>(null);\n this.renderedFrameTimingInformation = new Subject<RenderedFrameTimingInformation | null>(null);\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport {BitrateMode, BitrateModeType} from '../api/SetTemporaryMaximalBitrate';\nimport assertUnreachable from '../../lang/assertUnreachable';\n\nexport default class BitrateModeMapping {\n static convertBitrateModeToBitrateModeType(bitrateMode: BitrateMode): BitrateModeType {\n switch (bitrateMode) {\n case BitrateMode.Normal:\n return 'Normal';\n case BitrateMode.Force:\n return 'Force';\n case BitrateMode.Reset:\n return 'Reset';\n default:\n assertUnreachable(bitrateMode);\n }\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport {BitrateState, BitrateStateType} from '../api/SetTemporaryMaximalBitrate';\nimport assertUnreachable from '../../lang/assertUnreachable';\n\nexport default class BitrateStateMapping {\n static convertBitrateStateToBitrateStateType(bitrateState: BitrateState): BitrateStateType {\n switch (bitrateState) {\n case BitrateState.Keep:\n return 'Keep';\n case BitrateState.Reset:\n return 'Reset';\n default:\n assertUnreachable(bitrateState);\n }\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport GlobalScope from '../../globalScope/GlobalScope';\nimport {ILogger} from '../../logger/LoggerInterface';\nimport LoggerFactory from '../../logger/LoggerFactory';\nimport EdgeAuthParser from '../../edgeAuth/EdgeAuthParser';\nimport {EncodedEdgeToken} from '../../edgeAuth/EncodedEdgeToken';\n\nimport {\n ISubscribeSuccessResponse,\n ISubscribeWithOfferRequest,\n ISubscribeWithoutOfferRequest\n} from '../api/Subscribe';\nimport {ISetRemoteDescriptionRequest, ISetRemoteDescriptionResponse} from '../api/SetRemoteDescription';\nimport {IDestroyStreamRequest, IDestroyStreamResponse} from '../api/DestroyStream';\nimport {IAddIceCandidatesRequest, IAddIceCandidatesResponse} from '../api/AddIceCandidates';\nimport VersionManager from '../version/VersionManager';\nimport Parameters from '../../environment/Parameters';\nimport {BitrateMode, BitrateState, ISetTemporaryMaximalBitrate} from '../api/SetTemporaryMaximalBitrate';\nimport BitrateModeMapping from './BitrateModeMapping';\nimport BitrateStateMapping from './BitrateStateMapping';\nimport {BitsPerSecond, Millisecond} from '../../units/Units';\nimport {\n IPublishSuccessResponse,\n IPublishWithOfferRequest,\n IPublishWithoutOfferRequest,\n PublishStatus\n} from '../api/Publish';\n\nconst apiVersion = 7;\n\nexport type SubscribeStatus = 'ok' | 'no-stream' | 'not-found' | 'unauthorized' | 'geo-restricted' | 'geo-blocked' | 'rate-limited' | 'capacity' | 'timeout' | 'forbidden-tag' | 'port-in-range-not-found' | 'failed';\nexport type SetRemoteDescriptionStatus = 'ok' | 'not-found' | 'unauthorized' | 'rate-limited' | 'capacity' | 'timeout' | 'failed';\nexport type SetTemporaryMaximalBitrateStatus = 'ok' | 'not-found' | 'unauthorized' | 'rate-limited' | 'capacity' | 'timeout' | 'failed';\nexport type RemoveTemporaryMaximalBitrateStatus = 'ok' | 'not-found' | 'unauthorized' | 'rate-limited' | 'capacity' | 'timeout' | 'failed';\nexport type AddIceCandidatesStatus = 'ok' | 'not-found' | 'unauthorized' | 'rate-limited' | 'capacity' | 'timeout' | 'failed';\nexport type DestroyStreamStatus = 'ok' | 'not-found' | 'unauthorized' | 'rate-limited' | 'capacity' | 'timeout' | 'failed';\nexport interface IStream {\n streamId: string;\n sharedSecret: string;\n tenancy: string;\n}\n\nexport interface ISubscribeSuccessResponseInit {\n status: 'ok';\n stream: IStream;\n lag: Millisecond;\n rtcConfiguration?: RTCConfiguration;\n setRemoteDescriptionResponse?: {\n sessionDescription: RTCSessionDescriptionInit;\n };\n createOfferDescriptionResponse?: {\n sessionDescription: RTCSessionDescriptionInit;\n };\n createAnswerDescriptionResponse?: {\n sessionDescription: RTCSessionDescriptionInit;\n };\n [key: string]: unknown;\n}\n\nexport interface ISubscribeFailureResponseInit {\n status: 'no-stream' | 'not-found' | 'unauthorized' | 'geo-restricted' | 'geo-blocked' | 'rate-limited' | 'capacity' | 'timeout' | 'forbidden-tag' | 'port-in-range-not-found' | 'failed';\n}\n\nexport interface ISubscribeRequestCallback {\n (request: ISubscribeWithOfferRequest | ISubscribeWithoutOfferRequest): Promise<void>;\n}\n\nexport interface ISubscribeResponseCallback {\n (response: ISubscribeSuccessResponseInit | ISubscribeFailureResponseInit): Promise<void>;\n}\n\nexport type SubscribeOptions = {\n onSubscribeRequestCallback?: ISubscribeRequestCallback;\n onSubscribeResponseCallback?: ISubscribeResponseCallback;\n};\n\nexport type IPublishSuccessResponseInit = {\n status: 'ok';\n stream: IStream;\n lag?: Millisecond;\n rtcConfiguration?: RTCConfiguration;\n setRemoteDescriptionResponse?: {\n sessionDescription: RTCSessionDescriptionInit;\n };\n createOfferDescriptionResponse?: {\n sessionDescription: RTCSessionDescriptionInit;\n };\n createAnswerDescriptionResponse?: {\n sessionDescription: RTCSessionDescriptionInit;\n };\n};\n\nexport type IPublishFailureResponseInit = {\n status: 'not-found' | 'geo-restricted' | 'geo-blocked' | 'unauthorized' | 'rate-limited' | 'capacity' | 'timeout' | 'forbidden-tag' | 'missing-channel-or-room-id' | 'port-in-range-not-found' | 'failed';\n};\n\ninterface ISetRemoteDescriptionResponseInit {\n status: SetRemoteDescriptionStatus;\n sessionDescription?: RTCSessionDescriptionInit;\n}\n\ninterface IAddIceCandidatesResponseInit {\n status: AddIceCandidatesStatus;\n options?: string[];\n}\n\ninterface ISetTemporaryMaximalBitrateResponseInit {\n status: SetTemporaryMaximalBitrateStatus;\n}\n\ninterface IDestroyStreamResponseInit {\n status: DestroyStreamStatus;\n}\n\nexport default class EndPoint {\n private readonly _logger: ILogger = LoggerFactory.getLogger('EndPoint');\n private readonly _uri: string;\n private readonly _timeout: number;\n private _roundTripTime: number = 0;\n\n constructor(uri: string, timeout: number) {\n this._uri = uri;\n this._timeout = timeout;\n\n if (!timeout) {\n throw new Error(`End point requires a timeout`);\n }\n }\n\n get roundTripTime(): number {\n return this._roundTripTime;\n }\n\n toString(): string {\n return `EndPoint[uri=${this._uri}]`;\n }\n\n async ping(): Promise<number> {\n const url = this.buildPingUrl();\n const start = Date.now();\n const response = await Promise.race([\n GlobalScope.value.fetch(url, {\n method: 'GET',\n cache: 'no-cache'\n }),\n new Promise<Response>((_, reject) =>\n GlobalScope.value.setTimeout(() => reject(new Error(`Ping timed out [${url}]`)), this._timeout))\n ]);\n const finished = Date.now();\n\n if (!response.ok) { /* Handle */\n throw new Error(`Ping failed [${url}] [${response.status}]`);\n }\n\n this._roundTripTime = finished - start;\n\n return this._roundTripTime;\n }\n\n async subscribe(token: EncodedEdgeToken, localSessionDescription: RTCSessionDescriptionInit | null, failureCount: number, options: SubscribeOptions = {}): Promise<ISubscribeSuccessResponseInit | ISubscribeFailureResponseInit> {\n const tenancy = EdgeAuthParser.parseToken(token).tenancy;\n\n if (!tenancy) {\n this._logger.error('Failed to parse token [%s]', token);\n\n return {status: 'unauthorized'};\n }\n\n const url = this.buildUrl([tenancy, 'stream', 'subscribe']).toString();\n const formData = new GlobalScope.value.FormData();\n const clientVersion = VersionManager.sdkVersion;\n let requestBody: ISubscribeWithOfferRequest | ISubscribeWithoutOfferRequest;\n\n if (failureCount === 0 && localSessionDescription) {\n requestBody = {\n apiVersion,\n clientVersion,\n bearerToken: token,\n failureCount,\n httpRoundTripTime: this._roundTripTime,\n setRemoteDescription: {\n apiVersion,\n sessionDescription: {\n type: localSessionDescription.type,\n sdp: localSessionDescription.sdp\n }\n },\n createAnswerDescription: {apiVersion}\n };\n } else {\n requestBody = {\n apiVersion,\n clientVersion,\n bearerToken: token,\n failureCount,\n httpRoundTripTime: this._roundTripTime,\n createOfferDescription: {apiVersion}\n };\n }\n\n await options.onSubscribeRequestCallback?.(requestBody);\n\n formData.append('jsonBody', JSON.stringify(requestBody));\n\n const start = Date.now();\n let httpResponse: Response;\n\n try {\n let timeout: number | null = null;\n\n httpResponse = await Promise.race([\n GlobalScope.value.fetch(url, {\n method: 'POST',\n body: formData\n }),\n new Promise<Response>(resolve =>\n timeout = GlobalScope.value.setTimeout(() => {\n this._logger.error('Failed to subscribe', new Error(`Subscribe timed out [${url}]`));\n resolve({status: 408} as Response);\n }, this._timeout))\n ])\n .finally(() => {\n if (timeout) {\n GlobalScope.value.clearTimeout(timeout);\n }\n });\n } catch (e) {\n this._logger.error('Failed to subscribe', e);\n\n return {status: 'failed'};\n }\n\n const status: SubscribeStatus = this.mapHttpStatusToSubscribeStatus(httpResponse);\n\n if (status !== 'ok') {\n const response: ISubscribeFailureResponseInit = {status};\n\n await options.onSubscribeResponseCallback?.(response);\n\n return response;\n }\n\n const finished = Date.now();\n const subscribeResponse = await this.convertHttpResponseToSubscribeResponse(tenancy, httpResponse);\n\n this._logger.debug('Got subscribe response [%j] in [%s] ms', subscribeResponse, finished - start);\n\n await options.onSubscribeResponseCallback?.(subscribeResponse);\n\n return subscribeResponse;\n }\n\n async publish(name: string, token: EncodedEdgeToken, localSessionDescription: RTCSessionDescriptionInit | null, failureCount: number): Promise<IPublishSuccessResponseInit | IPublishFailureResponseInit> {\n const tenancy = EdgeAuthParser.parseToken(token).tenancy;\n\n if (!tenancy) {\n this._logger.error('Failed to parse token [%s]', token);\n\n return {status: 'unauthorized'};\n }\n\n const url = this.buildUrl([tenancy, 'stream', 'publish']).toString();\n const formData = new GlobalScope.value.FormData();\n const clientVersion = VersionManager.sdkVersion;\n\n if (failureCount === 0 && localSessionDescription) {\n const bodyWithOffer: IPublishWithOfferRequest = {\n apiVersion,\n clientVersion,\n bearerToken: token,\n failureCount,\n httpRoundTripTime: this._roundTripTime,\n name,\n setRemoteDescription: {\n apiVersion,\n sessionDescription: {\n type: localSessionDescription.type,\n sdp: localSessionDescription.sdp\n }\n },\n createAnswerDescription: {\n streamId: '',\n apiVersion\n }\n };\n\n formData.append('jsonBody', JSON.stringify(bodyWithOffer));\n } else {\n const bodyWithoutOffer: IPublishWithoutOfferRequest = {\n apiVersion,\n clientVersion,\n bearerToken: token,\n failureCount,\n httpRoundTripTime: this._roundTripTime,\n name,\n createOfferDescription: {\n streamId: '',\n apiVersion\n }\n };\n\n formData.append('jsonBody', JSON.stringify(bodyWithoutOffer));\n }\n\n const start = Date.now();\n let httpResponse: Response;\n\n try {\n let timeout: number | null = null;\n\n httpResponse = await Promise.race([\n GlobalScope.value.fetch(url, {\n method: 'POST',\n body: formData\n }),\n new Promise<Response>(resolve =>\n timeout = GlobalScope.value.setTimeout(() => {\n this._logger.error('Failed to publish', new Error(`Publish timed out [${url}]`));\n resolve({status: 408} as Response);\n }, this._timeout))\n ])\n .finally(() => {\n if (timeout) {\n GlobalScope.value.clearTimeout(timeout);\n }\n });\n } catch (e) {\n this._logger.error('Failed to publish', e);\n\n return {status: 'failed'};\n }\n\n const status: PublishStatus = this.mapHttpStatusToPublishStatus(httpResponse);\n\n if (status !== 'ok') {\n return {status};\n }\n\n const finished = Date.now();\n const subscribeResponse = await this.convertHttpResponseToPublishResponse(tenancy, httpResponse);\n\n this._logger.debug('Got publish response [%j] in [%s] ms', subscribeResponse, finished - start);\n\n return subscribeResponse;\n }\n\n async setRemoteDescription(stream: IStream, sessionDescription: RTCSessionDescriptionInit): Promise<ISetRemoteDescriptionResponseInit> {\n const url = this.buildUrl([stream.tenancy, 'stream', stream.streamId, 'description', 'remote']).toString();\n const formData = new GlobalScope.value.FormData();\n const body: ISetRemoteDescriptionRequest = {\n apiVersion,\n sharedSecret: stream?.sharedSecret,\n sessionDescription: {\n type: sessionDescription.type,\n sdp: sessionDescription.sdp\n }\n };\n\n formData.append('jsonBody', JSON.stringify(body));\n\n const start = Date.now();\n let httpResponse: Response;\n\n try {\n let timeout: number | null = null;\n\n httpResponse = await Promise.race([\n GlobalScope.value.fetch(url, {\n method: 'POST',\n body: formData\n }),\n new Promise<Response>(resolve =>\n timeout = GlobalScope.value.setTimeout(() => {\n this._logger.error('Failed to set remote description', new Error(`Set remote description timed out [${url}]`));\n resolve({status: 408} as Response);\n }, this._timeout))\n ])\n .finally(() => {\n if (timeout) {\n GlobalScope.value.clearTimeout(timeout);\n }\n });\n } catch (e) {\n this._logger.error('Failed to set remote description', e);\n\n return {status: 'failed'};\n }\n\n const status: SetRemoteDescriptionStatus = this.mapHttpStatusToSetRemoteDescriptionStatus(httpResponse);\n\n if (status !== 'ok') {\n return {status};\n }\n\n const finished = Date.now();\n const setRemoteDescriptionResponse = await this.convertHttpResponseToSetRemoteDescriptionResponse(httpResponse);\n\n this._logger.debug('Got set remote description response [%j] in [%s] ms', setRemoteDescriptionResponse, finished - start);\n\n return setRemoteDescriptionResponse;\n }\n\n async limitBitrate(\n stream: IStream,\n elapsedInMilliseconds: number,\n bitrateInBitsPerSecond: BitsPerSecond,\n bitrateState: BitrateState,\n bitrateMode: BitrateMode,\n ): Promise<ISetTemporaryMaximalBitrateResponseInit> {\n const url = this.buildUrl([stream.tenancy, 'stream', stream.streamId, 'bitrate']).toString();\n const formData = new GlobalScope.value.FormData();\n const body: ISetTemporaryMaximalBitrate = {\n apiVersion,\n sharedSecret: stream.sharedSecret,\n elapsedInMilliseconds,\n bitrateInBitsPerSecond,\n bitrateState: BitrateStateMapping.convertBitrateStateToBitrateStateType(bitrateState),\n bitrateMode: BitrateModeMapping.convertBitrateModeToBitrateModeType(bitrateMode)\n };\n\n formData.append('jsonBody', JSON.stringify(body));\n\n const start = Date.now();\n let httpResponse: Response;\n\n try {\n let timeout: number | null = null;\n\n httpResponse = await Promise.race([\n GlobalScope.value.fetch(url, {\n method: 'POST',\n body: formData\n }),\n new Promise<Response>(resolve =>\n timeout = GlobalScope.value.setTimeout(() => {\n this._logger.error('Failed to set limit bitrate timed', new Error(`Set limit bitrate timed out [${url}]`));\n resolve({status: 408} as Response);\n }, this._timeout))\n ])\n .finally(() => {\n if (timeout) {\n GlobalScope.value.clearTimeout(timeout);\n }\n });\n } catch (e) {\n this._logger.error('Failed to set limit bitrate timed', e);\n\n return {status: 'failed'};\n }\n\n const status: SetTemporaryMaximalBitrateStatus = this.mapHttpStatusToSetTemporaryMaximalBitrateStatus(httpResponse);\n const finished = Date.now();\n\n this._logger.info('Got set limit bitrate response [%s] in [%s] ms', status, finished - start);\n\n return {status};\n }\n\n async addIceCandidates(stream: IStream, candidates: RTCIceCandidate[], discoveryCompleted: boolean, options: string[] = []): Promise<IAddIceCandidatesResponseInit> {\n const url = this.buildUrl([stream.tenancy, 'stream', stream.streamId, 'ice', 'candidates']).toString();\n const formData = new GlobalScope.value.FormData();\n const body: IAddIceCandidatesRequest = {\n apiVersion,\n sharedSecret: stream.sharedSecret,\n candidates,\n discoveryCompleted,\n options\n };\n\n formData.append('jsonBody', JSON.stringify(body));\n\n const start = Date.now();\n let httpResponse: Response;\n\n try {\n let timeout: number | null = null;\n\n httpResponse = await Promise.race([\n GlobalScope.value.fetch(url, {\n method: 'POST',\n body: formData\n }),\n new Promise<Response>(resolve =>\n timeout = GlobalScope.value.setTimeout(() => {\n this._logger.error('Failed to add ice candidates', new Error(`Add ice candidates timed out [${url}]`));\n resolve({status: 408} as Response);\n }, this._timeout))\n ])\n .finally(() => {\n if (timeout) {\n GlobalScope.value.clearTimeout(timeout);\n }\n });\n } catch (e) {\n this._logger.error('Failed to add ice candidates', e);\n\n return {status: 'failed'};\n }\n\n const status: AddIceCandidatesStatus = this.mapHttpStatusToAddIceCandidatesStatus(httpResponse);\n\n if (status !== 'ok') {\n return {status};\n }\n\n const finished = Date.now();\n const addIceCandidatesResponse = await this.convertHttpResponseToAddIceCandidatesResponse(httpResponse);\n\n this._logger.info('Got add ICE candidates response [%j] in [%s] ms', addIceCandidatesResponse, finished - start);\n\n return addIceCandidatesResponse;\n }\n\n async destroyStream(stream: IStream, reason: string): Promise<IDestroyStreamResponseInit> {\n const url = this.buildUrl([stream.tenancy, 'stream', stream.streamId, 'destroy']).toString();\n const formData = new GlobalScope.value.FormData();\n const body: IDestroyStreamRequest = {\n apiVersion,\n sharedSecret: stream.sharedSecret,\n reason,\n options: []\n };\n\n formData.append('jsonBody', JSON.stringify(body));\n\n const start = Date.now();\n let httpResponse: Response;\n\n try {\n let timeout: number | null = null;\n\n httpResponse = await Promise.race([\n GlobalScope.value.fetch(url, {\n method: 'POST',\n body: formData,\n cache: 'no-cache'\n }),\n new Promise<Response>(resolve =>\n timeout = GlobalScope.value.setTimeout(() => {\n this._logger.error('Failed to subscribe', new Error(`Delete stream timed out [${url}]`));\n resolve({status: 408} as Response);\n }, this._timeout))\n ])\n .finally(() => {\n if (timeout) {\n GlobalScope.value.clearTimeout(timeout);\n }\n });\n } catch (e) {\n this._logger.error('Failed to delete stream', e);\n\n return {status: 'failed'};\n }\n\n const status: DestroyStreamStatus = this.mapHttpStatusToSetDestroyStreamStatus(httpResponse);\n\n if (status !== 'ok') {\n return {status};\n }\n\n const finished = Date.now();\n const destroyStreamResponse = await this.convertHttpResponseToDestroyStreamResponse(httpResponse);\n\n this._logger.info('Got destroy stream response [%j] in [%s] ms', destroyStreamResponse, finished - start);\n\n return destroyStreamResponse;\n }\n\n async destroyStreamOnUnmount(stream: IStream, reason: string): Promise<void> {\n if (!navigator?.sendBeacon) {\n const ignored = this.destroyStream(stream, reason);\n }\n\n const url = this.buildUrl([stream.tenancy, 'stream', stream.streamId, 'destroy']).toString();\n const formData = new GlobalScope.value.FormData();\n const body: IDestroyStreamRequest = {\n apiVersion,\n sharedSecret: stream.sharedSecret,\n reason,\n options: []\n };\n\n formData.append('jsonBody', JSON.stringify(body));\n\n navigator.sendBeacon(url, formData);\n }\n\n private buildUrl(path: string[]): URL {\n const uri = new GlobalScope.value.URL(this._uri);\n const pathAsArray = uri.pathname.split('/');\n\n pathAsArray.length = pathAsArray.length - 1;\n\n uri.pathname = pathAsArray.concat(...path).join('/');\n\n return uri;\n }\n\n private buildPingUrl(): string {\n const uri = new GlobalScope.value.URL(this._uri);\n const sdkVersion = VersionManager.sdkVersion;\n const intentions = Parameters.discoveryParameters.intentions;\n\n uri.searchParams.set('type', 'http');\n uri.searchParams.set('version', sdkVersion);\n uri.searchParams.set('intentions', intentions);\n uri.searchParams.set('_', `${Date.now()}`);\n\n return uri.toString();\n }\n\n private mapHttpStatusToPublishStatus(response: Response): PublishStatus {\n if (!response) {\n return 'failed';\n }\n\n switch (response.status) {\n case 200:\n return 'ok';\n case 401:\n return 'unauthorized';\n case 402:\n return 'geo-restricted';\n case 403:\n return 'geo-blocked';\n case 406:\n return 'missing-channel-or-room-id';\n case 408:\n return 'timeout';\n case 409:\n return 'port-in-range-not-found';\n case 415:\n return 'forbidden-tag';\n case 503:\n return 'capacity';\n case 504:\n return 'rate-limited';\n default:\n return 'failed';\n }\n }\n\n private mapHttpStatusToSubscribeStatus(response: Response): SubscribeStatus {\n if (!response) {\n return 'failed';\n }\n\n switch (response.status) {\n case 200:\n return 'ok';\n case 401:\n return 'unauthorized';\n case 402:\n return 'geo-restricted';\n case 403:\n return 'geo-blocked';\n case 408:\n return 'timeout';\n case 409:\n return 'port-in-range-not-found';\n case 415:\n return 'forbidden-tag';\n case 503:\n return 'capacity';\n case 504:\n return 'rate-limited';\n default:\n return 'failed';\n }\n }\n\n private mapHttpStatusToSetRemoteDescriptionStatus(response: Response): SetRemoteDescriptionStatus {\n if (!response) {\n return 'failed';\n }\n\n switch (response.status) {\n case 200:\n return 'ok';\n case 401:\n return 'unauthorized';\n case 408:\n return 'timeout';\n case 503:\n return 'capacity';\n case 504:\n return 'rate-limited';\n default:\n return 'failed';\n }\n }\n\n private mapHttpStatusToSetTemporaryMaximalBitrateStatus(response: Response): SetTemporaryMaximalBitrateStatus {\n if (!response) {\n return 'failed';\n }\n\n switch (response.status) {\n case 200:\n return 'ok';\n case 401:\n return 'unauthorized';\n case 408:\n return 'timeout';\n case 503:\n return 'capacity';\n case 504:\n return 'rate-limited';\n default:\n return 'failed';\n }\n }\n\n private mapHttpStatusToAddIceCandidatesStatus(response: Response): AddIceCandidatesStatus {\n if (!response) {\n return 'failed';\n }\n\n switch (response.status) {\n case 200:\n return 'ok';\n case 401:\n return 'unauthorized';\n case 408:\n return 'timeout';\n case 503:\n return 'capacity';\n case 504:\n return 'rate-limited';\n default:\n return 'failed';\n }\n }\n\n private mapHttpStatusToSetDestroyStreamStatus(response: Response): DestroyStreamStatus {\n if (!response) {\n return 'failed';\n }\n\n switch (response.status) {\n case 200:\n return 'ok';\n case 401:\n return 'unauthorized';\n case 408:\n return 'timeout';\n case 503:\n return 'capacity';\n case 504:\n return 'rate-limited';\n default:\n return 'failed';\n }\n }\n\n private async convertHttpResponseToSubscribeResponse(tenancy: string, response: Response): Promise<ISubscribeSuccessResponseInit> {\n const data = await response.json() as ISubscribeSuccessResponse;\n const {\n status,\n streamId,\n sharedSecret,\n lag,\n rtcConfiguration,\n setRemoteDescriptionResponse,\n createAnswerDescriptionResponse,\n createOfferDescriptionResponse,\n ...otherProperties\n } = data;\n const subscribeResponse: ISubscribeSuccessResponseInit = {\n status,\n stream: {\n tenancy,\n streamId,\n sharedSecret\n },\n lag,\n ...otherProperties\n };\n\n if (rtcConfiguration) {\n subscribeResponse.rtcConfiguration = this.convertIRtcConfigurationToRTCConfiguration(rtcConfiguration);\n }\n\n if (setRemoteDescriptionResponse?.sessionDescription) {\n subscribeResponse.setRemoteDescriptionResponse = {sessionDescription: setRemoteDescriptionResponse.sessionDescription};\n }\n\n if (createAnswerDescriptionResponse?.sessionDescription) {\n subscribeResponse.createAnswerDescriptionResponse = {sessionDescription: createAnswerDescriptionResponse.sessionDescription};\n }\n\n if (createOfferDescriptionResponse?.sessionDescription) {\n subscribeResponse.createOfferDescriptionResponse = {sessionDescription: createOfferDescriptionResponse.sessionDescription};\n }\n\n return subscribeResponse;\n }\n\n private async convertHttpResponseToPublishResponse(tenancy: string, response: Response): Promise<IPublishSuccessResponseInit> {\n const data = await response.json() as IPublishSuccessResponse;\n const publishResponse: IPublishSuccessResponseInit = {\n status: data.status,\n stream: {\n tenancy,\n streamId: data.streamId,\n sharedSecret: data.sharedSecret\n }\n };\n\n if (data) {\n if (data.rtcConfiguration) {\n publishResponse.rtcConfiguration = this.convertIRtcConfigurationToRTCConfiguration(data.rtcConfiguration);\n }\n\n if (data.setRemoteDescriptionResponse && data.setRemoteDescriptionResponse.sessionDescription) {\n publishResponse.setRemoteDescriptionResponse = {sessionDescription: data.setRemoteDescriptionResponse.sessionDescription};\n }\n\n if (data.createAnswerDescriptionResponse && data.createAnswerDescriptionResponse.sessionDescription) {\n publishResponse.createAnswerDescriptionResponse = {sessionDescription: data.createAnswerDescriptionResponse.sessionDescription};\n }\n\n if (data.createOfferDescriptionResponse && data.createOfferDescriptionResponse.sessionDescription) {\n publishResponse.createOfferDescriptionResponse = {sessionDescription: data.createOfferDescriptionResponse.sessionDescription};\n }\n }\n\n return publishResponse;\n }\n\n private convertIRtcConfigurationToRTCConfiguration(configuration: RTCConfiguration): RTCConfiguration {\n const rtcConfiguration: RTCConfiguration = {iceServers: []};\n\n if (configuration.bundlePolicy) {\n rtcConfiguration.bundlePolicy = configuration.bundlePolicy;\n }\n\n if (typeof configuration.iceCandidatePoolSize === 'number') {\n rtcConfiguration.iceCandidatePoolSize = configuration.iceCandidatePoolSize;\n }\n\n if (configuration.iceServers) {\n const iceServers: RTCIceServer[] = [];\n\n for (let i = 0; i < configuration.iceServers.length; i++) {\n iceServers.push({\n urls: configuration.iceServers[i].urls,\n username: configuration.iceServers[i].username,\n credential: configuration.iceServers[i].credential\n });\n }\n\n rtcConfiguration.iceServers = iceServers;\n }\n\n if (configuration.iceTransportPolicy) {\n rtcConfiguration.iceTransportPolicy = configuration.iceTransportPolicy;\n }\n\n if (configuration.rtcpMuxPolicy) {\n rtcConfiguration.rtcpMuxPolicy = configuration.rtcpMuxPolicy;\n }\n\n return rtcConfiguration;\n }\n private async convertHttpResponseToSetRemoteDescriptionResponse(response: Response): Promise<ISetRemoteDescriptionResponseInit> {\n const data = await response.json() as ISetRemoteDescriptionResponse;\n const setRemoteDescriptionResponse: ISetRemoteDescriptionResponseInit = {status: data.status};\n\n if (data && data.sessionDescription) {\n setRemoteDescriptionResponse.sessionDescription = data.sessionDescription;\n }\n\n return setRemoteDescriptionResponse;\n }\n\n private async convertHttpResponseToAddIceCandidatesResponse(response: Response): Promise<IAddIceCandidatesResponseInit> {\n const data = await response.json() as IAddIceCandidatesResponse;\n const addIceCandidatesResponse: IAddIceCandidatesResponseInit = {\n status: data.status,\n options: []\n };\n\n if (data) {\n if (data.options) {\n addIceCandidatesResponse.options = data.options;\n }\n }\n\n return addIceCandidatesResponse;\n }\n\n private async convertHttpResponseToDestroyStreamResponse(response: Response): Promise<IDestroyStreamResponseInit> {\n const data = await response.json() as IDestroyStreamResponse;\n const destroyStream: IDestroyStreamResponseInit = {status: data.status};\n\n return destroyStream;\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport GlobalScope from '../../globalScope/GlobalScope';\nimport {ILogger} from '../../logger/LoggerInterface';\nimport LoggerFactory from '../../logger/LoggerFactory';\nimport MetricsService from '../../metrics/MetricsService';\nimport MetricsFactory from '../../metrics/MetricsFactory';\nimport MetricsType from '../../metrics/MetricsType';\nimport DiscoveryUri from './DiscoveryUri';\nimport EndPoint from './EndPoint';\nimport SDK from '../SDK';\n\nconst defaultTimeout = 20000;\n\nexport default class DiscoveryService {\n private _logger: ILogger = LoggerFactory.getLogger('Discovery');\n private _metricsService: MetricsService;\n private _uri: URL;\n\n constructor(uri: URL) {\n if (!uri) {\n throw new Error('Discovery requires uri');\n }\n\n this._metricsService = MetricsFactory.getMetricsService(uri.toString());\n this._uri = uri;\n }\n\n async discoverNearbyEndPoints(uri: URL, timeout: number): Promise<EndPoint[]> {\n if (!timeout) {\n throw new Error('Discovery requires timeout');\n }\n\n const url = uri.toString();\n const response = await Promise.race([\n GlobalScope.value.fetch(url, {\n method: 'GET',\n cache: 'no-cache'\n }),\n new Promise<Response>((_, reject) => GlobalScope.value.setTimeout(() => reject(new Error(`Discovery timed out [${url}]`)), timeout))\n ]);\n\n if (!response.ok) {\n throw new Error(`Discovery failed [${url}] [${response.status}]`);\n }\n\n if (response.body === null) {\n throw new Error(`Discovery failed with no data [${url}]`);\n }\n\n const asString = await response.text();\n const endPoints = asString.split(',');\n\n return endPoints.map(endPoint => new EndPoint(endPoint, timeout));\n }\n\n async discoverClosestEndPoint(timeout: number = defaultTimeout): Promise<EndPoint> {\n const url = DiscoveryUri.buildDiscoveryUrl(this._uri);\n const endPoints = await this.discoverNearbyEndPoints(new GlobalScope.value.URL(url), timeout);\n let failedRequests = 0;\n const propagateFailureIfAllRequestsFailed = (): Promise<void> => new Promise((_, reject) => {\n if (failedRequests >= endPoints.length) {\n reject(`Discovery of [${endPoints.length}] endpoints from [${url}] failed, preventing it from completing`);\n }\n });\n const endPoint = await Promise.race(endPoints.map(endPoint => endPoint\n .ping()\n .catch(e => {\n this._logger.warn('Failed to ping end point [%s]', endPoint, e);\n\n failedRequests++;\n\n return propagateFailureIfAllRequestsFailed();\n })\n .then(time => {\n const now = Date.now();\n\n this._logger.info('Discovered end point [%s] with time [%s]', endPoint.toString(), time);\n this._metricsService.push({\n metricType: MetricsType.RoundTripTime,\n runtime: (now - SDK.pageLoadTime) / 1000,\n value: {uint64: time || 0},\n resource: endPoint.toString(),\n kind: 'ping'\n });\n\n return endPoint;\n })));\n\n return endPoint;\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport GlobalScope from '../../globalScope/GlobalScope';\nimport DiscoveryService from './DiscoveryService';\nimport EndPoint from './EndPoint';\nimport SDK from '../SDK';\n\nconst discoveryCacheInterval = 60000;\n\ninterface IPerURIEndpoint { [x: string]: Promise<EndPoint> }\n\nexport default class Discovery {\n private static _cache: IPerURIEndpoint = {};\n\n static async precacheClosestEndPointDiscovery(): Promise<EndPoint> {\n return new Promise<EndPoint>(resolveEndPointPromise => {\n const globalScopeSubscription = GlobalScope.subscribe(globalScope => {\n if (!globalScope) {\n return;\n }\n\n const uri = new globalScope.URL(SDK.discoveryUri.value);\n\n return Discovery.discoverClosestEndPointWithCaching(uri)\n .then(resolveEndPointPromise)\n .then(() => globalScopeSubscription.dispose());\n });\n });\n }\n\n static async discoverClosestEndPointWithCaching(uri: URL): Promise<EndPoint> {\n const url = uri.toString();\n\n if (url in Discovery._cache) {\n return Discovery._cache[url];\n }\n\n const discoveryService = new DiscoveryService(uri);\n const cachedValue = Discovery._cache[url] = discoveryService.discoverClosestEndPoint();\n const ignored = Discovery._cache[url].then(() => {\n const ignored = GlobalScope.value.setTimeout(() => {\n if (Discovery._cache[url] === cachedValue) {\n delete Discovery._cache[url];\n }\n }, discoveryCacheInterval);\n }).catch(() => {\n delete Discovery._cache[url];\n });\n\n return cachedValue;\n }\n\n static clearCachedClosestEndpoint(uri: URL): void {\n const url = uri.toString();\n\n if (url in Discovery._cache) {\n delete Discovery._cache[url];\n }\n }\n\n private constructor() {\n throw new Error('Discovery is a static class that may not be instantiated');\n }\n}\n\nconst ignored = Discovery.precacheClosestEndPointDiscovery();","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nexport enum NetworkStates {\n NetworkEmpty,\n NetworkIdle,\n NetworkLoading,\n NetworkNoSource\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport {ILogger} from '../../logger/LoggerInterface';\nimport LoggerFactory from '../../logger/LoggerFactory';\nimport {ChunkedStreaming} from './ChunkedStreaming';\nimport {ChunkedStreamingOptions, ChunkedStreamingStatistics} from './StreamTypes';\nimport {IWebPlayer} from './IWebPlayer';\nimport {NetworkStates} from './NetworkStates';\n\nconst bandwidthToStartAt = 3000000; // Corresponds to 720p in most setups\nconst minTimeBeforeNextReload = 15000;\n\ntype PlayerOptions = {\n preferNative?: boolean;\n originStartTime: number;\n lag: number;\n bandwidthToStartAt: number;\n};\n\nexport default class WebPlayer {\n private readonly _logger: ILogger = LoggerFactory.getLogger('WebPlayer');\n private readonly _videoElement: HTMLVideoElement;\n private readonly _kind: string;\n private readonly _streamId: string;\n private readonly _manifestURI: string;\n private readonly _options: ChunkedStreamingOptions;\n private readonly _handleStreamFailure: Function;\n private _player: IWebPlayer | null;\n private _lastReloadTime: number;\n\n constructor(videoElement: HTMLVideoElement, kind: string, streamId: string, manifestURI: string, options: ChunkedStreamingOptions, handleStreamFailure: Function) {\n this._videoElement = videoElement;\n this._kind = kind;\n this._streamId = streamId;\n this._manifestURI = encodeURI(manifestURI).replace(/[#]/g, '%23');\n this._options = options;\n this._player = null;\n this._lastReloadTime = 0;\n this._handleStreamFailure = handleStreamFailure;\n }\n\n start(): void {\n if (ChunkedStreaming.phenixWebPlayer) {\n const playerOptions: PlayerOptions = {\n ...this._options,\n bandwidthToStartAt\n };\n\n this._player = new ChunkedStreaming.phenixWebPlayer.WebPlayer(this._logger, this._videoElement, playerOptions);\n this._player?.start(this._manifestURI);\n\n this._player?.addEventListener('error', errorObject => {\n if (this.canReload() && errorObject && (errorObject.code === 3 || errorObject.severity === ChunkedStreaming.phenixWebPlayer.errors.severity.RECOVERABLE)) {\n this._logger.warn('Reloading unhealthy stream after error event [%j]', errorObject);\n this.reloadIfAble();\n }\n\n this._logger.error('Cannot reload with error [%j]', errorObject);\n\n this._handleStreamFailure();\n });\n\n return;\n }\n }\n\n isSupported(): boolean {\n return ChunkedStreaming.phenixWebPlayer && ChunkedStreaming.phenixWebPlayer.isSupported;\n }\n\n getStats(): ChunkedStreamingStatistics {\n if (!this._player) {\n return {\n width: 0,\n height: 0,\n currentTime: 0.0,\n lag: 0.0,\n networkState: NetworkStates.NetworkNoSource,\n dataBuffered: 0.0\n };\n }\n\n const statistics = this._player.getStats();\n const currentTime = statistics.currentTime || this._videoElement['currentTime'];\n const trueCurrentTime = (Date.now() - this._options.originStartTime) / 1000;\n\n if (this._videoElement.buffered?.length) {\n statistics.dataBuffered = this._videoElement.buffered.end(0);\n }\n\n if (statistics.isNative && statistics.deliveryType === 'Hls') {\n statistics.currentTime = currentTime - statistics.lag;\n }\n\n if (!statistics.currentTime) {\n statistics.currentTime = currentTime;\n }\n\n if (!statistics.isNative) {\n statistics.lag = Math.max(0.0, trueCurrentTime - currentTime);\n }\n\n if (this._videoElement.buffered?.length) {\n statistics.networkState = NetworkStates.NetworkLoading;\n } else if (statistics.currentTime > 0) {\n statistics.networkState = NetworkStates.NetworkIdle;\n } else if (statistics.video) {\n statistics.networkState = NetworkStates.NetworkEmpty;\n } else {\n statistics.networkState = NetworkStates.NetworkNoSource;\n }\n\n return statistics;\n }\n\n dispose(): void {\n if (this._player) {\n this._player.dispose();\n }\n\n this._player = null;\n }\n\n private canReload(): boolean {\n const hasElapsedMinTimeSinceLastReload = !this._lastReloadTime || Date.now() - this._lastReloadTime > minTimeBeforeNextReload;\n\n return !!this._videoElement && !!this._player && this._videoElement.buffered.length !== 0 && hasElapsedMinTimeSinceLastReload;\n }\n\n private reloadIfAble(): void {\n if (!this.canReload()) {\n return;\n }\n\n this._logger.warn('[%s] Reloading unhealthy stream that was active for at least [%s] seconds', this._streamId, minTimeBeforeNextReload / 1000);\n\n this._lastReloadTime = Date.now();\n\n this.reload();\n }\n\n private reload(): void {\n if (this._player) {\n this._player.dispose();\n }\n\n this._player = null;\n\n this.start();\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport Disposable from '../../lang/Disposable';\nimport DisposableList from '../../lang/DisposableList';\nimport {ILogger} from '../../logger/LoggerInterface';\nimport LoggerFactory from '../../logger/LoggerFactory';\nimport {ChunkedStreaming} from './ChunkedStreaming';\nimport {ChunkedStreamingOptions, ChunkedStreamingStatistics} from './StreamTypes';\nimport {IShakaPlayer, ShakaOptions} from './IShakaPlayer';\nimport {NetworkStates} from './NetworkStates';\n\nexport default class ShakaPlayer {\n private readonly _logger: ILogger = LoggerFactory.getLogger('ShakaPlayer');\n private readonly _videoElement: HTMLVideoElement;\n private readonly _kind: string;\n private readonly _streamId: string;\n private readonly _manifestURI: string;\n private readonly _options: ChunkedStreamingOptions;\n private readonly _handleStreamFailure: Function;\n private readonly _disposables: DisposableList;\n private readonly _monitoredStatistics: {\n estimatedBandwidth: number | undefined;\n playTime: number | undefined;\n };\n private _player: IShakaPlayer | null;\n\n constructor(videoElement: HTMLVideoElement, kind: string, streamId: string, manifestURI: string, options: ChunkedStreamingOptions, handleStreamFailure: Function) {\n this._videoElement = videoElement;\n this._kind = kind;\n this._streamId = streamId;\n this._manifestURI = encodeURI(manifestURI).replace(/[#]/g, '%23');\n this._options = options;\n this._handleStreamFailure = handleStreamFailure;\n this._disposables = new DisposableList();\n this._monitoredStatistics = {\n estimatedBandwidth: 0,\n playTime: 0\n };\n this._player = null;\n }\n\n start(): void {\n if (ChunkedStreaming.shaka) {\n const playerOptions: ShakaOptions = {\n abr: {defaultBandwidthEstimate: 2000000},\n manifest: {retryParameters: {timeout: 10000}},\n streaming: {\n liveSyncPanicThreshold: 1,\n bufferingGoal: 60,\n bufferBehind: 30,\n retryParameters: {\n timeout: 10000,\n maxAttempts: 10,\n backoffFactor: 1.1\n }\n }\n };\n\n this._player = new ChunkedStreaming.shaka.Player(this._videoElement);\n this.loadPlayer(playerOptions);\n\n return;\n }\n }\n\n getStats(): ChunkedStreamingStatistics {\n if (!this._player) {\n return {\n width: 0,\n height: 0,\n currentTime: 0,\n lag: 0,\n networkState: NetworkStates.NetworkNoSource,\n dataBuffered: 0.0\n };\n }\n\n const statistics = {\n ...this._player.getStats(),\n currentTime: 0,\n lag: 0\n };\n const currentTime = this._videoElement['currentTime'] || 0;\n const trueCurrentTime = (Date.now() - this._options.originStartTime) / 1000;\n const lag = Math.max(0.0, trueCurrentTime - currentTime);\n\n if (this._videoElement) {\n statistics.currentTime = currentTime;\n statistics.lag = lag;\n\n if (this._videoElement.buffered && this._videoElement.buffered.length) {\n statistics.dataBuffered = this._videoElement.buffered.end(0);\n }\n }\n\n if (statistics.estimatedBandwidth) {\n if (statistics.estimatedBandwidth && statistics.estimatedBandwidth > 0 && (this._monitoredStatistics.estimatedBandwidth && this._monitoredStatistics.estimatedBandwidth < statistics.estimatedBandwidth)) {\n statistics.networkState = NetworkStates.NetworkLoading;\n } else if (statistics.playTime && statistics.playTime > 0 && (this._monitoredStatistics.playTime && this._monitoredStatistics.playTime < statistics.playTime)) {\n statistics.networkState = NetworkStates.NetworkIdle;\n } else if (statistics.video) {\n statistics.networkState = NetworkStates.NetworkEmpty;\n } else {\n statistics.networkState = NetworkStates.NetworkNoSource;\n }\n }\n\n this._monitoredStatistics.estimatedBandwidth = statistics.estimatedBandwidth;\n this._monitoredStatistics.playTime = statistics.playTime;\n\n return statistics;\n }\n\n dispose(): void {\n this._disposables.dispose();\n\n if (this._player) {\n this._player.unload();\n this._player.destroy();\n }\n\n this._player = null;\n }\n\n private loadPlayer(playerConfig: ShakaOptions): void {\n this._player?.configure(playerConfig);\n\n const errorHandler = () => this._handleStreamFailure();\n\n this._player?.addEventListener('error', errorHandler);\n\n this._disposables.add(new Disposable(() => this._player?.removeEventListener('error', errorHandler)));\n\n const ignored = this._player?.load(this._manifestURI).then(() => {\n this._logger.info('[%s] DASH live stream has been loaded', this._streamId);\n\n if (this._videoElement.play) {\n this._videoElement.play();\n }\n }).catch(e => {\n this._logger.error('[%s] Error while loading DASH live stream [%s]', this._streamId, e.code, e);\n });\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport {ChunkedStreaming} from './ChunkedStreaming';\nimport {ChunkedStreamingOptions, ChunkedStreamingStatistics} from './StreamTypes';\nimport {IHlsPlayerType} from './IHlsPlayer';\nimport {NetworkStates} from './NetworkStates';\n\nexport default class HlsPlayer {\n private readonly _videoElement: HTMLVideoElement;\n private readonly _kind: string;\n private readonly _streamId: string;\n private readonly _manifestURI: string;\n private readonly _options: ChunkedStreamingOptions;\n private _player: IHlsPlayerType | null;\n\n constructor(videoElement: HTMLVideoElement, kind: string, streamId: string, manifestURI: string, options: ChunkedStreamingOptions) {\n this._videoElement = videoElement;\n this._kind = kind;\n this._streamId = streamId;\n this._manifestURI = encodeURI(manifestURI).replace(/[#]/g, '%23');\n this._options = options;\n this._player = null;\n }\n\n start(): void {\n if (ChunkedStreaming.hlsPlayer) {\n if (ChunkedStreaming.hlsPlayer.isSupported()) {\n this._player = new ChunkedStreaming.hlsPlayer({\n enableWorker: true,\n maxBufferLength: 1,\n backBufferLength: 0,\n liveSyncDuration: 7,\n liveDurationInfinity: true,\n liveMaxLatencyDuration: Infinity,\n highBufferWatchdogPeriod: 1\n });\n this._player.loadSource(this._manifestURI);\n this._player.attachMedia(this._videoElement);\n } else if (this._videoElement.canPlayType('application/vnd.apple.mpegurl')) {\n this._videoElement.src = this._manifestURI;\n }\n }\n }\n\n isSupported(): boolean {\n return ChunkedStreaming.hlsPlayer && ChunkedStreaming.hlsPlayer.isSupported();\n }\n\n getStats(): ChunkedStreamingStatistics {\n if (!this._player) {\n return {\n width: 0,\n height: 0,\n currentTime: 0.0,\n lag: 0.0,\n networkState: NetworkStates.NetworkNoSource,\n dataBuffered: 0.0\n };\n }\n\n const statistics = {\n width: this._player.media.offsetWidth,\n height: this._player.media.offsetHeight,\n currentTime: this._player.media.currentTime,\n lag: 0.0,\n networkState: NetworkStates.NetworkIdle,\n dataBuffered: 0.0\n };\n\n if (this._videoElement.buffered && this._videoElement.buffered.length) {\n statistics.dataBuffered = this._videoElement.buffered.end(0);\n }\n\n if (this._player.streamController.state === 'IDLE') {\n statistics.networkState = NetworkStates.NetworkIdle;\n } else if (this._player.streamController.state === 'ERROR' || this._player.streamController.state === 'ENDED') {\n statistics.networkState = NetworkStates.NetworkNoSource;\n } else if (this._player.streamController.state.includes('LOADING') || this._player.streamController.state.includes('WAITING')) {\n statistics.networkState = NetworkStates.NetworkLoading;\n } else {\n statistics.networkState = NetworkStates.NetworkEmpty;\n }\n\n const currentTime = this._videoElement['currentTime'] || 0;\n const trueCurrentTime = (Date.now() - this._options.originStartTime) / 1000;\n\n statistics.lag = Math.max(0.0, (currentTime + (this._options.lag / 1000)) - trueCurrentTime);\n\n return statistics;\n }\n\n dispose(): void {\n if (this._player && this._player.destroy) {\n this._player.destroy();\n\n this._player = null;\n }\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport FeatureEnablement from '../../environment/FeatureEnablement';\nimport WebPlayer from './WebPlayer';\nimport SDK from '../SDK';\nimport ShakaPlayer from './ShakaPlayer';\nimport HlsPlayer from './HlsPlayer';\nimport IDisposable from '../../lang/IDisposable';\nimport {\n ChunkedStreamingOptions,\n ChunkedStreamingStatistics\n} from './StreamTypes';\nimport {ShakaPlayerType} from './IShakaPlayer';\nimport {HlsPlayerType} from './IHlsPlayer';\nimport {WebPlayerType} from './IWebPlayer';\n\nexport class ChunkedStreaming {\n private static _pending = false;\n private static _hlsPlayer: HlsPlayerType;\n private static _phenixWebPlayer: WebPlayerType;\n private static _shaka: ShakaPlayerType;\n private static _options: ChunkedStreamingOptions;\n private static _player: ShakaPlayer | WebPlayer | HlsPlayer;\n\n static get hlsPlayer(): HlsPlayerType {\n return this._hlsPlayer;\n }\n\n static get phenixWebPlayer(): WebPlayerType {\n return this._phenixWebPlayer;\n }\n\n static get shaka(): ShakaPlayerType {\n return this._shaka;\n }\n\n static async start(videoElement: HTMLVideoElement, streamId: string, offerSdp: string, options: ChunkedStreamingOptions, handleStreamFailure: Function): Promise<IDisposable> {\n this._options = options;\n\n if (this._hlsPlayer || this._shaka || this._phenixWebPlayer) {\n return this.loaded(videoElement, streamId, offerSdp, handleStreamFailure);\n }\n\n if (!SDK.webPlayerLoader && !SDK.shakaPlayerLoader && !SDK.hlsJsLoader) {\n throw new Error('Unsupported-feature, add stream player');\n }\n\n return new Promise<IDisposable>(resolve => {\n if (SDK.hlsJsLoader) {\n this._pending = true;\n SDK.hlsJsLoader((player: HlsPlayerType): void => {\n this._hlsPlayer = player;\n\n if (this._pending) {\n this._pending = false;\n\n resolve(this.loaded(videoElement, streamId, offerSdp, handleStreamFailure));\n }\n });\n }\n\n if (SDK.webPlayerLoader) {\n this._pending = true;\n SDK.webPlayerLoader((player: WebPlayerType): void => {\n this._phenixWebPlayer = player;\n\n if (this._pending) {\n this._pending = false;\n\n resolve(this.loaded(videoElement, streamId, offerSdp, handleStreamFailure));\n }\n });\n }\n\n if (SDK.shakaPlayerLoader) {\n this._pending = true;\n SDK.shakaPlayerLoader((player: ShakaPlayerType): void => {\n this._shaka = player;\n\n if (this._pending) {\n this._pending = false;\n\n resolve(this.loaded(videoElement, streamId, offerSdp, handleStreamFailure));\n }\n });\n }\n });\n }\n\n static getStats(): ChunkedStreamingStatistics | null {\n if (this._player) {\n return this._player.getStats();\n }\n\n return null;\n }\n\n private static async play(Player: typeof WebPlayer | typeof ShakaPlayer | typeof HlsPlayer, videoElement: HTMLVideoElement, streamId: string, offerSdp: string, options: ChunkedStreamingOptions, handleStreamFailure: Function): Promise<IDisposable> {\n const dashManifestUrlMatch = offerSdp.match(/a=x-playlist:([^\\n]*[.]mpd\\??[^\\s]*)/m);\n const hlsManifestUrlMatch = offerSdp.match(/a=x-playlist:([^\\n]*[.]m3u8\\??[^\\s]*)/m);\n const manifestUrl = dashManifestUrlMatch && dashManifestUrlMatch[1] ? dashManifestUrlMatch[1] : '';\n const playlistUrl = hlsManifestUrlMatch && hlsManifestUrlMatch[1] ? hlsManifestUrlMatch[1] : '';\n\n if (playlistUrl) {\n if (!this._phenixWebPlayer || FeatureEnablement.shouldUseNativeHls) {\n this._player = new Player(videoElement, 'hls', streamId, playlistUrl, options, handleStreamFailure);\n\n this._player.start();\n\n return this._player;\n }\n }\n\n if (manifestUrl) {\n if (!this._hlsPlayer && !(this._phenixWebPlayer && FeatureEnablement.shouldUseNativeHls)) {\n this._player = new Player(videoElement, 'dash', streamId, manifestUrl, options, handleStreamFailure);\n\n this._player.start();\n\n return this._player;\n }\n }\n\n if (manifestUrl || playlistUrl) {\n throw new Error(`[${streamId}] Cannot play [${playlistUrl ? 'HLS' : 'DASH'}] stream with included player`);\n }\n\n throw new Error('No stream playlist found');\n }\n\n private static loaded(videoElement: HTMLVideoElement, streamId: string, offerSdp: string, handleStreamFailure: Function): Promise<IDisposable> {\n if (this._hlsPlayer) {\n return this.play(HlsPlayer, videoElement, streamId, offerSdp, {\n ...this._options,\n preferNative: FeatureEnablement.shouldUseNativeHls\n }, handleStreamFailure);\n }\n\n if (this._phenixWebPlayer) {\n return this.play(WebPlayer, videoElement, streamId, offerSdp, {\n ...this._options,\n preferNative: FeatureEnablement.shouldUseNativeHls\n }, handleStreamFailure);\n }\n\n return this.play(ShakaPlayer, videoElement, streamId, offerSdp, {\n ...this._options,\n preferNative: FeatureEnablement.shouldUseNativeHls\n }, handleStreamFailure);\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nenum ChunkedStreamPlaybackMode {\n Live = 1,\n OndDemand = 2\n}\n\nexport default ChunkedStreamPlaybackMode;","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport GlobalScope from '../../globalScope/GlobalScope';\nimport {ILogger} from '../../logger/LoggerInterface';\nimport LoggerFactory from '../../logger/LoggerFactory';\nimport FeatureEnablement from '../../environment/FeatureEnablement';\n\nconst detectionTimeoutInMilliseconds = 1000;\n\nexport default class VideoFrameDetector {\n private static _logger: ILogger = LoggerFactory.getLogger('VideoFrameDetector');\n\n public static isRenderingFrames(videoElement: HTMLVideoElement): Promise<boolean> {\n if (!FeatureEnablement.isRequestVideoFrameCallbackSupported) {\n this._logger.debug('requestVideoFrameCallback not supported, assuming rendering');\n\n return Promise.resolve(true);\n }\n\n if (!FeatureEnablement.isRequestAnimationFrameSupported) {\n this._logger.debug('requestAnimationFrame not supported, assuming rendering');\n\n return Promise.resolve(true);\n }\n\n // On desktop browsers, the requestVideoFrameCallback vs requestAnimationFrame race\n // produces false negatives after returning from a background tab. The video compositor\n // is inactive while the tab is hidden, so requestVideoFrameCallback does not fire\n // promptly after foregrounding — requestAnimationFrame wins the race even when the\n // stream is healthy. This causes the foreground health check to trigger unnecessary\n // Recovering transitions. On mobile, browsers are more aggressive about pausing or\n // destroying background media pipelines, making frame-level stall detection valuable\n // despite the race risk. Desktop streams rely on the RTC connection monitor's\n // bytes-received stats to detect genuine stalls instead.\n if (!FeatureEnablement.isMobile) {\n this._logger.debug('Skipping frame detection on desktop, assuming rendering');\n\n return Promise.resolve(true);\n }\n\n const startTime = Date.now();\n\n // Detect whether the video element is actively rendering decoded frames by requesting\n // both a video frame callback and an animation frame callback simultaneously.\n // When the stream is healthy, requestVideoFrameCallback fires first because a decoded\n // frame is available for presentation. When the stream is stalled, only\n // requestAnimationFrame fires promptly because it is driven by the display refresh\n // cycle regardless of video state.\n // A false negative (requestAnimationFrame winning despite active rendering) is possible\n // when both callbacks land on the same frame, but is bounded to a single unnecessary\n // restart.\n return new Promise<boolean>(resolve => {\n let resolved = false;\n const timeoutId = GlobalScope.value.setTimeout(() => {\n if (!resolved) {\n resolved = true;\n this._logger.info('Frame detection timed out after [%s] ms, assuming rendering', detectionTimeoutInMilliseconds);\n\n resolve(true);\n }\n }, detectionTimeoutInMilliseconds);\n\n videoElement.requestVideoFrameCallback(() => {\n if (!resolved) {\n resolved = true;\n GlobalScope.value.clearTimeout(timeoutId);\n this._logger.debug('Video frame rendered within [%s] ms — stream is healthy', Date.now() - startTime);\n\n resolve(true);\n }\n });\n\n // If requestAnimationFrame fires before requestVideoFrameCallback, no video frames\n // are being decoded — the stream is stalled.\n GlobalScope.value.requestAnimationFrame(() => {\n if (!resolved) {\n resolved = true;\n GlobalScope.value.clearTimeout(timeoutId);\n this._logger.debug('No video frame rendered within [%s] ms — stream is stalled', Date.now() - startTime);\n\n resolve(false);\n }\n });\n });\n }\n\n constructor() {\n throw new Error('VideoFrameDetector is a static class that may not be instantiated');\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport GlobalScope from '../../globalScope/GlobalScope';\nimport ChannelContext from '../context/ChannelContext';\nimport Discovery from '../discovery/Discovery';\nimport Disposable from '../../lang/Disposable';\nimport DisposableList from '../../lang/DisposableList';\nimport LoggerFactory from '../../logger/LoggerFactory';\nimport ChannelState from '../channels/ChannelState';\nimport {ChunkedStreaming} from './ChunkedStreaming';\nimport {ChunkedStreamingOptions, ChunkedStreamingStatistics} from './StreamTypes';\nimport IDisposable from '../../lang/IDisposable';\nimport {IStreamSubscriber} from './IStreamSubscriber';\nimport {ILogger} from '../../logger/LoggerInterface';\nimport {NetworkStates} from './NetworkStates';\nimport ChunkedStreamPlaybackMode from './ChunkedStreamPlaybackMode';\nimport VideoFrameDetector from './VideoFrameDetector';\n\nexport default class ChunkedStreamSubscriber implements IStreamSubscriber {\n private readonly _logger: ILogger = LoggerFactory.getLogger('ChunkedStreamSubscriber');\n private readonly _channelContext: ChannelContext;\n private readonly _chunkedStreamPlaybackMode: ChunkedStreamPlaybackMode;\n private readonly _disposables = new DisposableList();\n private readonly _monitorDisposables = new DisposableList();\n private readonly _handleStreamFailure: () => Promise<void>;\n private _streamStatistics: ChunkedStreamingStatistics | null = null;\n private _monitorFailureCount = 0;\n\n constructor(channelContext: ChannelContext, chunkedStreamPlaybackMode: ChunkedStreamPlaybackMode, handleStreamFailure: () => Promise<void>) {\n this._channelContext = channelContext;\n this._chunkedStreamPlaybackMode = chunkedStreamPlaybackMode;\n this._handleStreamFailure = handleStreamFailure;\n this._channelContext.disposables.add(this);\n }\n\n start(uri: URL, token: string): Promise<void | IDisposable> {\n return Discovery.discoverClosestEndPointWithCaching(uri)\n .then(endPoint => {\n this._channelContext.online.value = true;\n this._channelContext.endPoint.value = endPoint;\n this._logger.info('Connecting to [%s]', endPoint.toString());\n\n return endPoint.subscribe(token, null, this._channelContext.failureCount.value);\n })\n .then(response => {\n const {status} = response;\n const endPoint = this._channelContext.endPoint.value;\n\n if (!endPoint) {\n this._logger.error('Subscribe failed: end point service is missing');\n this._channelContext.loading.value = false;\n this._channelContext.playing.value = false;\n this._channelContext.state.value = ChannelState.Error;\n\n return;\n }\n\n this._channelContext.exists.value = this._channelContext.mapSubscribeStatusToExists(status);\n this._channelContext.state.value = this._channelContext.mapSubscribeStatusToChannelStatus(status);\n\n this._channelContext.applyStatus(status);\n\n if (status !== 'ok') {\n this._channelContext.stream.value = null;\n this._channelContext.lag.value = undefined ;\n\n this._channelContext.applySessionAndStreamPropertiesToVideoElement();\n\n this._logger.debug(\n '[%s] Subscribe failed with status [%s]',\n this._channelContext.streamId,\n status,\n );\n\n return;\n }\n\n const {stream, createOfferDescriptionResponse, lag} = response;\n\n this._channelContext.stream.value = stream;\n this._channelContext.lag.value = lag;\n\n this._channelContext.applySessionAndStreamPropertiesToVideoElement();\n\n this._logger.debug(\n '[%s] Subscribe completed [%s] [%j]',\n this._channelContext.streamId,\n status,\n createOfferDescriptionResponse,\n );\n\n const offerSdp = createOfferDescriptionResponse?.sessionDescription?.sdp;\n const options: ChunkedStreamingOptions = {\n originStartTime: Date.now() - lag + (endPoint.roundTripTime) / 2,\n lag: lag\n };\n\n if (!this._channelContext.videoElement.value) {\n this._logger.error('Subscribe failed: video element is missing');\n this._channelContext.loading.value = false;\n this._channelContext.playing.value = false;\n this._channelContext.state.value = ChannelState.Stopped;\n\n return;\n }\n\n if (!offerSdp) {\n this._logger.error('Subscribe failed: offer SDP is missing');\n this._channelContext.loading.value = false;\n this._channelContext.playing.value = false;\n this._channelContext.state.value = ChannelState.Error;\n\n return;\n }\n\n return ChunkedStreaming.start(this._channelContext.videoElement.value, this._channelContext.streamId, offerSdp, options, () => this.retryOnStreamFailure())\n .then(player => {\n this.monitor(player);\n\n this._disposables.add(player);\n\n return player;\n })\n .catch(e => {\n this._logger.error('ChunkedStreaming failed', e);\n this._channelContext.loading.value = false;\n this._channelContext.playing.value = false;\n this._channelContext.state.value = ChannelState.Stopped;\n });\n });\n }\n\n private retryOnStreamFailure(): void {\n this._monitorFailureCount = 0;\n this._channelContext.state.value = ChannelState.ConnectionError;\n\n this._channelContext.playing.value = false;\n this._channelContext.loading.value = true;\n this._disposables.dispose();\n this._monitorDisposables.dispose();\n\n const ignored = this._handleStreamFailure()\n .catch(e => {\n this._logger.error('Failed handling stream failure', e);\n });\n }\n\n private monitor(player: IDisposable): void {\n this._monitorDisposables.dispose();\n\n const timeout = GlobalScope.value.setTimeout(() => {\n const newStreamStatistics = ChunkedStreaming.getStats();\n\n if (this._chunkedStreamPlaybackMode === ChunkedStreamPlaybackMode.Live\n && newStreamStatistics?.networkState === NetworkStates.NetworkNoSource\n && this._channelContext.videoElement.value?.currentTime === this._channelContext.videoElement.value?.duration\n ) {\n this.retryOnStreamFailure();\n\n return;\n }\n\n if (this._streamStatistics &&\n !this._channelContext.videoElement.value?.paused &&\n (newStreamStatistics?.currentTime && this._streamStatistics.currentTime >= newStreamStatistics.currentTime) &&\n (!newStreamStatistics?.dataBuffered || this._streamStatistics.dataBuffered >= newStreamStatistics.dataBuffered)\n ) {\n this._monitorFailureCount++;\n\n if (this._monitorFailureCount > 4) {\n this.retryOnStreamFailure();\n\n return;\n }\n } else {\n this._monitorFailureCount = 0;\n }\n\n if (this._channelContext.videoElement.value?.paused && this._channelContext.state.value === ChannelState.Playing) {\n this._channelContext.state.value = ChannelState.Paused;\n }\n\n if (!this._channelContext.videoElement.value?.paused && this._channelContext.state.value !== ChannelState.Playing) {\n this._channelContext.state.value = ChannelState.Playing;\n }\n\n this._streamStatistics = newStreamStatistics;\n\n this.monitor(player);\n }, 1000);\n\n this._monitorDisposables.add(new Disposable(() => {\n GlobalScope.value.clearTimeout(timeout);\n }));\n }\n\n isStreamHealthy(): Promise<boolean> {\n const videoElement = this._channelContext.videoElement.value;\n\n if (!videoElement) {\n return Promise.resolve(false);\n }\n\n if (videoElement.paused) {\n return Promise.resolve(false);\n }\n\n return VideoFrameDetector.isRenderingFrames(videoElement);\n }\n\n dispose(): void {\n this._disposables.dispose();\n this._monitorDisposables.dispose();\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nexport default class SdpParser {\n private readonly _sdp: string;\n private readonly _audioCodec: string;\n private readonly _videoCodec: string;\n private readonly _isAudioTrackEnabled: boolean;\n private readonly _isVideoTrackEnabled: boolean;\n\n constructor(sdp: string) {\n this._sdp = sdp;\n\n const sdpSplitByLines = this._sdp.split(/(\\r\\n|\\r|\\n)/);\n const sdpSplitByTracks = this._sdp.split(/(?:^|[\\r\\n])m=/);\n\n this._audioCodec = this.applyCodec('audio', sdpSplitByLines);\n this._videoCodec = this.applyCodec('video', sdpSplitByLines);\n this._isAudioTrackEnabled = this.isTrackByTypeEnabled('audio', sdpSplitByTracks);\n this._isVideoTrackEnabled = this.isTrackByTypeEnabled('video', sdpSplitByTracks);\n }\n\n get audioCodec(): string {\n return this._audioCodec;\n }\n\n get videoCodec(): string {\n return this._videoCodec;\n }\n\n get isAudioTrackEnabled(): boolean {\n return this._isAudioTrackEnabled;\n }\n\n get isVideoTrackEnabled(): boolean {\n return this._isVideoTrackEnabled;\n }\n\n private isTrackByTypeEnabled(type: string, sdpSplitByTracks: string[]): boolean {\n const sdpSectionForType = sdpSplitByTracks.find(sdpTrack => sdpTrack.startsWith(type));\n\n if (!sdpSectionForType) {\n return false;\n }\n\n return !sdpSectionForType.includes(`a=inactive`);\n }\n\n private applyCodec(type: string, sdpSplitByLines: string []): string {\n const rtmap = sdpSplitByLines.find(sdpLine => sdpLine.includes(`m=${type}`))?.split(' ')[3] || '';\n const usedCodecLine = sdpSplitByLines.find(sdpLine => sdpLine.includes(`a=rtpmap:${rtmap}`));\n const usedCodec = usedCodecLine?.split(' ')[1] || '';\n const codecName = usedCodec.split('/')[0];\n\n return codecName;\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nexport default class RtcConfigurationManager {\n static truncateIceServers(configuration: RTCConfiguration): RTCConfiguration {\n const iceServers: RTCIceServer[] = [];\n\n if (!configuration.iceServers) {\n return configuration;\n }\n\n for (let i = 0; i < configuration.iceServers.length; i++) {\n const urls: string[] = [];\n\n for (let index = 0; index < 2; index++) {\n const url = configuration.iceServers[i].urls[index];\n\n if (url) {\n urls.push(configuration.iceServers[i].urls[index]);\n }\n }\n\n iceServers.push({\n urls: urls,\n username: configuration.iceServers[i].username,\n credential: configuration.iceServers[i].credential\n });\n }\n\n configuration.iceServers = iceServers;\n\n return configuration;\n }\n\n private constructor() {\n throw new Error('RtcConfigurationManager is a static class that may not be instantiated');\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport GlobalScope from '../globalScope/GlobalScope';\nimport FeatureEnablement from '../environment/FeatureEnablement';\nimport DisposableList from '../lang/DisposableList';\nimport IDisposable from '../lang/IDisposable';\nimport Subject from '../rx/Subject';\nimport {ILogger} from '../logger/LoggerInterface';\nimport LoggerFactory from '../logger/LoggerFactory';\nimport IPeerConnection from './IPeerConnection';\nimport SdpParser from './SdpParser';\nimport ReadOnlySubject from '../rx/ReadOnlySubject';\n\nexport interface IRtcMonitorStatistic {\n [kind: string]: IRtcStatistic;\n}\n\nexport interface ILegacyRTCStatsReport {\n result: () => ILegacyRTCStatsReportItem[];\n}\n\nexport interface ILegacyRTCStatsReportItem extends RTCStatsReport {\n type: string;\n names: () => string[];\n stat: (name: string) => number;\n}\n\nexport interface IRtcStatistic {\n ssrc?: string;\n mediaType?: string;\n timestamp: number;\n bitrate?: number;\n bytesReceived?: number;\n framesDecoded?: number;\n packetsLost?: number;\n packetsReceived?: number;\n codec?: string;\n fps?: number;\n roundTripTime?: number;\n lastPacketReceivedTimestamp?: number;\n}\n\nconst updateStatisticTimeout = 1000;\nconst getStatsTimeoutDuration = 5000;\n\nexport default class RtcConnectionMonitor implements IDisposable {\n private readonly _logger: ILogger = LoggerFactory.getLogger('RtcConnectionMonitor');\n private readonly _estimatedRoundTripTime: number;\n private readonly _estimatedVideoCodec: string = 'unknown';\n private readonly _estimatedAudioCodec: string = 'unknown';\n private readonly _rtcStatistic: Subject<IRtcMonitorStatistic | null> = new Subject<IRtcMonitorStatistic | null>({});\n private readonly _disposables: DisposableList = new DisposableList();\n private _peerConnection: IPeerConnection | null;\n private _isMonitorRunning = true;\n private _updateTimeout: number | null = null;\n private _tracksToMonitor: string[];\n private _monitorGeneration = 0;\n\n constructor(peerConnection: IPeerConnection, mediaStream: MediaStream, estimatedRoundTripTime: number, isForeground: ReadOnlySubject<boolean>) {\n this._peerConnection = peerConnection;\n this._estimatedRoundTripTime = estimatedRoundTripTime;\n this._tracksToMonitor = mediaStream.getTracks().map(track => track.kind) || [];\n\n if (this._peerConnection) {\n if (!FeatureEnablement.getCurrentOfferDisabled && this._peerConnection?.currentRemoteDescription?.sdp) {\n const parsedSDP = new SdpParser(this._peerConnection.currentRemoteDescription.sdp);\n\n this._estimatedAudioCodec = parsedSDP.audioCodec;\n this._estimatedVideoCodec = parsedSDP.videoCodec;\n }\n\n let isInitialSubscriptionCallback = true;\n\n this._disposables.add(\n isForeground.subscribe(foreground => {\n if (isInitialSubscriptionCallback) {\n isInitialSubscriptionCallback = false;\n\n return;\n }\n\n if (!foreground || !this._isMonitorRunning) {\n return;\n }\n\n // Invalidate any in-flight poll from before the freeze\n this._monitorGeneration++;\n\n if (this._updateTimeout) {\n GlobalScope.value.clearTimeout(this._updateTimeout);\n this._updateTimeout = null;\n }\n\n this._logger.debug('Restarting stats polling after foreground transition');\n this.updateStatistic();\n })\n );\n\n this.updateStatistic();\n }\n }\n\n get rtcStatistic(): Subject<IRtcMonitorStatistic | null> {\n return this._rtcStatistic;\n }\n\n public dispose(): void {\n this._monitorGeneration++;\n this._isMonitorRunning = false;\n this._peerConnection = null;\n this._disposables.dispose();\n\n if (this._updateTimeout) {\n GlobalScope.value.clearTimeout(this._updateTimeout);\n this._updateTimeout = null;\n }\n }\n\n private async updateStatistic(): Promise<void> {\n if (FeatureEnablement.getStatsPromiseBasedDisabled) {\n return this.updateStatisticLegacy();\n }\n\n // Safari 11 doesnt have kind or mediaType so we need to take it from the inbound-rtp object id\n const getKindForSafari11 = (item: {id: string}): string => item.id.includes('Audio') ? 'audio' : item.id.includes('Video') ? 'video' : '';\n const generation = this._monitorGeneration;\n let timeoutHandle: number | undefined;\n\n try {\n const statsPromise = this._peerConnection?.getStats(null);\n\n if (!statsPromise) {\n return;\n }\n\n const timeoutPromise = new Promise<null>(resolve => {\n timeoutHandle = GlobalScope.value.setTimeout(() => resolve(null), getStatsTimeoutDuration);\n });\n const stats = await Promise.race([statsPromise, timeoutPromise]);\n\n if (generation !== this._monitorGeneration || !this._isMonitorRunning) {\n return;\n }\n\n if (!stats) {\n this._logger.debug('getStats() timed out, skipping stats processing');\n } else {\n const rtcStatistics: IRtcMonitorStatistic = {};\n let roundTripTime = this._estimatedRoundTripTime;\n let lastPacketReceivedTimestamp: number | undefined;\n\n stats.forEach(report => {\n if (report.type === 'candidate-pair' && report.currentRoundTripTime) {\n roundTripTime = report.currentRoundTripTime * 1000;\n\n if (rtcStatistics['audio']) {\n rtcStatistics['audio'].roundTripTime = roundTripTime;\n }\n\n if (rtcStatistics['video']) {\n rtcStatistics['video'].roundTripTime = roundTripTime;\n }\n }\n\n if (report.type === 'candidate-pair' && report.lastPacketReceivedTimestamp) {\n lastPacketReceivedTimestamp = report.lastPacketReceivedTimestamp;\n\n if (rtcStatistics['audio']) {\n rtcStatistics['audio'].lastPacketReceivedTimestamp = lastPacketReceivedTimestamp;\n }\n\n if (rtcStatistics['video']) {\n rtcStatistics['video'].lastPacketReceivedTimestamp = lastPacketReceivedTimestamp;\n }\n }\n\n if (report.type === 'inbound-rtp') {\n const kind = report.kind || report.mediaType || getKindForSafari11(report);\n let codec = '';\n\n stats.forEach(item => {\n if (item.id === report.codecId) {\n codec = item.mimeType;\n }\n });\n\n if (kind && this._tracksToMonitor.includes(kind)) {\n const bytes = report.bytesReceived || 0;\n const previousBytesReceived = this._rtcStatistic.value?.[kind]?.bytesReceived ?? 0;\n const bytesDelta = bytes - previousBytesReceived;\n const timeDelta = report.timestamp - (this._rtcStatistic.value?.[kind]?.timestamp || 0);\n const bitrate = bytesDelta && timeDelta ? Math.floor(8 * bytesDelta /\n timeDelta * 1000) : 0;\n\n rtcStatistics[kind] = {\n ssrc: report.ssrc,\n mediaType: kind,\n timestamp: report.timestamp,\n bitrate,\n bytesReceived: report.bytesReceived,\n packetsLost: report.packetsLost,\n packetsReceived: report.packetsReceived,\n codec: codec || this.getCodecByType(kind),\n roundTripTime\n };\n\n if (report.lastPacketReceivedTimestamp || lastPacketReceivedTimestamp) {\n rtcStatistics[kind].lastPacketReceivedTimestamp = report.lastPacketReceivedTimestamp || lastPacketReceivedTimestamp;\n }\n\n if (kind === 'video' && this._rtcStatistic.value?.video?.framesDecoded) {\n rtcStatistics[kind]['framesDecoded'] = report.framesDecoded;\n\n const fps = (report.framesDecoded - this._rtcStatistic.value.video.framesDecoded) /\n (rtcStatistics[kind].timestamp - this._rtcStatistic.value.video.timestamp) *\n 1000;\n\n rtcStatistics[kind]['fps'] = fps ? Math.round(fps * 100) / 100 : 0;\n }\n }\n }\n });\n\n this._rtcStatistic.value = rtcStatistics;\n }\n } catch (error) {\n if (generation !== this._monitorGeneration || !this._isMonitorRunning) {\n return;\n }\n\n this._logger.warn('getStats() rejected', error);\n } finally {\n GlobalScope.value.clearTimeout(timeoutHandle);\n }\n\n if (this._isMonitorRunning && generation === this._monitorGeneration) {\n this._updateTimeout = GlobalScope.value.setTimeout(\n () => this.updateStatistic(), updateStatisticTimeout);\n }\n }\n\n private async updateStatisticLegacy(): Promise<void> {\n const generation = this._monitorGeneration;\n let timeoutHandle: number | undefined;\n\n try {\n const statsPromise = this._peerConnection?.getStatsLegacy();\n\n if (!statsPromise) {\n return;\n }\n\n const timeoutPromise = new Promise<null>(resolve => {\n timeoutHandle = GlobalScope.value.setTimeout(() => resolve(null), getStatsTimeoutDuration);\n });\n const stats = await Promise.race([statsPromise, timeoutPromise]);\n\n if (generation !== this._monitorGeneration || !this._isMonitorRunning) {\n return;\n }\n\n if (!stats) {\n this._logger.debug('getStatsLegacy() timed out, skipping stats processing');\n } else {\n const rtcStatistics: IRtcMonitorStatistic = {};\n let roundTripTime = this._estimatedRoundTripTime;\n\n stats.result().forEach(report => {\n report.names().forEach(name => {\n if (name === 'googRTT') {\n roundTripTime = report.stat(name);\n }\n });\n\n if (report.type === 'ssrc') {\n const mediaType = report.stat('mediaType').toString();\n\n rtcStatistics[mediaType] = {timestamp: Date.now()};\n rtcStatistics[mediaType]['ssrc'] = report.stat('ssrc').toString();\n rtcStatistics[mediaType]['mediaType'] = mediaType;\n rtcStatistics[mediaType]['bytesReceived'] = report.stat('bytesReceived');\n rtcStatistics[mediaType]['packetsLost'] = report.stat('packetsLost');\n rtcStatistics[mediaType]['packetsReceived'] = report.stat('packetsReceived');\n rtcStatistics[mediaType]['codec'] = report.stat('googCodecName').toString() || this.getCodecByType(mediaType);\n rtcStatistics[mediaType]['roundTripTime'] = roundTripTime;\n\n if (mediaType === 'video' && this._rtcStatistic.value?.video?.framesDecoded) {\n rtcStatistics[mediaType]['framesDecoded'] = report.stat('framesDecoded');\n rtcStatistics[mediaType]['fps'] = (rtcStatistics[mediaType].framesDecoded - this._rtcStatistic.value.video.framesDecoded) /\n (rtcStatistics[mediaType].timestamp - this._rtcStatistic.value.video.timestamp) *\n 1000 || 0;\n }\n }\n });\n\n this._rtcStatistic.value = rtcStatistics;\n }\n } catch (error) {\n if (generation !== this._monitorGeneration || !this._isMonitorRunning) {\n return;\n }\n\n this._logger.warn('getStatsLegacy() rejected', error);\n } finally {\n GlobalScope.value.clearTimeout(timeoutHandle);\n }\n\n if (this._isMonitorRunning && generation === this._monitorGeneration) {\n this._updateTimeout = GlobalScope.value.setTimeout(\n () => this.updateStatistic(), updateStatisticTimeout);\n }\n }\n\n private getCodecByType(type: string): string {\n switch (type) {\n case 'audio':\n return this._estimatedAudioCodec || 'unknown';\n case 'video':\n return this._estimatedVideoCodec || 'unknown';\n default:\n return 'unknown';\n }\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nexport enum VideoCodec {\n H264 = 0,\n VP8 = 1,\n VP9 = 2\n}\n\nexport type VideoCodecType = 'H264' | 'VP8' | 'VP9';","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport Chunk from '../Chunk';\nimport {RtpTimestamp} from '../../frameTiming/FrameTimingInformation';\nimport {DecodedFrameTimingInformationPayload} from './transforms/frameTimingInformation';\n\nexport enum TransformMessageType {\n Error = -1,\n AddTransform = 0,\n ConfigurePipeline = 1,\n Metadata = 2,\n Chunk = 3,\n PipelineConfigured = 4\n}\n\nexport enum TransformMessageDataType {\n FrameTimingInformation = 0,\n EncodedVideoChunk = 1,\n EncodedAudioChunk = 2,\n SurrogateVideoChunk = 3,\n SurrogateAudioChunk = 4\n}\n\nexport type TransformMessagePayload<T> = {\n type: TransformMessageDataType;\n data: T;\n};\n\ntype WebRTCInsertableStreams = {\n source: ReadableStream;\n sink: WritableStream;\n};\n\nexport type TransformStreamMetadata = DecodedFrameTimingInformationPayload;\nexport type MetadataMessagePayload = {[timestamp: RtpTimestamp]: {decodedFrameTimingInformation: TransformStreamMetadata}};\n\ntype TransformName = string;\nexport type TransformMessage =\n | {\n type: TransformMessageType.AddTransform;\n data: TransformName;\n }\n | {\n type: TransformMessageType.ConfigurePipeline;\n data: WebRTCInsertableStreams;\n }\n | {\n type: TransformMessageType.Metadata;\n data: TransformMessagePayload<MetadataMessagePayload>;\n }\n | {\n type: TransformMessageType.Chunk;\n data: TransformMessagePayload<Chunk>;\n };","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport {ILogger} from '../../logger/LoggerInterface';\nimport LoggerFactory from '../../logger/LoggerFactory';\nimport Disposable from '../../lang/Disposable';\nimport DisposableList from '../../lang/DisposableList';\nimport IDisposable from '../../lang/IDisposable';\nimport Subject from '../../rx/Subject';\nimport {DecodedFrameTimingInformation, RenderedFrameTimingInformation, RtpTimestamp} from './FrameTimingInformation';\nimport {VideoCodec} from '../decode/bitstream/codec/VideoCodec';\nimport {MetadataMessagePayload, TransformMessageDataType, TransformMessagePayload} from '../transformation/worker/TransformStreamPipelineWorkerMessage';\nimport TransformMessageRouter from '../transformation/worker/MessageRouter';\n\nexport type FrameTimingInformationManagerContext = {\n codec: VideoCodec;\n streamId: string;\n videoElement: Subject<HTMLVideoElement | null>;\n decodedFrameTimingInformationSubject: Subject<DecodedFrameTimingInformation | null>;\n renderedFrameTimingInformationSubject: Subject<RenderedFrameTimingInformation | null>;\n isEnabledSubject: Subject<boolean>;\n receiver: RTCRtpReceiver;\n mid: string;\n trackId: string;\n transformFunctionNames: string[];\n transformMessageRouter: TransformMessageRouter;\n};\n\nexport default class FrameTimingInformationManager implements IDisposable {\n private static readonly _transformName = 'frame-timing-information';\n private readonly _logger: ILogger = LoggerFactory.getLogger('FrameTimingInformationManager');\n private readonly _decodedFrameTimingInformationByRtpTimestamp: Map<RtpTimestamp, DecodedFrameTimingInformation> = new Map();\n private readonly _videoElementDisposables: DisposableList = new DisposableList();\n private readonly _disposables: DisposableList = new DisposableList();\n private _currentPlaybackState: 'playing' | 'paused' | 'stalled' | 'ended' | 'error' | 'waiting' = 'waiting';\n private _armedVideoFrameCallbackId: number | null = null;\n private _disposed: boolean = false;\n\n constructor(context: FrameTimingInformationManagerContext) {\n this.initialize(context);\n }\n\n public dispose(): void {\n this._disposed = true;\n this._disposables.dispose();\n }\n\n private initialize(context: FrameTimingInformationManagerContext): void {\n if (!this.canProcessFrameTimingInformation(context.streamId, context.codec, context.receiver, context.mid)) {\n return;\n }\n\n this.setupVideoElementHandling(context.videoElement, context.renderedFrameTimingInformationSubject);\n this.setupFrameTimingInformationTransform(context.codec, context.mid, context.trackId, context.transformMessageRouter, context.transformFunctionNames, context.decodedFrameTimingInformationSubject);\n context.isEnabledSubject.value = true;\n }\n\n private canProcessFrameTimingInformation(streamId: string, codec: VideoCodec, receiver: RTCRtpReceiver, mid: string): boolean {\n if (codec !== VideoCodec.H264) {\n this._logger.warn('[%s] Skipping frame timing information for video track because video codec is not H264', streamId);\n\n return false;\n }\n\n if (!receiver) {\n this._logger.warn('[%s] Skipping frame timing information for video track because no receiver was found', streamId);\n\n return false;\n }\n\n if (!mid) {\n this._logger.warn('[%s] Skipping frame timing information for video track because no mid was found', streamId);\n\n return false;\n }\n\n return true;\n }\n\n private setupFrameTimingInformationTransform(codec: VideoCodec, mid: string, trackId: string, transformMessageRouter: TransformMessageRouter, transformFunctionNames: string[], decodedFrameTimingInformationSubject: Subject<DecodedFrameTimingInformation | null>): void {\n transformMessageRouter.registerRoute<TransformMessagePayload<MetadataMessagePayload>>(TransformMessageDataType.FrameTimingInformation, this.handleFrameTimingMessage.bind(this, VideoCodec[codec], mid!, trackId!, decodedFrameTimingInformationSubject));\n transformFunctionNames.push(FrameTimingInformationManager._transformName);\n }\n\n private handleFrameTimingMessage(codec: string, mid: string, trackId: string, decodedFrameTimingInformationSubject: Subject<DecodedFrameTimingInformation | null>, message: MetadataMessagePayload): void {\n if (!message) {\n return;\n }\n\n for (const [rtpTimestamp, metadata] of Object.entries(message)) {\n const rtpTimestampNumber = parseInt(rtpTimestamp, 10);\n const decodedFrameTimingInformation = metadata['decodedFrameTimingInformation'];\n\n if (decodedFrameTimingInformation) {\n const frameTimingInformation: DecodedFrameTimingInformation = {\n timecode: decodedFrameTimingInformation.timecode ?? null,\n receiveTimestamp: decodedFrameTimingInformation.receiveTimestamp ?? null,\n kind: 'video',\n codec,\n mid,\n trackId,\n sourceTimestamp: null,\n ingestTimestamp: null,\n encodeTimestamp: null,\n transcodeTimestamp: null,\n playbackState: this._currentPlaybackState\n };\n\n decodedFrameTimingInformationSubject.value = frameTimingInformation;\n\n if (this._currentPlaybackState === 'playing') {\n this._decodedFrameTimingInformationByRtpTimestamp.set(rtpTimestampNumber, frameTimingInformation);\n }\n }\n }\n }\n\n private setupVideoElementHandling(videoElementSubject: Subject<HTMLVideoElement | null>, renderedFrameTimingInformationSubject: Subject<RenderedFrameTimingInformation | null>): void {\n this._disposables.add(new Disposable(() => this._decodedFrameTimingInformationByRtpTimestamp.clear()));\n this._disposables.add(this._videoElementDisposables);\n this._disposables.add(videoElementSubject.subscribe(videoElement => {\n this._videoElementDisposables.dispose();\n\n if (!videoElement) {\n return;\n }\n\n this.setupVideoEventListeners(videoElement, renderedFrameTimingInformationSubject);\n }));\n }\n\n private handleVideoFrameCallback(videoElement: HTMLVideoElement, renderedFrameTimingInformationSubject: Subject<RenderedFrameTimingInformation | null>, now: DOMHighResTimeStamp, metadata: VideoFrameCallbackMetadata): void {\n if (this._disposed) {\n return;\n }\n\n // Re-register the callback to ensure it's called again\n this._armVideoFrameCallback(videoElement, renderedFrameTimingInformationSubject);\n\n const rtpTimestamp = metadata.rtpTimestamp;\n\n if (!rtpTimestamp) {\n // TODO (NH): Add a throttled log indicating that no RTP timestamp was found\n // The specification says that it's nullable, but we always have it in a WebRTC context\n return;\n }\n\n const timestampsToDelete: RtpTimestamp[] = [];\n\n for (const [timestamp, frameTiming] of this._decodedFrameTimingInformationByRtpTimestamp) {\n if (timestamp > rtpTimestamp) {\n break;\n }\n\n renderedFrameTimingInformationSubject.value = {\n ...frameTiming,\n renderTimestamp: new Date(performance.timeOrigin + now),\n playbackState: 'playing'\n };\n\n timestampsToDelete.push(timestamp);\n }\n\n for (const timestamp of timestampsToDelete) {\n this._decodedFrameTimingInformationByRtpTimestamp.delete(timestamp);\n }\n }\n\n private setupVideoEventListeners(videoElement: HTMLVideoElement, renderedFrameTimingInformationSubject: Subject<RenderedFrameTimingInformation | null>): void {\n const onPlaying = () => this._currentPlaybackState = 'playing';\n\n videoElement.addEventListener('playing', onPlaying);\n this._videoElementDisposables.add(new Disposable(() => videoElement.removeEventListener('playing', onPlaying)));\n\n const onPause = () => this._currentPlaybackState = 'paused';\n\n videoElement.addEventListener('pause', onPause);\n this._videoElementDisposables.add(new Disposable(() => videoElement.removeEventListener('pause', onPause)));\n\n const onStalled = () => this._currentPlaybackState = 'stalled';\n\n videoElement.addEventListener('stalled', onStalled);\n this._videoElementDisposables.add(new Disposable(() => videoElement.removeEventListener('stalled', onStalled)));\n\n const onWaiting = () => this._currentPlaybackState = 'waiting';\n\n videoElement.addEventListener('waiting', onWaiting);\n this._videoElementDisposables.add(new Disposable(() => videoElement.removeEventListener('waiting', onWaiting)));\n\n const onEnded = () => this._currentPlaybackState = 'ended';\n\n videoElement.addEventListener('ended', onEnded);\n this._videoElementDisposables.add(new Disposable(() => videoElement.removeEventListener('ended', onEnded)));\n\n const onError = () => this._currentPlaybackState = 'error';\n\n videoElement.addEventListener('error', onError);\n this._videoElementDisposables.add(new Disposable(() => videoElement.removeEventListener('error', onError)));\n\n this._armVideoFrameCallback(videoElement, renderedFrameTimingInformationSubject);\n this._videoElementDisposables.add(new Disposable(() => {\n if (this._armedVideoFrameCallbackId) {\n videoElement.cancelVideoFrameCallback(this._armedVideoFrameCallbackId);\n }\n })\n );\n }\n\n private _armVideoFrameCallback(videoElement: HTMLVideoElement, renderedFrameTimingInformationSubject: Subject<RenderedFrameTimingInformation | null>): void {\n if (!videoElement.requestVideoFrameCallback) {\n return;\n }\n\n this._armedVideoFrameCallbackId = videoElement.requestVideoFrameCallback(this.handleVideoFrameCallback.bind(this, videoElement, renderedFrameTimingInformationSubject));\n }\n}","\nimport worker from \"!!../../../../node_modules/worker-loader/dist/runtime/inline.js\";\n\nexport default function Worker_fn() {\n return worker(\"/*! For license information please see TransformStreamPipeline.worker.worker.js.LICENSE.txt */\\n(()=>{var e={981:(e,t,r)=>{\\\"use strict\\\";r.d(t,{A:()=>p});var n=r(738),o=r.n(n),a=r(383),i=r.n(a),u=r(579),s=r.n(u),c=r(693),f=r.n(c),l=s()(function e(t,r,n){i()(this,e),f()(this,\\\"onFulfilled\\\",void 0),f()(this,\\\"onRejected\\\",void 0),f()(this,\\\"promise\\\",void 0),this.onFulfilled=\\\"function\\\"==typeof t?t:null,this.onRejected=\\\"function\\\"==typeof r?r:null,this.promise=n}),d=function(){function e(t){if(i()(this,e),f()(this,\\\"_state\\\",void 0),f()(this,\\\"_handled\\\",void 0),f()(this,\\\"_value\\\",void 0),f()(this,\\\"_deferreds\\\",void 0),!(this instanceof e))throw new TypeError(\\\"Promises must be constructed via new\\\");if(\\\"function\\\"!=typeof t)throw new TypeError(\\\"not a function\\\");this._state=0,this._handled=!1,this._value=null,this._deferreds=[],this.doResolve(t)}return s()(e,[{key:\\\"doResolve\\\",value:function(e){var t=this,r=!1;try{e(function(e){r||(r=!0,t.promiseResolve(e))},function(e){r||(r=!0,t.promiseReject(e))})}catch(e){if(r)return;r=!0,this.promiseReject(e)}}},{key:\\\"promiseResolve\\\",value:function(t){var r=this;try{if(t===r)throw new TypeError(\\\"A Promise cannot be resolved with it self.\\\");if(t&&(\\\"object\\\"===o()(t)||\\\"function\\\"==typeof t)){var n=t.then;if(t instanceof e)return r._state=3,r._value=t,void r.finale();if(\\\"function\\\"==typeof n)return void r.doResolve(function(){n.apply(t,arguments)})}r._state=1,r._value=t,r.finale()}catch(e){r.promiseReject(e)}}},{key:\\\"promiseReject\\\",value:function(e){this._state=2,this._value=e,this.finale()}},{key:\\\"finale\\\",value:function(){var t=this;2===this._state&&0===this._deferreds.length&&e._immediate(function(){t._handled||e._unhandledRejection(t._value)});for(var r=0,n=this._deferreds.length;r<n;r++)this.handle(this._deferreds[r]);this._deferreds=[]}},{key:\\\"handle\\\",value:function(t){for(var r=this;3===r._state;)r=r._value;0!==r._state?(r._handled=!0,e._immediate(function(){var e=1===r._state?t.onFulfilled:t.onRejected;if(null!==e){var n;try{n=e(r._value)}catch(e){return void t.promise.promiseReject(e)}t.promise.promiseResolve(n)}else 1===r._state?t.promise.promiseResolve(r._value):t.promise.promiseReject(r._value)})):r._deferreds.push(t)}}],[{key:\\\"all\\\",value:function(t){return new e(function(e,r){if(!Array.isArray(t))return r(new TypeError(\\\"Promise.all accepts an array\\\"));var n=Array.prototype.slice.call(t);if(0===n.length)return e([]);for(var a=n.length,i=function(t,u){try{if(u&&(\\\"object\\\"===o()(u)||\\\"function\\\"==typeof u)){var s=u.then;if(\\\"function\\\"==typeof s)return void s.call(u,function(e){return i(t,e)},r)}n[t]=u,0===--a&&e(n)}catch(e){r(e)}},u=0;u<n.length;u++)i(u,n[u])})}},{key:\\\"resolve\\\",value:function(t){return t&&\\\"object\\\"===o()(t)&&t.constructor===e?t:new e(function(e){return e(t)})}},{key:\\\"reject\\\",value:function(t){return new e(function(e,r){return r(t)})}},{key:\\\"race\\\",value:function(t){return new e(function(r,n){if(!Array.isArray(t))return n(new TypeError(\\\"Promise.race accepts an array\\\"));for(var o=0,a=t.length;o<a;o++)e.resolve(t[o]).then(r,n)})}},{key:\\\"_immediate\\\",value:function(e){window.setTimeout(e,0)}},{key:\\\"_unhandledRejection\\\",value:function(e){\\\"undefined\\\"!=typeof console&&console&&console.warn(\\\"Possible Unhandled Promise Rejection:\\\",e)}}])}();d.prototype.catch=function(e){return this.then(null,e)},d.prototype.then=function(e,t){var r=new d(function(){return null});return this.handle(new l(e,t,r)),r},d.prototype.finally=function(e){return this.then(function(t){return d.resolve(e()).then(function(){return t},function(){return null})},function(t){return d.resolve(e()).then(function(){return d.reject(t)},function(){return null})})};var p=d},293:(e,t,r)=>{var n=r(981).A;function o(e,t,r,o,a,i,u){try{var s=e[i](u),c=s.value}catch(e){return void r(e)}s.done?t(c):n.resolve(c).then(o,a)}e.exports=function(e){return function(){var t=this,r=arguments;return new n(function(n,a){var i=e.apply(t,r);function u(e){o(i,n,a,u,s,\\\"next\\\",e)}function s(e){o(i,n,a,u,s,\\\"throw\\\",e)}u(void 0)})}},e.exports.__esModule=!0,e.exports.default=e.exports},383:e=>{e.exports=function(e,t){if(!(e instanceof t))throw new TypeError(\\\"Cannot call a class as a function\\\")},e.exports.__esModule=!0,e.exports.default=e.exports},579:(e,t,r)=>{var n=r(736);function o(e,t){for(var r=0;r<t.length;r++){var o=t[r];o.enumerable=o.enumerable||!1,o.configurable=!0,\\\"value\\\"in o&&(o.writable=!0),Object.defineProperty(e,n(o.key),o)}}e.exports=function(e,t,r){return t&&o(e.prototype,t),r&&o(e,r),Object.defineProperty(e,\\\"prototype\\\",{writable:!1}),e},e.exports.__esModule=!0,e.exports.default=e.exports},693:(e,t,r)=>{var n=r(736);e.exports=function(e,t,r){return(t=n(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e},e.exports.__esModule=!0,e.exports.default=e.exports},45:(e,t,r)=>{var n=r(738).default;e.exports=function(e,t){if(\\\"object\\\"!=n(e)||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var o=r.call(e,t||\\\"default\\\");if(\\\"object\\\"!=n(o))return o;throw new TypeError(\\\"@@toPrimitive must return a primitive value.\\\")}return(\\\"string\\\"===t?String:Number)(e)},e.exports.__esModule=!0,e.exports.default=e.exports},736:(e,t,r)=>{var n=r(738).default,o=r(45);e.exports=function(e){var t=o(e,\\\"string\\\");return\\\"symbol\\\"==n(t)?t:t+\\\"\\\"},e.exports.__esModule=!0,e.exports.default=e.exports},738:e=>{function t(r){return e.exports=t=\\\"function\\\"==typeof Symbol&&\\\"symbol\\\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\\\"function\\\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\\\"symbol\\\":typeof e},e.exports.__esModule=!0,e.exports.default=e.exports,t(r)}e.exports=t,e.exports.__esModule=!0,e.exports.default=e.exports}},t={};function r(n){var o=t[n];if(void 0!==o)return o.exports;var a=t[n]={exports:{}};return e[n](a,a.exports,r),a.exports}r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{\\\"use strict\\\";var e=r(293),t=r.n(e),n=r(383),o=r.n(n),a=r(579),i=r.n(a),u=r(693),s=r.n(u),c=function(e){return e[e.Error=-1]=\\\"Error\\\",e[e.AddTransform=0]=\\\"AddTransform\\\",e[e.ConfigurePipeline=1]=\\\"ConfigurePipeline\\\",e[e.Metadata=2]=\\\"Metadata\\\",e[e.Chunk=3]=\\\"Chunk\\\",e[e.PipelineConfigured=4]=\\\"PipelineConfigured\\\",e}({}),f=function(e){return e[e.FrameTimingInformation=0]=\\\"FrameTimingInformation\\\",e[e.EncodedVideoChunk=1]=\\\"EncodedVideoChunk\\\",e[e.EncodedAudioChunk=2]=\\\"EncodedAudioChunk\\\",e[e.SurrogateVideoChunk=3]=\\\"SurrogateVideoChunk\\\",e[e.SurrogateAudioChunk=4]=\\\"SurrogateAudioChunk\\\",e}({});function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function d(e,t){for(var r=e.length,n=t;n<r-3;n++)if(0===e[n]&&0===e[n+1]){if(1===e[n+2])return n;if(n+3<r&&0===e[n+2]&&1===e[n+3])return n}return-1}function p(e,t){for(var r=t,n=0;255===e[r];)n++,r++;var o=255*n+e[r++];for(n=0;255===e[r];)n++,r++;var a=255*n+e[r++];return{type:o,payload:e.subarray(r,r+a),length:r+a-t}}function m(e){if(e.getRemainingBits()<10)return null;var t={ctType:e.readBits(2),nuitFieldBasedFlag:1===e.readBits(1),countingType:e.readBits(5),fullTimestampFlag:1===e.readBits(1),discontinuityFlag:1===e.readBits(1),cntDroppedFlag:1===e.readBits(1),nFrames:e.readBits(8)};if(t.fullTimestampFlag){if(e.getRemainingBits()<17)return null;t.seconds=e.readBits(6),t.minutes=e.readBits(6),t.hours=e.readBits(5)}else if(!function(e,t){return e.getRemainingBits()<1||0===e.readBits(1)||!(e.getRemainingBits()<6)&&(t.seconds=e.readBits(6),e.getRemainingBits()<1||0===e.readBits(1)||!(e.getRemainingBits()<6)&&(t.minutes=e.readBits(6),e.getRemainingBits()<1||0===e.readBits(1)||!(e.getRemainingBits()<5)&&(t.hours=e.readBits(5),!0)))}(e,t))return null;return e.getRemainingBits()<24?null:(t.timeOffset=e.readBits(24),t)}function h(e,t){var r,n,o=(r=function(e){var t,r=[],n=0,o=function(e,t){var r=\\\"undefined\\\"!=typeof Symbol&&e[Symbol.iterator]||e[\\\"@@iterator\\\"];if(!r){if(Array.isArray(e)||(r=function(e,t){if(e){if(\\\"string\\\"==typeof e)return l(e,t);var r={}.toString.call(e).slice(8,-1);return\\\"Object\\\"===r&&e.constructor&&(r=e.constructor.name),\\\"Map\\\"===r||\\\"Set\\\"===r?Array.from(e):\\\"Arguments\\\"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?l(e,t):void 0}}(e))||t&&e&&\\\"number\\\"==typeof e.length){r&&(e=r);var n=0,o=function(){};return{s:o,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:o}}throw new TypeError(\\\"Invalid attempt to iterate non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\\\")}var a,i=!0,u=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return i=e.done,e},e:function(e){u=!0,a=e},f:function(){try{i||null==r.return||r.return()}finally{if(u)throw a}}}}(e);try{for(o.s();!(t=o.n()).done;){var a=t.value;2===n&&3===a?n=0:(0===a?n++:n=0,r.push(a))}}catch(e){o.e(e)}finally{o.f()}return new Uint8Array(r)}(e),n=0,{readBits:function(e){if(n+e>8*r.length)throw new Error(\\\"Cannot read [\\\".concat(e,\\\"] bits - out of bounds\\\"));for(var t=0,o=e;o>0;){var a=Math.floor(n/8),i=8-n%8,u=Math.min(o,i),s=(1<<u)-1;t=t<<u|r[a]>>i-u&s,n+=u,o-=u}return t},skipBits:function(e){if(n+e>8*r.length)throw new Error(\\\"Cannot skip [\\\".concat(e,\\\"] bits - out of bounds\\\"));n+=e},getRemainingBits:function(){return 8*r.length-n}}),a={picStruct:void 0};if(t.cpbDpbDelaysPresentFlag&&void 0!==t.cpbRemovalDelayLengthMinus1&&void 0!==t.dpbOutputDelayLengthMinus1&&(o.skipBits(t.cpbRemovalDelayLengthMinus1+1),o.skipBits(t.dpbOutputDelayLengthMinus1+1)),t.picStructPresentFlag){for(var i=function(e){switch(e){case 0:case 1:case 2:return 1;case 3:case 4:case 7:return 2;case 5:case 6:case 8:return 3;default:return 0}}(o.readBits(4)),u=[],s=0;s<i&&!(o.getRemainingBits()<1);s++)if(1===o.readBits(1)){var c=m(o);if(!c)break;u.push({clockTimestampFlag:!0,clockTimestamp:c})}else u.push({clockTimestampFlag:!1});a.picStruct={numClockTS:i,clockTimestamps:u}}return a}var v,y=function(){return i()(function e(){o()(this,e)},null,[{key:\\\"createFrameTimingInformationTransform\\\",value:function(){return new TransformStream({transform:function(e,t){(function(e){for(var t=new Date,r=new Uint8Array(e.data),n=d(r,0);-1!==n;){var o=d(r,n+1),a=-1===o?r.length:o,i=n+(1===r[n+2]?3:4);if(6==(31&r[i]))for(var u=i+1,l=r.subarray(u,a),m=0;m<l.length&&!(m+2>l.length);){var v=p(l,m);if(1===v.type){var y,g=null===(y=h(v.payload,{cpbDpbDelaysPresentFlag:!1,picStructPresentFlag:!0}).picStruct)||void 0===y?void 0:y.clockTimestamps[0];if(null!=g&&g.clockTimestampFlag){var b,k,w,_,T=e.timestamp,x={timecode:g.clockTimestamp?{hours:null!==(b=g.clockTimestamp.hours)&&void 0!==b?b:null,minutes:null!==(k=g.clockTimestamp.minutes)&&void 0!==k?k:null,seconds:null!==(w=g.clockTimestamp.seconds)&&void 0!==w?w:null,frames:null!==(_=g.clockTimestamp.nFrames)&&void 0!==_?_:null,isFrameDrop:g.clockTimestamp.cntDroppedFlag}:null,receiveTimestamp:t};self.postMessage({type:c.Metadata,data:{type:f.FrameTimingInformation,data:s()({},T,{decodedFrameTimingInformation:x})}})}}if(m+=v.length,0===v.length)break}n=o}})(e),t.enqueue(e)}})}},{key:\\\"createEncodedVideoStreamTransform\\\",value:function(e){var t=new Map,r=function(e,t,r){var n=r.data;if(n.type===c.Chunk&&n.data.type===f.SurrogateVideoChunk){var o=n.data.data,a=o.surrogate,i=o.timestamp,u=e.get(i);u?(u.data=a,t.enqueue(u),e.delete(i)):console.warn(\\\"[WorkerTransforms] Surrogate video chunk not found for timestamp\\\",i)}};return new TransformStream({start:function(n){e.addEventListener(\\\"message\\\",r.bind(null,t,n),{once:!1})},transform:function(e){t.set(e.timestamp,e),self.postMessage({type:c.Metadata,data:{type:f.EncodedVideoChunk,data:{timestamp:e.timestamp,data:new Uint8Array(e.data),type:e.type}}},{transfer:[e.data]})}})}},{key:\\\"createEncodedAudioStreamTransform\\\",value:function(e){var t=new Map,r=function(e,t,r){var n=r.data;if(n.type===c.Chunk&&n.data.type===f.SurrogateAudioChunk){var o=n.data.data,a=o.surrogate,i=o.timestamp,u=e.get(i);u?(u.data=a,t.enqueue(u),e.delete(i)):console.warn(\\\"[WorkerTransforms] Surrogate audio chunk not found for timestamp\\\",i)}};return new TransformStream({start:function(n){e.addEventListener(\\\"message\\\",r.bind(null,t,n),{once:!1})},transform:function(e){t.set(e.timestamp,e),self.postMessage({type:c.Metadata,data:{type:f.EncodedAudioChunk,data:{timestamp:e.timestamp,data:new Uint8Array(e.data),type:e.type}}},{transfer:[e.data]})}})}},{key:\\\"createPassThroughTransform\\\",value:function(){return new TransformStream({transform:function(e,t){return t.enqueue(e)}})}}])}();function g(){var e,t,r=\\\"function\\\"==typeof Symbol?Symbol:{},n=r.iterator||\\\"@@iterator\\\",o=r.toStringTag||\\\"@@toStringTag\\\";function a(r,n,o,a){var s=n&&n.prototype instanceof u?n:u,c=Object.create(s.prototype);return b(c,\\\"_invoke\\\",function(r,n,o){var a,u,s,c=0,f=o||[],l=!1,d={p:0,n:0,v:e,a:p,f:p.bind(e,4),d:function(t,r){return a=t,u=0,s=e,d.n=r,i}};function p(r,n){for(u=r,s=n,t=0;!l&&c&&!o&&t<f.length;t++){var o,a=f[t],p=d.p,m=a[2];r>3?(o=m===n)&&(s=a[(u=a[4])?5:(u=3,3)],a[4]=a[5]=e):a[0]<=p&&((o=r<2&&p<a[1])?(u=0,d.v=n,d.n=a[1]):p<m&&(o=r<3||a[0]>n||n>m)&&(a[4]=r,a[5]=n,d.n=m,u=0))}if(o||r>1)return i;throw l=!0,n}return function(o,f,m){if(c>1)throw TypeError(\\\"Generator is already running\\\");for(l&&1===f&&p(f,m),u=f,s=m;(t=u<2?e:s)||!l;){a||(u?u<3?(u>1&&(d.n=-1),p(u,s)):d.n=s:d.v=s);try{if(c=2,a){if(u||(o=\\\"next\\\"),t=a[o]){if(!(t=t.call(a,s)))throw TypeError(\\\"iterator result is not an object\\\");if(!t.done)return t;s=t.value,u<2&&(u=0)}else 1===u&&(t=a.return)&&t.call(a),u<2&&(s=TypeError(\\\"The iterator does not provide a '\\\"+o+\\\"' method\\\"),u=1);a=e}else if((t=(l=d.n<0)?s:r.call(n,d))!==i)break}catch(t){a=e,u=1,s=t}finally{c=1}}return{value:t,done:l}}}(r,o,a),!0),c}var i={};function u(){}function s(){}function c(){}t=Object.getPrototypeOf;var f=[][n]?t(t([][n]())):(b(t={},n,function(){return this}),t),l=c.prototype=u.prototype=Object.create(f);function d(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,c):(e.__proto__=c,b(e,o,\\\"GeneratorFunction\\\")),e.prototype=Object.create(l),e}return s.prototype=c,b(l,\\\"constructor\\\",c),b(c,\\\"constructor\\\",s),s.displayName=\\\"GeneratorFunction\\\",b(c,o,\\\"GeneratorFunction\\\"),b(l),b(l,o,\\\"Generator\\\"),b(l,n,function(){return this}),b(l,\\\"toString\\\",function(){return\\\"[object Generator]\\\"}),(g=function(){return{w:a,m:d}})()}function b(e,t,r,n){var o=Object.defineProperty;try{o({},\\\"\\\",{})}catch(e){o=0}b=function(e,t,r,n){function a(t,r){b(e,t,function(e){return this._invoke(t,r,e)})}t?o?o(e,t,{value:r,enumerable:!n,configurable:!n,writable:!n}):e[t]=r:(a(\\\"next\\\",0),a(\\\"throw\\\",1),a(\\\"return\\\",2))},b(e,t,r,n)}var k=self,w=function(){function e(){o()(this,e)}return i()(e,null,[{key:\\\"handleAddTransform\\\",value:function(t){if(e._isPipelineConfigured)throw new Error(\\\"Error: Pipeline is locked. A transform cannot be added once the pipeline has been configured\\\");switch(t){case\\\"frame-timing-information\\\":e._transforms.push(y.createFrameTimingInformationTransform());break;case\\\"protected-video\\\":e._transforms.push(y.createEncodedVideoStreamTransform(k));break;case\\\"protected-audio\\\":e._transforms.push(y.createEncodedAudioStreamTransform(k));break;case\\\"pass-through\\\":e._transforms.push(y.createPassThroughTransform());break;default:throw new Error(\\\"Error: Unknown transform type [\\\".concat(t,\\\"]\\\"))}}},{key:\\\"configurePipeline\\\",value:(r=t()(g().m(function t(r,n){return g().w(function(t){for(;;)switch(t.n){case 0:if(r&&n){t.n=1;break}throw new Error(\\\"Error: Configuration of TransformStreamPipeline requires both a readbale source and writable sink\\\");case 1:return 0===e._transforms.length&&e._transforms.push(),t.n=2,e._transforms.reduceRight(function(e,t){return e.pipeThrough(t)},r).pipeTo(n);case 2:e._isPipelineConfigured=!0,k.postMessage({type:c.PipelineConfigured,data:{name:e._workerName}});case 3:return t.a(2)}},t)})),function(e,t){return r.apply(this,arguments)})},{key:\\\"handleMessage\\\",value:function(t){var r=t.data,n=r.type;switch(n){case c.AddTransform:e.handleAddTransform(r.data);break;case c.ConfigurePipeline:e.configurePipeline(r.data.source,r.data.sink);break;case c.Metadata:case c.Chunk:break;default:!function(e){throw new Error(\\\"Unexpected value [\\\".concat(e,\\\"]. This should never be reached\\\"))}(n)}}}]);var r}();v=w,s()(w,\\\"_transforms\\\",[]),s()(w,\\\"_isPipelineConfigured\\\",!1),s()(w,\\\"_workerName\\\",void 0),k.onerror=function(e){return console.error(\\\"[TransformStreamPipelineWorker] Error: [%s]\\\",e)},k.onmessage=v.handleMessage.bind(v),k.RTCTransformEvent&&(k.onrtctransform=function(e){var t=e.transformer;v._workerName=t.options.name;var r=t.readable,n=t.writable;v.configurePipeline(r,n)})})()})();\\n\", \"Worker\", undefined, undefined);\n}\n","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport IDisposable from '../../../lang/IDisposable';\nimport Disposable from '../../../lang/Disposable';\nimport {TransformMessageDataType, TransformMessage, TransformMessagePayload, TransformMessageType} from './TransformStreamPipelineWorkerMessage';\n\nexport default class TransformPipelineMessageRouter implements IDisposable {\n private readonly _messageRoutes: Map<TransformMessageDataType, <T>(message: T) => void> = new Map();\n\n constructor(worker: Worker) {\n this.initialize(worker);\n }\n\n public registerRoute<T>(messageType: TransformMessageDataType, routeMessage: (message: T) => void): Disposable {\n this._messageRoutes.set(messageType, routeMessage as <T>(message: T) => void);\n\n return new Disposable(() => this._messageRoutes.delete(messageType));\n }\n\n public dispose(): void {\n this._messageRoutes.clear();\n }\n\n private initialize(worker: Worker): void {\n worker.addEventListener('message', ({data: message}: MessageEvent<TransformMessage>) => {\n const routeMessageData = <T>({type, data}: TransformMessagePayload<T>) => {\n const routeMessage = this._messageRoutes.get(type);\n\n if (!routeMessage) {\n return;\n }\n\n routeMessage(data);\n };\n\n switch (message.type) {\n case TransformMessageType.Chunk:\n case TransformMessageType.Metadata:\n routeMessageData(message.data);\n\n break;\n\n default:\n }\n }, {once: false});\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport Disposable from '../../lang/Disposable';\nimport DisposableList from '../../lang/DisposableList';\nimport assertUnreachable from '../../lang/assertUnreachable';\nimport FeatureEnablement from '../../environment/FeatureEnablement';\nimport {IStreamTrackTransform} from '../transformation/StreamTrackTransform';\nimport StreamTransformContext, {StreamTransformContextTrack} from '../context/StreamTransformContext';\nimport TransformStreamPipelineWorker from './worker/TransformStreamPipeline.worker';\nimport {TransformMessageType} from './worker/TransformStreamPipelineWorkerMessage';\nimport TransformMessageRouter from './worker/MessageRouter';\n\ntype MediaStreamTrackKind = 'video' | 'audio';\n\nexport default class InsertableStreams {\n static createEncodedStreamPipeline(streamTransformContext: StreamTransformContext): DisposableList {\n const disposables: DisposableList = new DisposableList();\n const {videoTrack, audioTrack} = streamTransformContext;\n const createTransformPipelineWorkerForTrack = (context: StreamTransformContextTrack) => {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore - Using Webpack's worker loader to inline worker\n const worker = context.transformPipelineWorker = new TransformStreamPipelineWorker();\n\n disposables.add(new Disposable(() => worker.terminate()));\n disposables.add(context.transformMessageRouter = new TransformMessageRouter(worker));\n };\n\n const {receiver: videoTrackReceiver, mediaStreamTrack: videoTrackMediaStreamTrack} = videoTrack;\n\n if (videoTrackReceiver && videoTrackMediaStreamTrack) {\n createTransformPipelineWorkerForTrack(videoTrack);\n }\n\n const {receiver: audioTrackReceiver, mediaStreamTrack: audioTrackMediaStreamTrack} = audioTrack;\n\n if (audioTrackReceiver && audioTrackMediaStreamTrack) {\n createTransformPipelineWorkerForTrack(audioTrack);\n }\n\n return disposables;\n }\n\n static async configureEncodedStreamPipeline(streamTransformContext: StreamTransformContext): Promise<void> {\n const {videoTrack, audioTrack} = streamTransformContext;\n const addTrackTransforms = (track: StreamTransformContextTrack) => {\n if (track.transformPipelineWorker) {\n if (track.transformFunctionNames.length) {\n for (const transformFunctionName of track.transformFunctionNames) {\n track.transformPipelineWorker.postMessage({\n type: TransformMessageType.AddTransform,\n data: transformFunctionName\n });\n }\n } else {\n // Required for safari to properly work when only video transformation is added (i.e. FrameTimingInformation)\n track.transformPipelineWorker.postMessage({\n type: TransformMessageType.AddTransform,\n data: 'pass-through'\n });\n }\n }\n };\n\n addTrackTransforms(videoTrack);\n addTrackTransforms(audioTrack);\n\n const configureRTCRtpScriptTransform = async(streamTransformContext: StreamTransformContext) => {\n // Safari and Firefox ...\n const configureRTCRtpScriptTransformForTrack = async(context: StreamTransformContextTrack) => {\n const {receiver: trackReceiver, mediaStreamTrack: trackMediaStreamTrack, transformPipelineWorker: trackTransformPipelineWorker} = context;\n\n if (trackReceiver && trackMediaStreamTrack && trackTransformPipelineWorker) {\n trackReceiver.transform = new RTCRtpScriptTransform(trackTransformPipelineWorker, {name: `${trackMediaStreamTrack.kind}-transform-pipeline`});\n\n return new Promise<void>(resolve => {\n trackTransformPipelineWorker.addEventListener('message', ({data: message}: MessageEvent) => {\n if (message.type === TransformMessageType.PipelineConfigured) {\n resolve();\n }\n }, {once: true});\n });\n }\n\n return Promise.resolve();\n };\n\n const {videoTrack, audioTrack} = streamTransformContext;\n\n await Promise.all([configureRTCRtpScriptTransformForTrack(videoTrack), configureRTCRtpScriptTransformForTrack(audioTrack)]);\n };\n\n const configureEncodedStreams = async(streamTransformContext: StreamTransformContext) => {\n const configureEncodedStreamsForTrack = (context: StreamTransformContextTrack) => {\n const {receiver: trackReceiver, mediaStreamTrack: trackMediaStreamTrack, transformPipelineWorker: trackTransformPipelineWorker} = context;\n\n if (trackReceiver && trackMediaStreamTrack && trackTransformPipelineWorker) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore - createEncodedStreams method is not defined in lib.dom.d.ts\n const encodedReceiverStreams = trackReceiver.createEncodedStreams();\n\n return new Promise<void>(resolve => {\n trackTransformPipelineWorker.addEventListener('message', ({data: message}: MessageEvent) => {\n if (message.type === TransformMessageType.PipelineConfigured) {\n resolve();\n }\n }, {once: true});\n\n trackTransformPipelineWorker.postMessage(\n {\n type: TransformMessageType.ConfigurePipeline,\n data: {\n source: encodedReceiverStreams.readable,\n sink: encodedReceiverStreams.writable\n }\n },\n {transfer: [encodedReceiverStreams.readable, encodedReceiverStreams.writable]}\n );\n });\n }\n\n return Promise.resolve();\n };\n\n const {videoTrack, audioTrack} = streamTransformContext;\n const actions: Promise<void>[] = [];\n\n if (videoTrack.receiver && videoTrack.transformPipelineWorker) {\n actions.push(configureEncodedStreamsForTrack(videoTrack));\n }\n\n if (audioTrack.receiver && audioTrack.transformPipelineWorker) {\n actions.push(configureEncodedStreamsForTrack(audioTrack));\n }\n\n await Promise.all(actions);\n };\n\n if (FeatureEnablement.isRTCRtpScriptTransformSupported) {\n // Safari and Firefox...\n await configureRTCRtpScriptTransform(streamTransformContext);\n\n return;\n }\n\n // Chrome, Chromium...\n await configureEncodedStreams(streamTransformContext);\n }\n\n static configureInsertableStreamTransformation(\n stream: MediaStream,\n videoStreamTransformCallback: IStreamTrackTransform<VideoFrame> | undefined,\n audioStreamTransformCallback: IStreamTrackTransform<AudioData> | undefined\n ): {transformedStream: MediaStream; disposables: DisposableList} {\n const transformedStream = new MediaStream();\n const disposables: DisposableList = new DisposableList();\n\n stream.getTracks().forEach(track => {\n const kind: MediaStreamTrackKind = track.kind as MediaStreamTrackKind;\n\n switch (kind) {\n case 'video': {\n if (videoStreamTransformCallback) {\n const insertableStreamTransformCallback: TransformerTransformCallback<VideoFrame, VideoFrame> = (chunk, controller) => {\n videoStreamTransformCallback(track, chunk, controller);\n };\n\n const videoTrack = track as MediaStreamVideoTrack;\n const transformer = new TransformStream({transform: insertableStreamTransformCallback});\n const processor = new MediaStreamTrackProcessor({track: videoTrack});\n const generator = new MediaStreamTrackGenerator({kind: videoTrack.kind});\n const source = processor.readable;\n const sink = generator.writable;\n\n source.pipeThrough(transformer).pipeTo(sink);\n\n transformedStream.addTrack(generator);\n disposables.add(\n new Disposable(() => {\n transformedStream.removeTrack(generator);\n })\n );\n } else {\n transformedStream.addTrack(track);\n }\n\n break;\n }\n\n case 'audio': {\n if (audioStreamTransformCallback) {\n const insertableStreamTransformCallback: TransformerTransformCallback<AudioData, AudioData> = (chunk, controller) => {\n audioStreamTransformCallback(track, chunk, controller);\n };\n\n const audioTrack = track as MediaStreamAudioTrack;\n const transformer = new TransformStream({transform: insertableStreamTransformCallback});\n const processor = new MediaStreamTrackProcessor({track: audioTrack});\n const generator = new MediaStreamTrackGenerator({kind: audioTrack.kind});\n const source = processor.readable;\n const sink = generator.writable;\n\n source.pipeThrough(transformer).pipeTo(sink);\n\n transformedStream.addTrack(generator);\n\n const mediaStream = new MediaStream();\n const audioPumper = new Audio();\n\n mediaStream.addTrack(track);\n audioPumper.srcObject = mediaStream;\n document.body.appendChild(audioPumper);\n disposables.add(\n new Disposable(() => {\n transformedStream.removeTrack(generator);\n document.body.removeChild(audioPumper);\n })\n );\n } else {\n transformedStream.addTrack(track);\n }\n\n break;\n }\n\n default:\n assertUnreachable(kind);\n }\n });\n\n return {\n transformedStream,\n disposables\n };\n }\n\n constructor() {\n throw new Error('InsertableStreams is a static class that may not be instantiated');\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nexport enum AudioCodec {\n OPUS = 0,\n AAC = 1\n}\n\nexport type AudioCodecType = 'OPUS' | 'AAC';","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nexport default new Uint8Array([0x00, 0x00, 0x00, 0x01]);","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport annexBFourByteStartCode from '../../../decode/bitstream/codec/h264/nalUnit/AnnexBFourByteStartCode';\n\nexport default new Uint8Array([\n ...annexBFourByteStartCode, 103, 66, 192, 42, 218, 4, 4, 232, 64, 0, 0, 3, 0, 64, 0, 0, 15, 35, 198, 12, 168,\n ...annexBFourByteStartCode, 104, 206, 60, 128,\n ...annexBFourByteStartCode, 6, 3, 167, ...new Uint8Array(150).fill(255), 128,\n ...annexBFourByteStartCode, 101, 136, 132, 6, 191, 255, 255, 15, 69, 0, 1, 87, 159, ...new Uint8Array(15).fill(39), 93, 117, 215, 93, 117, 215, 93, 117, 215, 93, 117, 215, 93, 117, 215, 93, 117, 215, 93, 117, 215, 93, 117, 215, 93, 117, 215, 93, 117, 215, 93, 117, 215, 93, 117, 215, 93, 117, 215, 93, 117, 215, 93, 117, 215, 93, 117, 215, 93, 117, 215, 93, 117, 215, 93, 117, 215, 93, 117, 215, 93, 117, 215, 93, 117, 215, 93, 117, 215, 93, 117, 215, 93, 117, 215, 93, 117, 215, 93, 117, 215, 93, 117, 215, 93, 117, 215, 93, 117, 215, 93, 117, 215, 93, 117, 215, 128\n]);","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport annexBFourByteStartCode from '../../../decode/bitstream/codec/h264/nalUnit/AnnexBFourByteStartCode';\n\nexport default new Uint8Array([\n ...annexBFourByteStartCode, 6, 3, 255, 61, ...new Uint8Array(316).fill(255), 128,\n ...annexBFourByteStartCode, 65, 154, 32, 26, 240, 18, 48\n]);","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport BrowserDetector from '../../dom/BrowserDetector';\nimport assertUnreachable from '../../lang/assertUnreachable';\nimport {AudioCodec} from '../decode/bitstream/codec/AudioCodec';\nimport {VideoCodec} from '../decode/bitstream/codec/VideoCodec';\nimport annexBFourByteStartCode from '../decode/bitstream/codec/h264/nalUnit/AnnexBFourByteStartCode';\nimport surrogateH26428x16IFrame from './surrogateFrames/h264/surrogate28x16IFrame';\nimport surrogateH26428x16PFrame from './surrogateFrames/h264/surrogate28x16PFrame';\n\nexport const SkipFrame = Symbol();\n\nexport type SurrogateFrameType = ArrayBuffer | undefined | typeof SkipFrame;\n\nexport default class SurrogateFrameDataManager {\n private static readonly _isSafari = BrowserDetector.browserName === 'Safari';\n private static readonly _isAndroidChrome = BrowserDetector.browserName === 'Chrome' && BrowserDetector.isAndroid;\n private static readonly _singleZeroByte = new Uint8Array([0x00]);\n private static readonly _dummyAudioSilentPerCodec = {OPUS: new Uint8Array([0x68, 0x07, 0xd9, 0xab, 0xbc, 0x79, 0x87, 0xab, 0x8e, 0x4a, 0x14, 0xf3, 0xa7, 0x1c, 0xf2, 0x9a, 0x7a, 0x45, 0xa7, 0x2d, 0x44, 0x25, 0x74, 0x4c, 0xad, 0x16, 0xb3, 0x0e, 0x51, 0x57, 0xea, 0xe7, 0xad, 0x2a, 0x38, 0xce, 0x33])};\n private static readonly _dummy2x2VideoIFramePerCodec = {\n H264: new Uint8Array([\n ...annexBFourByteStartCode, 0x09, 0xf0, // Access unit delimiter\n ...annexBFourByteStartCode, 0x67, 0xf4, 0x00, 0x0a, 0x91, 0x9b, 0x2b, 0xf1, 0xf1, 0xf8, 0x08, 0x80, 0x00, 0x00, 0x03, 0x00, 0x80, 0x00, 0x00, 0x19, 0x07, 0x89, 0x12, 0xcb, // Sequence parameter set\n ...annexBFourByteStartCode, 0x68, 0xeb, 0xe3, 0xc4, 0x48, 0x44, // Picture paramter set\n /* */ 0x00, 0x00, 0x01, 0x65, 0x88, 0x82, 0x00, 0x3f, 0x70, 0x23, 0x86, 0xe6, 0xd1, 0x80, 0x09, 0xaf, 0x0a, 0x41, 0x66, 0x6b, 0x54, 0x46, 0xfb, 0x71, 0xd9, 0x7f, 0xff, 0xff, 0xf9]), // Slice layer: idr data\n VP8: new Uint8Array([0xb0, 0x02, 0x00, 0x9d, 0x01, 0x2a, 0x01, 0x00, 0x01, 0x00, 0x39, 0x6b, 0x00, 0x27, 0x1c, 0x24, 0x0c, 0x2c, 0x2c, 0x44, 0xcc, 0x24, 0x41, 0xa8, 0x00, 0x13, 0xa7, 0xa3, 0x7a, 0x50, 0x00, 0xfe, 0xeb, 0xde, 0x2f, 0x8a, 0x1e, 0x6b, 0x7b, 0x07, 0x72, 0x63, 0x09, 0xa4, 0x8e, 0xc0]),\n VP9: new Uint8Array([0x82, 0x49, 0x83, 0x42, 0x00, 0x00, 0x00, 0x00, 0x06, 0x76, 0x38, 0x24, 0x1c, 0x19, 0xa0, 0x00, 0x00, 0x20, 0x40, 0x00, 0x11, 0xbf, 0xdd, 0x77, 0xff, 0x40, 0x7f, 0xb1, 0x00])\n };\n private static readonly _dummy2x2VideoPFramePerCodec = {\n H264: new Uint8Array([\n ...annexBFourByteStartCode, 0x09, 0xf0, // Access unit delimiter\n ...annexBFourByteStartCode, 0x41, 0x9a, 0x68, 0x49, 0xa8, 0x41, 0x68, 0x99, 0x4c, 0x0f, 0xff, 0x92, 0x81]), // Slice layer: non idr data\n VP8: new Uint8Array([0x31, 0x03, 0x00, 0xe4, 0xe0, 0xa8, 0x9b, 0x37, 0xaf, 0x10, 0x4f, 0x4f, 0xb1, 0x0a, 0x2f, 0xe4, 0x92, 0xc0, 0x1f, 0xe7, 0x4f, 0x46, 0xff, 0xee, 0x51, 0xc1, 0x5d, 0x00, 0xfe, 0xeb, 0xde, 0x2f, 0x8a, 0x1e, 0x6b, 0x7b, 0x07, 0x72, 0x63, 0x09, 0xa4, 0x8e, 0xc0]),\n VP9: new Uint8Array([0x86, 0x00, 0x40, 0x92, 0x9c, 0x24, 0x48, 0x00, 0x00, 0x03, 0x70, 0x00, 0x00, 0x4b, 0x40])\n };\n private static readonly _surrogate28x16H264IFrame = surrogateH26428x16IFrame;\n private static readonly _surrogate28x16H264PFrame = surrogateH26428x16PFrame;\n private static readonly _surrogate28x16PFrameFrameNumberReset = 1;\n private static _surrogate28x16PFrameFrameNumber = SurrogateFrameDataManager._surrogate28x16PFrameFrameNumberReset;\n\n static getSurrogateAudioSilentPerCodec(codec: AudioCodec): ArrayBuffer | undefined {\n switch (codec) {\n case AudioCodec.OPUS:\n return SurrogateFrameDataManager._dummyAudioSilentPerCodec.OPUS.buffer;\n\n // TODO (AZ): Add a dummy AAC silent frame when AAC support is added\n case AudioCodec.AAC:\n return undefined;\n\n default:\n assertUnreachable(codec);\n }\n }\n\n static getInvalidSurrogateAudioData(): ArrayBuffer {\n return SurrogateFrameDataManager._singleZeroByte.buffer;\n }\n\n static getSurrogateVideoIFramePerCodec(codec: VideoCodec): ArrayBuffer | undefined {\n switch (codec) {\n case VideoCodec.H264:\n if (SurrogateFrameDataManager._isSafari) {\n return SurrogateFrameDataManager._surrogate28x16H264IFrame.buffer;\n }\n\n return SurrogateFrameDataManager._dummy2x2VideoIFramePerCodec.H264.buffer;\n\n case VideoCodec.VP8:\n return SurrogateFrameDataManager._dummy2x2VideoIFramePerCodec.VP8.buffer;\n\n case VideoCodec.VP9:\n return SurrogateFrameDataManager._dummy2x2VideoIFramePerCodec.VP9.buffer;\n\n default:\n assertUnreachable(codec);\n }\n }\n\n static getInvalidSurrogateVideoIFrame(codec: VideoCodec): SurrogateFrameType {\n if ((codec === VideoCodec.H264) && SurrogateFrameDataManager._isAndroidChrome) {\n SurrogateFrameDataManager._surrogate28x16PFrameFrameNumber = SurrogateFrameDataManager._surrogate28x16PFrameFrameNumberReset;\n\n return SkipFrame;\n }\n\n return SurrogateFrameDataManager._singleZeroByte.buffer;\n }\n\n static getSurrogateVideoPFramePerCodec(codec: VideoCodec): ArrayBuffer | undefined {\n switch (codec) {\n case VideoCodec.H264: {\n if (SurrogateFrameDataManager._isSafari) {\n return SurrogateFrameDataManager._surrogate28x16H264PFrame.buffer;\n }\n\n return SurrogateFrameDataManager._dummy2x2VideoPFramePerCodec.H264.buffer;\n }\n\n case VideoCodec.VP8:\n return SurrogateFrameDataManager._dummy2x2VideoPFramePerCodec.VP8.buffer;\n\n case VideoCodec.VP9:\n return SurrogateFrameDataManager._dummy2x2VideoPFramePerCodec.VP9.buffer;\n\n default:\n assertUnreachable(codec);\n }\n }\n\n static getInvalidSurrogateVideoPFrame(): SurrogateFrameType {\n return SurrogateFrameDataManager._singleZeroByte.buffer;\n }\n\n private constructor() {\n throw new Error('SurrogateFrameDataManager is a static class that may not be instantiated');\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport DisposableList from '../../lang/DisposableList';\nimport IDisposable from '../../lang/IDisposable';\nimport {AudioCodec} from '../decode/bitstream/codec/AudioCodec';\nimport {VideoCodec} from '../decode/bitstream/codec/VideoCodec';\nimport {IEncodedStreamSink} from './EncodedStreamSink';\nimport {StreamTransformContextTrack} from '../context/StreamTransformContext';\nimport SurrogateFrameDataManager, {SurrogateFrameType, SkipFrame} from './SurrogateFrameDataManager';\nimport {TransformMessageDataType} from './worker/TransformStreamPipelineWorkerMessage';\nimport Chunk from './Chunk';\n\nexport type EncodedMediaTransformManagerContext = {\n videoTrack: StreamTransformContextTrack;\n audioTrack: StreamTransformContextTrack;\n encodedVideoStreamSink: IEncodedStreamSink<RTCEncodedVideoFrame>;\n encodedAudioStreamSink: IEncodedStreamSink<RTCEncodedAudioFrame>;\n};\n\nexport default class EncodedMediaTransformManager implements IDisposable {\n private readonly _disposables: DisposableList = new DisposableList();\n\n constructor(context: EncodedMediaTransformManagerContext) {\n this.initialize(context);\n }\n\n public dispose(): void {\n this._disposables.dispose();\n }\n\n private initialize(context: EncodedMediaTransformManagerContext): void {\n if (context.videoTrack.mediaStreamTrack) {\n context.videoTrack.transformFunctionNames.push('protected-video');\n\n this._disposables.add(context.videoTrack.transformMessageRouter!.registerRoute(TransformMessageDataType.EncodedVideoChunk, (chunk: RTCEncodedVideoFrame) => this.encodedVideoStreamCallback(context.videoTrack, context.encodedVideoStreamSink as IEncodedStreamSink<RTCEncodedVideoFrame>, chunk)));\n }\n\n if (context.audioTrack.mediaStreamTrack) {\n context.audioTrack.transformFunctionNames.push('protected-audio');\n\n this._disposables.add(context.audioTrack.transformMessageRouter!.registerRoute(TransformMessageDataType.EncodedAudioChunk, (chunk: RTCEncodedAudioFrame) => this.encodedAudioStreamCallback(context.audioTrack, context.encodedAudioStreamSink as IEncodedStreamSink<RTCEncodedAudioFrame>, chunk)));\n }\n }\n\n private async encodedAudioStreamCallback(track: StreamTransformContextTrack, encodedAudioStreamSink: IEncodedStreamSink<RTCEncodedAudioFrame>, chunk: RTCEncodedAudioFrame): Promise<Chunk> {\n if (!await encodedAudioStreamSink(track.mediaStreamTrack!, chunk)) {\n chunk.data = SurrogateFrameDataManager.getInvalidSurrogateAudioData();\n } else {\n chunk.data = SurrogateFrameDataManager.getSurrogateAudioSilentPerCodec(track.codec as AudioCodec) || chunk.data;\n }\n\n return chunk as unknown as Chunk;\n }\n\n private async encodedVideoStreamCallback(track: StreamTransformContextTrack, encodedVideoStreamSink: IEncodedStreamSink<RTCEncodedVideoFrame>, chunk: RTCEncodedVideoFrame): Promise<Chunk | undefined> {\n if (!await encodedVideoStreamSink(track.mediaStreamTrack!, chunk)) {\n let surrogate: SurrogateFrameType;\n\n if (chunk.type === 'key') {\n surrogate = SurrogateFrameDataManager.getInvalidSurrogateVideoIFrame(track.codec as VideoCodec);\n } else {\n surrogate = SurrogateFrameDataManager.getInvalidSurrogateVideoPFrame();\n }\n\n if (surrogate === SkipFrame) {\n return;\n }\n\n chunk.data = surrogate || chunk.data;\n } else {\n if (chunk.type === 'key') {\n chunk.data = SurrogateFrameDataManager.getSurrogateVideoIFramePerCodec(track.codec as VideoCodec) || chunk.data;\n } else {\n chunk.data = SurrogateFrameDataManager.getSurrogateVideoPFramePerCodec(track.codec as VideoCodec) || chunk.data;\n }\n }\n\n return chunk;\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport assertUnreachable from '../../../../lang/assertUnreachable';\nimport {VideoCodec, VideoCodecType} from './VideoCodec';\n\nexport default class VideoCodecMapping {\n public static convertVideoCodecToVideoCodecType(videoCodec: VideoCodec): VideoCodecType {\n switch (videoCodec) {\n case VideoCodec.H264:\n return 'H264';\n case VideoCodec.VP8:\n return 'VP8';\n case VideoCodec.VP9:\n return 'VP9';\n default:\n assertUnreachable(videoCodec);\n }\n }\n\n public static convertVideoCodecTypeToVideoCodec(videoCodecType: VideoCodecType): VideoCodec {\n const videoCodecString = videoCodecType.toUpperCase() as keyof typeof VideoCodec;\n\n switch (videoCodecString) {\n case 'H264':\n return VideoCodec.H264;\n case 'VP8':\n return VideoCodec.VP8;\n case 'VP9':\n return VideoCodec.VP9;\n default:\n assertUnreachable(videoCodecString);\n }\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport {AudioCodec, AudioCodecType} from './AudioCodec';\nimport assertUnreachable from '../../../../lang/assertUnreachable';\n\nexport default class AudioCodecMapping {\n public static convertAudioCodecToAudioCodecType(audioCodec: AudioCodec): AudioCodecType {\n switch (audioCodec) {\n case AudioCodec.OPUS:\n return 'OPUS';\n case AudioCodec.AAC:\n return 'AAC';\n default:\n assertUnreachable(audioCodec);\n }\n }\n\n public static convertAudioCodecTypeToAudioCodec(audioCodecType: AudioCodecType): AudioCodec {\n const audioCodecString = audioCodecType.toUpperCase() as keyof typeof AudioCodec;\n\n switch (audioCodecString) {\n case 'OPUS':\n return AudioCodec.OPUS;\n case 'AAC':\n return AudioCodec.AAC;\n default:\n assertUnreachable(audioCodecString);\n }\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport GlobalScope from '../../globalScope/GlobalScope';\nimport Disposable from '../../lang/Disposable';\nimport DisposableList from '../../lang/DisposableList';\nimport assertUnreachable from '../../lang/assertUnreachable';\nimport {StreamSetupListener} from '../../dom/StreamSetupListener';\nimport GarbageCollectorManager from '../../dom/GarbageCollectorManager';\nimport Durations from '../../time/Duration';\nimport SDK from '../SDK';\nimport IPeerConnection from '../../rtc/IPeerConnection';\nimport SdpParser from '../../rtc/SdpParser';\nimport RtcConfigurationManager from '../../rtc/RtcConfigurationManager';\nimport PeerConnectionService, {\n defaultTrackKinds,\n EncodedInsertableStreams\n} from '../../rtc/PeerConnectionService';\nimport RtcConnectionMonitor from '../../rtc/RtcConnectionMonitor';\nimport EndPoint, {SubscribeOptions, SetRemoteDescriptionStatus} from '../discovery/EndPoint';\nimport Discovery from '../discovery/Discovery';\nimport FeatureEnablement from '../../environment/FeatureEnablement';\nimport ChannelState from '../channels/ChannelState';\nimport {ILogger} from '../../logger/LoggerInterface';\nimport LoggerFactory from '../../logger/LoggerFactory';\nimport ChannelContext from '../context/ChannelContext';\nimport PeerConnectionContext from '../context/PeerConnectionContext';\nimport StreamTransformContext from '../context/StreamTransformContext';\nimport FrameTimingInformationContext from '../context/FrameTimingInformationContext';\nimport FrameTimingInformationManager, {FrameTimingInformationManagerContext} from '../frameTiming/FrameTimingInformationManager';\nimport InsertableStreams from '../transformation/InsertableStreams';\nimport {IStreamSubscriber} from './IStreamSubscriber';\nimport VideoFrameDetector from './VideoFrameDetector';\nimport EncodedMediaTransformManager, {EncodedMediaTransformManagerContext} from '../transformation/EncodedMediaTransformManager';\nimport {AudioCodecType} from '../decode/bitstream/codec/AudioCodec';\nimport {VideoCodecType} from '../decode/bitstream/codec/VideoCodec';\nimport VideoCodecMapping from '../decode/bitstream/codec/VideoCodecMapping';\nimport AudioCodecMapping from '../decode/bitstream/codec/AudioCodecMapping';\n\nconst iceCandidateAccumulationInterval = 100;\nconst defaultStreamSetupTimeout = 30000;\n\nexport default class RealTimeStreamSubscriber implements IStreamSubscriber {\n private readonly _logger: ILogger = LoggerFactory.getLogger('RealTimeStreamSubscriber');\n private readonly _disposables: DisposableList = new DisposableList();\n private readonly _channelContext: ChannelContext;\n private readonly _peerConnectionContext: PeerConnectionContext;\n private readonly _streamTransformContext: StreamTransformContext;\n private readonly _frameTimingInformationContext: FrameTimingInformationContext;\n private readonly _handleStreamFailure: () => Promise<void>;\n\n constructor(channelContext: ChannelContext, peerConnectionContext: PeerConnectionContext, streamTransformContext: StreamTransformContext, frameTimingInformationContext: FrameTimingInformationContext, handleStreamFailure: () => Promise<void>) {\n this._channelContext = channelContext;\n this._peerConnectionContext = peerConnectionContext;\n this._streamTransformContext = streamTransformContext;\n this._frameTimingInformationContext = frameTimingInformationContext;\n this._handleStreamFailure = handleStreamFailure;\n }\n\n start(uri: URL, token: string, listenOnStreamSetup: StreamSetupListener, playMediaStreamInVideoElement: Function): Promise<void> {\n this._disposables.dispose();\n\n const requiresEncodedInsertableStreams = this._streamTransformContext.hasEncodedInsertableStreams.value\n || this._frameTimingInformationContext.shouldExtractTimecode.value\n || this._frameTimingInformationContext.shouldExtractTimestamps.value ? EncodedInsertableStreams.Enabled : EncodedInsertableStreams.Disabled;\n\n return Promise.all([\n Discovery.discoverClosestEndPointWithCaching(uri),\n PeerConnectionService.createPeerConnectionOffer('recvonly', defaultTrackKinds, requiresEncodedInsertableStreams)\n .then(({localOffer, peerConnection}) => {\n this._peerConnectionContext.peerConnection.value = peerConnection;\n\n return {\n localOffer,\n peerConnection\n };\n })\n ])\n .then(([endPoint, {localOffer, peerConnection}]) => {\n this._channelContext.online.value = true;\n this._channelContext.endPoint.value = endPoint;\n this._logger.info('Connecting to [%s]', endPoint.toString());\n this._logger.info('Local offer:\\n' + localOffer.sdp);\n\n const subscribeOptions: SubscribeOptions = {};\n\n if (this._channelContext.onRealTimeSubscribeRequestCallback) {\n subscribeOptions.onSubscribeRequestCallback = this._channelContext.onRealTimeSubscribeRequestCallback;\n }\n\n if (this._channelContext.onRealTimeSubscribeResponseCallback) {\n subscribeOptions.onSubscribeResponseCallback = this._channelContext.onRealTimeSubscribeResponseCallback;\n }\n\n if (FeatureEnablement.clientOfferDisabled || !peerConnection.supportsSetConfiguration || !peerConnection.supportsGetConfiguration) {\n peerConnection.close();\n peerConnection.dispose();\n\n if (SDK.forceGarbageCollectionOnRestart && !(FeatureEnablement.isMobile && SDK.skipGarbageCollectionOnMobileDevices)) {\n GarbageCollectorManager.forceGarbageCollection();\n }\n\n this._peerConnectionContext.peerConnection.value = null;\n\n return endPoint.subscribe(token, null, this._channelContext.failureCount.value, subscribeOptions);\n }\n\n return endPoint.subscribe(token, localOffer, this._channelContext.failureCount.value, subscribeOptions);\n })\n .then(response => {\n const {status} = response;\n\n this._channelContext.exists.value = this._channelContext.mapSubscribeStatusToExists(status);\n this._channelContext.state.value = this._channelContext.mapSubscribeStatusToChannelStatus(status);\n\n this._channelContext.applyStatus(status);\n\n if (status !== 'ok') {\n this._channelContext.stream.value = null;\n this._channelContext.lag.value = undefined ;\n\n this._channelContext.applySessionAndStreamPropertiesToVideoElement();\n\n this._logger.info(\n '[%s] Subscribe failed with status [%s]',\n this._channelContext.streamId,\n status\n );\n\n return;\n }\n\n const {stream, rtcConfiguration, setRemoteDescriptionResponse, createOfferDescriptionResponse, createAnswerDescriptionResponse, lag} = response;\n\n this._channelContext.stream.value = stream;\n this._channelContext.lag.value = lag;\n\n this._channelContext.applySessionAndStreamPropertiesToVideoElement();\n\n this._logger.debug(\n '[%s] Subscribe completed [%s] [%j] [%j] [%j] [%j]',\n this._channelContext.streamId,\n status,\n rtcConfiguration,\n setRemoteDescriptionResponse,\n createOfferDescriptionResponse,\n createAnswerDescriptionResponse\n );\n\n return this.applyRtcConfiguration(this._peerConnectionContext.peerConnection.value, rtcConfiguration as RTCConfiguration)\n .then(peerConnection => {\n let submitCandidatesTimeout: undefined | number;\n let cancelDiscovery = false;\n let discoveryCompleted = false;\n const candidates: RTCIceCandidate[] = [];\n\n if (!this._peerConnectionContext.peerConnection.value) {\n this._peerConnectionContext.peerConnection.value = peerConnection;\n }\n\n peerConnection.onicecandidate = (e): void => {\n if (this._channelContext.stream.value !== stream) {\n return;\n }\n\n if (this._peerConnectionContext.peerConnection.value !== peerConnection) {\n return;\n }\n\n if (cancelDiscovery) {\n return;\n }\n\n if (!SDK.sendLocalCandidates.value) {\n return;\n }\n\n if (e.candidate && e.candidate.candidate) {\n candidates.push(e.candidate);\n } else {\n discoveryCompleted = true;\n }\n\n if (!submitCandidatesTimeout) {\n submitCandidatesTimeout = GlobalScope.value.setTimeout(() => {\n if (this._channelContext.stream.value !== stream) {\n return;\n }\n\n if (cancelDiscovery) {\n return;\n }\n\n const ignored = this._channelContext.endPoint.value?.addIceCandidates(stream, candidates, discoveryCompleted)\n .then(({status, options}) => {\n if (status !== 'ok') {\n this._logger.warn('[%s] Failed to add ICE candidates with reason [%s]', this._channelContext.streamId, status);\n\n return;\n }\n\n if (options?.includes('cancel')) {\n cancelDiscovery = true;\n }\n\n this._logger.info('[%s] Added ICE candidates with reason [%s] and options [%s]', this._channelContext.streamId, status, options);\n })\n .catch(e => {\n this._logger.error('[%s] Failed to add ICE candidates', this._channelContext.streamId, e);\n });\n }, iceCandidateAccumulationInterval);\n\n this._disposables.add(new Disposable(() => GlobalScope.value.clearTimeout(submitCandidatesTimeout)));\n }\n };\n\n this._disposables.add(new Disposable(() => {\n peerConnection.onicecandidate = null;\n peerConnection.oniceconnectionstatechange = null;\n }));\n\n peerConnection.oniceconnectionstatechange = (): void => {\n if (this._channelContext.stream.value !== stream) {\n return;\n }\n\n if (this._peerConnectionContext.peerConnection.value !== peerConnection) {\n return;\n }\n\n const retryCallback = (): void => {\n const ignored = this._handleStreamFailure()\n .catch(e => {\n this._logger.error(\n '[%s] Failed handling stream failure after peer connection stopped with state [%s]',\n this._channelContext.streamId,\n peerConnection.iceConnectionState,\n e\n );\n });\n };\n\n switch (peerConnection.iceConnectionState) {\n case 'checking':\n case 'completed':\n case 'connected':\n case 'new':\n return;\n\n case 'disconnected':\n case 'failed':\n if (GlobalScope.value.navigatorIsOnLine) {\n this._logger.info('[%s] ICE connection state changed to [%s], trying to reconnect', this._channelContext.streamId, peerConnection.iceConnectionState);\n this.reconnectPeerConnection(this._channelContext.streamId, peerConnection, retryCallback);\n }\n\n return;\n case 'closed':\n this._logger.info('[%s] ICE connection state changed to [%s], retrying to connect', this._channelContext.streamId, peerConnection.iceConnectionState);\n\n retryCallback();\n\n return;\n default:\n assertUnreachable(peerConnection.iceConnectionState as never);\n }\n };\n\n const mediaStreamPromise = new Promise<MediaStream>((resolve, reject) => {\n if (!FeatureEnablement.onTrackDisabled) {\n const timeoutId = GlobalScope.value.setTimeout(() => reject(new Error('Stream setup timed out')), defaultStreamSetupTimeout);\n\n this._disposables.add(new Disposable(() => GlobalScope.value.clearTimeout(timeoutId)));\n\n peerConnection.ontrack = (e): void => {\n GlobalScope.value.clearTimeout(timeoutId);\n resolve(e.streams[0]);\n };\n\n return;\n }\n\n const trackListener = (e: RTCPeerConnectionEventMap['track' | 'addstream']): void => {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n GlobalScope.value.clearTimeout(timeoutId);\n peerConnection.removeEventListener('track', trackListener);\n peerConnection.removeEventListener('addstream', trackListener);\n\n if ('streams' in e) {\n resolve(e.streams[0]);\n } else {\n resolve(e.stream);\n }\n };\n\n const timeoutId = GlobalScope.value.setTimeout(() => {\n peerConnection.removeEventListener('track', trackListener);\n peerConnection.removeEventListener('addstream', trackListener);\n reject(new Error('Stream setup timed out'));\n }, defaultStreamSetupTimeout);\n\n peerConnection.addEventListener('track', trackListener);\n peerConnection.addEventListener('addstream', trackListener);\n this._disposables.add(new Disposable(() => GlobalScope.value.clearTimeout(timeoutId)));\n\n return;\n });\n\n return new Promise<void>(resolve => {\n resolve();\n }).then(() => {\n if (!setRemoteDescriptionResponse) {\n return;\n }\n\n this._logger.info('[%s] Set local SDP offer [%s]', this._channelContext.streamId, setRemoteDescriptionResponse.sessionDescription.sdp);\n\n return peerConnection.setLocalDescription(setRemoteDescriptionResponse.sessionDescription)\n .catch(e => {\n this._logger.info('[%s] Failed to set local description [%j] with message [%s]', this._channelContext.streamId, setRemoteDescriptionResponse.sessionDescription, e.message);\n\n throw e;\n });\n }).then(() => {\n if (!createAnswerDescriptionResponse) {\n return;\n }\n\n this._logger.info('[%s] Set remote SDP answer [%s]', this._channelContext.streamId, createAnswerDescriptionResponse.sessionDescription.sdp);\n\n return peerConnection.setRemoteDescription(createAnswerDescriptionResponse.sessionDescription)\n .catch(e => {\n this._logger.info('[%s] Failed to set remote description [%j] with message [%s]', this._channelContext.streamId, createAnswerDescriptionResponse.sessionDescription, e.message);\n\n throw e;\n });\n }).then(() => {\n if (!createOfferDescriptionResponse) {\n return;\n }\n\n this._logger.info('[%s] Set remote SDP offer [%s]', this._channelContext.streamId, createOfferDescriptionResponse.sessionDescription.sdp);\n\n return peerConnection.setRemoteDescription(createOfferDescriptionResponse.sessionDescription)\n .catch(e => {\n this._logger.info('[%s] Failed to set remote description [%j] with message [%s]', this._channelContext.streamId, createOfferDescriptionResponse.sessionDescription, e.message);\n\n throw e;\n })\n .then(() => {\n return peerConnection.createAnswer({\n offerToReceiveAudio: true,\n offerToReceiveVideo: true\n });\n }).then(answer => {\n this._logger.info('[%s] Set local SDP answer [%j]', this._channelContext.streamId, answer);\n\n const endPoint = this._channelContext.endPoint.value as EndPoint;\n\n return endPoint.setRemoteDescription(stream, answer);\n }).then(({status, sessionDescription}) => {\n this._channelContext.state.value = this.mapSetRemoteDescriptionStatusToChannelStatus(status);\n\n if (status !== 'ok') {\n this._channelContext.playing.value = false;\n this._channelContext.standby.value = true;\n this._channelContext.stopped.value = false;\n\n return;\n }\n\n return peerConnection.setLocalDescription(sessionDescription as RTCSessionDescription)\n .catch(e => {\n this._logger.info('[%s] Failed to set local description [%j] with message [%s]', this._channelContext.streamId, sessionDescription, e.message);\n\n throw e;\n });\n });\n }).then(() => {\n listenOnStreamSetup.success(this._channelContext.streamId);\n\n return mediaStreamPromise;\n }).then(mediaStream => {\n if (requiresEncodedInsertableStreams && peerConnection?.currentRemoteDescription?.sdp) {\n const parsedRemoteDescription = new SdpParser(peerConnection.currentRemoteDescription.sdp);\n\n this._streamTransformContext.videoTrack.codec = VideoCodecMapping.convertVideoCodecTypeToVideoCodec(parsedRemoteDescription.videoCodec as VideoCodecType);\n this._streamTransformContext.audioTrack.codec = AudioCodecMapping.convertAudioCodecTypeToAudioCodec(parsedRemoteDescription.audioCodec as AudioCodecType);\n\n const receivers = peerConnection.getReceivers();\n // Note: This assumes that there is only one video MediaStreamTrack and one audio MediaStreamTrack\n const videoTrack = this._streamTransformContext.videoTrack.mediaStreamTrack = mediaStream.getVideoTracks()[0];\n // Both are expected to be present, but the type system makes them nullable, so we have to assert the presence\n const videoTrackReceiver = this._streamTransformContext.videoTrack.receiver = receivers.filter(receiver => receiver.track === videoTrack)[0];\n\n this._streamTransformContext.videoTrack.mid = peerConnection.supportsGetTransceivers\n ? peerConnection.getTransceivers().filter(transceiver => transceiver.receiver === videoTrackReceiver)[0]?.mid\n : null;\n\n const audioTrack = this._streamTransformContext.audioTrack.mediaStreamTrack = mediaStream.getAudioTracks()[0];\n const audioTrackReceiver = this._streamTransformContext.audioTrack.receiver = receivers.filter(receiver => receiver.track === audioTrack)[0];\n\n this._streamTransformContext.audioTrack.mid = peerConnection.supportsGetTransceivers\n ? peerConnection.getTransceivers().filter(transceiver => transceiver.receiver === audioTrackReceiver)[0]?.mid\n : null;\n\n this._disposables.add(InsertableStreams.createEncodedStreamPipeline(this._streamTransformContext));\n\n const requiresFrameTimingInformation = this._frameTimingInformationContext.shouldExtractTimecode.value || this._frameTimingInformationContext.shouldExtractTimestamps.value;\n\n if (requiresFrameTimingInformation) {\n const frameTimingInformationManagerContext: FrameTimingInformationManagerContext = {\n streamId: this._channelContext.streamId,\n codec: this._streamTransformContext.videoTrack.codec,\n videoElement: this._channelContext.videoElement,\n decodedFrameTimingInformationSubject: this._frameTimingInformationContext.decodedFrameTimingInformation,\n renderedFrameTimingInformationSubject: this._frameTimingInformationContext.renderedFrameTimingInformation,\n isEnabledSubject: this._frameTimingInformationContext.isEnabled,\n receiver: videoTrackReceiver,\n mid: this._streamTransformContext.videoTrack.mid!,\n trackId: this._streamTransformContext.videoTrack.mediaStreamTrack.id!,\n transformMessageRouter: this._streamTransformContext.videoTrack.transformMessageRouter!,\n transformFunctionNames: this._streamTransformContext.videoTrack.transformFunctionNames\n };\n\n this._disposables.add(new FrameTimingInformationManager(frameTimingInformationManagerContext));\n }\n\n const requiresEncodedMediaTransform = this._streamTransformContext.hasEncodedInsertableStreams.value;\n\n if (requiresEncodedMediaTransform) {\n const encodedMediaTransformManagerContext: EncodedMediaTransformManagerContext = {\n videoTrack: this._streamTransformContext.videoTrack,\n audioTrack: this._streamTransformContext.audioTrack,\n encodedVideoStreamSink: this._streamTransformContext.encodedVideoStreamSink!,\n encodedAudioStreamSink: this._streamTransformContext.encodedAudioStreamSink!\n };\n\n this._disposables.add(new EncodedMediaTransformManager(encodedMediaTransformManagerContext));\n }\n\n InsertableStreams.configureEncodedStreamPipeline(this._streamTransformContext);\n }\n\n if (this._streamTransformContext.hasInsertableStreams.value) {\n const {transformedStream, disposables} = InsertableStreams.configureInsertableStreamTransformation(mediaStream, this._streamTransformContext.videoStreamTransformCallback, this._streamTransformContext.audioStreamTransformCallback);\n\n this._disposables.add(disposables);\n mediaStream = transformedStream;\n }\n\n this._peerConnectionContext.mediaStream.value = mediaStream;\n\n const rtcConnectionMonitor = new RtcConnectionMonitor(\n peerConnection, mediaStream,\n this._channelContext.endPoint.value?.roundTripTime ? this._channelContext.endPoint.value.roundTripTime / 4 : 0,\n SDK.applicationActivityMonitor!.isForeground\n );\n\n this._disposables.add(rtcConnectionMonitor);\n\n const rtcConnectionMonitorStatisticSubscription = rtcConnectionMonitor.rtcStatistic.subscribe(statistics => {\n this._channelContext.rtcStatistics.value = statistics;\n\n if (!statistics) {\n return;\n }\n\n if (!this._channelContext.rtcVideoStatistic && !this._channelContext.rtcAudioStatistic) {\n this._channelContext.rtcAudioStatistic = statistics.audio;\n this._channelContext.rtcVideoStatistic = statistics.video;\n\n return;\n }\n\n if (!SDK.applicationActivityMonitor!.isForeground.value) {\n this._channelContext.rtcAudioStatistic = statistics.audio;\n this._channelContext.rtcVideoStatistic = statistics.video;\n\n return;\n }\n\n let audioTrackFailed = false;\n let videoTrackFailed = false;\n\n if (statistics.audio) {\n if (this._channelContext.rtcAudioStatistic && this._channelContext.rtcAudioStatistic.timestamp !== statistics.audio.timestamp) {\n audioTrackFailed = this._channelContext.rtcAudioStatistic && this._channelContext.rtcAudioStatistic.bytesReceived === statistics.audio.bytesReceived;\n\n if (audioTrackFailed && GlobalScope.value.navigatorIsOnLine) {\n this._logger.info(\n '[%s] Audio track failed with last bytesReceived [%s] is equal to previous bytesReceived [%s] within [%s]',\n this._channelContext.streamId,\n statistics.audio.bytesReceived,\n this._channelContext.rtcAudioStatistic.bytesReceived,\n new Durations(statistics.audio.timestamp - this._channelContext.rtcAudioStatistic.timestamp).toIsoString()\n );\n }\n\n this._channelContext.rtcAudioStatistic = statistics.audio;\n }\n }\n\n if (statistics.video) {\n if (this._channelContext.rtcVideoStatistic && this._channelContext.rtcVideoStatistic.timestamp !== statistics.video.timestamp) {\n videoTrackFailed = this._channelContext.rtcVideoStatistic && this._channelContext.rtcVideoStatistic.bytesReceived === statistics.video.bytesReceived;\n\n if (videoTrackFailed && GlobalScope.value.navigatorIsOnLine) {\n this._logger.info(\n '[%s] Video track failed with last bytesReceived [%s] is equal to previous bytesReceived [%s] within [%s]',\n this._channelContext.streamId,\n statistics.video.bytesReceived,\n this._channelContext.rtcVideoStatistic.bytesReceived,\n new Durations(statistics.video.timestamp - this._channelContext.rtcVideoStatistic.timestamp).toIsoString()\n );\n }\n\n this._channelContext.rtcVideoStatistic = statistics.video;\n }\n }\n\n if (!GlobalScope.value.navigatorIsOnLine) {\n this._channelContext.state.value = ChannelState.Offline;\n\n return;\n }\n\n if (videoTrackFailed || audioTrackFailed) {\n const retryCallback = (): void => {\n rtcConnectionMonitor.dispose();\n\n const ignored = this._handleStreamFailure()\n .catch(e => {\n this._logger.error(\n '[%s] Failed handling stream failure after track stopped with state [%s]',\n this._channelContext.streamId,\n peerConnection.iceConnectionState,\n e\n );\n });\n };\n\n this.reconnectPeerConnection(this._channelContext.streamId, peerConnection, retryCallback);\n } else {\n this._peerConnectionContext.peerConnectionReconnectAttempts = 0;\n\n if (this._channelContext.state.value !== ChannelState.Reconnecting && this._channelContext.state.value !== ChannelState.Offline) {\n return;\n }\n\n this._channelContext.state.value = this._channelContext.playing.value ? ChannelState.Playing : ChannelState.Paused;\n this._logger.info('Channel state restored to [%s] after reconnecting', ChannelState[this._channelContext.state.value]);\n }\n });\n\n this._disposables.add(rtcConnectionMonitorStatisticSubscription);\n\n if (!SDK.automaticallyPlayMediaStream) {\n this._channelContext.autoMuted.value = false;\n this._channelContext.autoPaused.value = true;\n this._channelContext.loading.value = false;\n this._channelContext.playing.value = false;\n this._channelContext.state.value = ChannelState.Paused;\n\n return;\n }\n\n return playMediaStreamInVideoElement(mediaStream);\n });\n });\n });\n }\n\n private async applyRtcConfiguration(\n optionalPeerConnection: IPeerConnection | null,\n rtcConfiguration: RTCConfiguration): Promise<IPeerConnection> {\n if (!optionalPeerConnection) {\n rtcConfiguration = RtcConfigurationManager.truncateIceServers(rtcConfiguration);\n\n return SDK.peerConnectionFactory.value.createPeerConnection(rtcConfiguration);\n }\n\n const newRtcConfiguration = {\n ...optionalPeerConnection.getConfiguration(),\n ...rtcConfiguration\n };\n\n optionalPeerConnection.setConfiguration(newRtcConfiguration);\n\n return optionalPeerConnection;\n }\n\n private reconnectPeerConnection(streamId: string, peerConnection: IPeerConnection, retryCallback: () => void): void {\n if (!SDK.applicationActivityMonitor!.isForeground.value) {\n this._logger.debug('[%s] Skipping peerConnection reconnection attempt while not in foreground (peerConnection state [%s])', streamId, peerConnection.iceConnectionState);\n\n return;\n }\n\n if (peerConnection.iceConnectionState === 'closed') {\n return;\n }\n\n switch (this._channelContext.state.value) {\n case ChannelState.Paused:\n case ChannelState.Stopped:\n case ChannelState.Unauthorized:\n case ChannelState.GeoRestricted:\n case ChannelState.GeoBlocked:\n case ChannelState.UnsupportedFeature:\n case ChannelState.ConfigurationError:\n this._logger.debug('[%s] Skipping peerConnection reconnection in deliberately-terminal state [%s]', streamId, ChannelState[this._channelContext.state.value]);\n\n return;\n default:\n break;\n }\n\n this._channelContext.state.value = ChannelState.Reconnecting;\n\n if (this._peerConnectionContext.peerConnectionReconnectAttempts < SDK.maximalNumberOfPeerConnectionReconnectAttempts || !SDK.automaticallyReconnectPeerConnection) {\n this._peerConnectionContext.peerConnectionReconnectAttempts++;\n\n const isClientOfferFlow = peerConnection.currentLocalDescription?.type === 'offer';\n\n if (FeatureEnablement.clientOfferDisabled ||\n !peerConnection.supportsSetConfiguration ||\n !peerConnection.supportsGetConfiguration ||\n !isClientOfferFlow\n ) {\n return;\n }\n\n this._logger.info('Reconnecting peer connection by restarting ICE');\n\n const currentLocalDescription = peerConnection.currentLocalDescription;\n const ignored = peerConnection.createOffer({iceRestart: true}).then(offer => {\n return peerConnection.setLocalDescription(offer).then(() => {\n return peerConnection.setLocalDescription(currentLocalDescription);\n });\n })\n .catch(e => {\n this._logger.error('Failed to reconnect peer connection', e);\n this._peerConnectionContext.peerConnectionReconnectAttempts = 0;\n retryCallback();\n });\n\n return;\n }\n\n this._logger.info('Failed to reconnect peer connection after [%s] attempts, performing full recovery', this._peerConnectionContext.peerConnectionReconnectAttempts);\n this._peerConnectionContext.peerConnectionReconnectAttempts = 0;\n retryCallback();\n }\n\n isStreamHealthy(): Promise<boolean> {\n const videoElement = this._channelContext.videoElement.value;\n\n if (!videoElement) {\n return Promise.resolve(false);\n }\n\n const mediaStream = this._peerConnectionContext.mediaStream.value;\n const hasActiveTracks = mediaStream?.getTracks().some(track => track.readyState === 'live') ?? false;\n\n if (videoElement.paused || !hasActiveTracks) {\n return Promise.resolve(false);\n }\n\n return VideoFrameDetector.isRenderingFrames(videoElement);\n }\n\n dispose(): void {\n this._disposables.dispose();\n }\n\n private mapSetRemoteDescriptionStatusToChannelStatus(status: SetRemoteDescriptionStatus): ChannelState {\n switch (status) {\n case 'ok':\n return ChannelState.Starting;\n case 'unauthorized':\n return ChannelState.Unauthorized;\n case 'not-found':\n case 'capacity':\n case 'rate-limited':\n case 'timeout':\n return ChannelState.Recovering;\n case 'failed':\n return ChannelState.Error;\n default:\n assertUnreachable(status);\n }\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport {IStreamSubscriber} from './IStreamSubscriber';\nimport EdgeAuthParser from '../../edgeAuth/EdgeAuthParser';\nimport ChunkedStreamSubscriber from './ChunkedStreamSubscriber';\nimport RealTimeStreamSubscriber from './RealTimeStreamSubscriber';\nimport ChunkedStreamPlaybackMode from './ChunkedStreamPlaybackMode';\nimport ChannelContext from '../context/ChannelContext';\nimport PeerConnectionContext from '../context/PeerConnectionContext';\nimport StreamTransformContext from '../context/StreamTransformContext';\nimport FrameTimingInformationContext from '../context/FrameTimingInformationContext';\n\nexport default class StreamSubscriberFactory {\n static create(token: string, channelContext: ChannelContext, peerConnectionContext: PeerConnectionContext, streamTransformContext: StreamTransformContext, frameTimingInformationContext: FrameTimingInformationContext, handleStreamFailure: () => Promise<void>): IStreamSubscriber {\n const tokenCapabilities = EdgeAuthParser.parseToken(token).capabilities;\n const hasStreaming = tokenCapabilities.includes('streaming');\n const hasOnDemand = tokenCapabilities.includes('on-demand');\n\n if (hasStreaming || hasOnDemand) {\n return new ChunkedStreamSubscriber(channelContext, !hasOnDemand ? ChunkedStreamPlaybackMode.Live : ChunkedStreamPlaybackMode.OndDemand, handleStreamFailure);\n }\n\n return new RealTimeStreamSubscriber(channelContext, peerConnectionContext, streamTransformContext, frameTimingInformationContext, handleStreamFailure);\n }\n\n constructor() {\n throw new Error('StreamSubscriberFactory is a static class that may not be instantiated');\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport GlobalScope from '../../globalScope/GlobalScope';\nimport LoggerFactory from '../../logger/LoggerFactory';\nimport ReadOnlySubject from '../../rx/ReadOnlySubject';\nimport Dimension from '../../video/Dimension';\nimport ExponentialBackoff from '../../time/ExponentialBackoff';\nimport EndPoint, {IStream} from '../discovery/EndPoint';\nimport {IOnRealTimeSubscribeRequestCallback} from './IOnRealTimeSubscribeRequestCallback';\nimport {IOnRealTimeSubscribeResponseCallback} from './IOnRealTimeSubscribeResponseCallback';\nimport SDK from '../SDK';\nimport GarbageCollectorManager from '../../dom/GarbageCollectorManager';\nimport IPeerConnection from '../../rtc/IPeerConnection';\nimport {IChannel} from './IChannel';\nimport ChannelState from './ChannelState';\nimport assertUnreachable from '../../lang/assertUnreachable';\nimport Disposable from '../../lang/Disposable';\nimport {ILogger} from '../../logger/LoggerInterface';\nimport VideoTelemetry from '../../video/VideoTelemetry';\nimport SessionTelemetry from '../../video/SessionTelemetry';\nimport {IRtcMonitorStatistic} from '../../rtc/RtcConnectionMonitor';\nimport {BitrateMode, BitrateState} from '../api/SetTemporaryMaximalBitrate';\nimport EdgeAuthParser from '../../edgeAuth/EdgeAuthParser';\nimport {EncodedEdgeToken} from '../../edgeAuth/EncodedEdgeToken';\nimport {BitsPerSecond, Millisecond} from '../../units/Units';\nimport TokenContext from '../context/TokenContext';\nimport ChannelContext, {ChannelContextOptions} from '../context/ChannelContext';\nimport EncodedStreamSink, {IEncodedStreamSink} from '../transformation/EncodedStreamSink';\nimport StreamTrackTransform, {IStreamTrackTransform} from '../transformation/StreamTrackTransform';\nimport StreamTransformContext, {StreamTransformContextOptions} from '../context/StreamTransformContext';\nimport PeerConnectionContext from '../context/PeerConnectionContext';\nimport StateContext from '../context/StateContext';\nimport FrameTimingInformationContext from '../context/FrameTimingInformationContext';\nimport {DecodedFrameTimingInformation, RenderedFrameTimingInformation} from '../frameTiming/FrameTimingInformation';\nimport {IStreamSubscriber} from '../streaming/IStreamSubscriber';\nimport StreamSubscriberFactory from '../streaming/StreamSubscriberFactory';\nimport Discovery from '../discovery/Discovery';\nimport DiscoveryUri from '../discovery/DiscoveryUri';\nimport MetricsFactory from '../../metrics/MetricsFactory';\nimport MetricsService from '../../metrics/MetricsService';\nimport FeatureEnablement from '../../environment/FeatureEnablement';\n\nconst defaultStreamTerminationReason = 'client:termination';\nconst foregroundRestartReasonBackgroundTimeout = 'client:foregrounded:background-timeout';\nconst foregroundRestartReasonUnhealthy = 'client:foregrounded:unhealthy';\nconst failureCountCleanUpIntervalInMilliseconds = 3000;\nconst standbyPollingIntervalInMilliseconds = 15000;\nconst backgroundRecoveryFailsafeIntervalInMilliseconds = 5000;\nconst streamDeletionThresholdInMilliseconds = 30000;\n\nexport type ChannelOptions = {\n targetLag?: Millisecond;\n videoStreamTransformCallback?: IStreamTrackTransform<VideoFrame>;\n audioStreamTransformCallback?: IStreamTrackTransform<AudioData>;\n encodedVideoStreamSink?: IEncodedStreamSink<RTCEncodedVideoFrame>;\n encodedAudioStreamSink?: IEncodedStreamSink<RTCEncodedAudioFrame>;\n onRealTimeSubscribeRequestCallback?: IOnRealTimeSubscribeRequestCallback;\n onRealTimeSubscribeResponseCallback?: IOnRealTimeSubscribeResponseCallback;\n};\n\nexport default class Channel implements IChannel {\n private readonly _logger: ILogger = LoggerFactory.getLogger('Channel');\n private readonly _tokenContext: TokenContext;\n private readonly _channelContext: ChannelContext;\n private readonly _peerConnectionContext: PeerConnectionContext;\n private readonly _streamTransformContext: StreamTransformContext;\n private readonly _stateContext: StateContext;\n private readonly _frameTimingInformationContext: FrameTimingInformationContext;\n private readonly _exponentialBackoff: ExponentialBackoff;\n private readonly _channelStartTime: number;\n private readonly _readOnlyPeerConnection: ReadOnlySubject<IPeerConnection | null>;\n private readonly _readOnlyState: ReadOnlySubject<ChannelState>;\n private readonly _readOnlyExists: ReadOnlySubject<boolean | null>;\n private readonly _readOnlyAutoMuted: ReadOnlySubject<boolean>;\n private readonly _readOnlyAutoPaused: ReadOnlySubject<boolean>;\n private readonly _readOnlyTokenExpiring: ReadOnlySubject<boolean>;\n private readonly _readOnlyAuthorized: ReadOnlySubject<boolean>;\n private readonly _readOnlyOnline: ReadOnlySubject<boolean>;\n private readonly _readOnlyLoading: ReadOnlySubject<boolean>;\n private readonly _readOnlyPlaying: ReadOnlySubject<boolean>;\n private readonly _readOnlyStandby: ReadOnlySubject<boolean>;\n private readonly _readOnlyStopped: ReadOnlySubject<boolean>;\n private readonly _readOnlyTargetLag: ReadOnlySubject<Millisecond>;\n private readonly _readOnlyLag: ReadOnlySubject<number | undefined>;\n private readonly _readOnlyBitrateLimit: ReadOnlySubject<BitsPerSecond>;\n private readonly _readOnlyResolution: ReadOnlySubject<Dimension>;\n private readonly _readOnlyFailureCount: ReadOnlySubject<number>;\n private readonly _readOnlyEndPoint: ReadOnlySubject<EndPoint | null>;\n private readonly _readOnlyStream: ReadOnlySubject<IStream | null>;\n private readonly _readOnlyRtcStatistics: ReadOnlySubject<IRtcMonitorStatistic | null>;\n private readonly _readOnlyMediaStream: ReadOnlySubject<MediaStream | null>;\n private readonly _readOnlyIsFrameTimingInformationEnabled: ReadOnlySubject<boolean>;\n private readonly _readOnlyDecodedFrameTimingInformation: ReadOnlySubject<DecodedFrameTimingInformation | null>;\n private readonly _readOnlyRenderedFrameTimingInformation: ReadOnlySubject<RenderedFrameTimingInformation | null>;\n\n private _metricsService: MetricsService;\n private _streamSubscriber: IStreamSubscriber | null = null;\n private readonly _sessionTelemetry: SessionTelemetry;\n private readonly _videoMetaDataChangedHandler: () => void;\n\n constructor(videoElement: HTMLVideoElement, token: EncodedEdgeToken, options?: ChannelOptions) {\n const edgeToken = EdgeAuthParser.parseToken(token);\n const channelContextOptions: ChannelContextOptions = {\n targetLag: options?.targetLag,\n onRealTimeSubscribeRequestCallback: options?.onRealTimeSubscribeRequestCallback,\n onRealTimeSubscribeResponseCallback: options?.onRealTimeSubscribeResponseCallback\n };\n const streamTransformContextOptions: StreamTransformContextOptions = {\n hasInsertableStreams: edgeToken.capabilities.includes('insertable-streams'),\n hasEncodedInsertableStreams: edgeToken.capabilities.includes('encoded-insertable-streams'),\n videoStreamTransformCallback: options?.videoStreamTransformCallback,\n audioStreamTransformCallback: options?.audioStreamTransformCallback,\n encodedVideoStreamSink: options?.encodedVideoStreamSink,\n encodedAudioStreamSink: options?.encodedAudioStreamSink\n };\n\n this._tokenContext = new TokenContext(token);\n this._channelContext = new ChannelContext(channelContextOptions);\n this._peerConnectionContext = new PeerConnectionContext();\n this._streamTransformContext = new StreamTransformContext(streamTransformContextOptions);\n this._stateContext = new StateContext();\n this._exponentialBackoff = new ExponentialBackoff();\n this._channelStartTime = Date.now();\n this._readOnlyPeerConnection = new ReadOnlySubject<IPeerConnection | null>(this._peerConnectionContext.peerConnection);\n this._readOnlyState = new ReadOnlySubject<ChannelState>(this._channelContext.state);\n this._readOnlyExists = new ReadOnlySubject<boolean | null>(this._channelContext.exists);\n this._readOnlyAutoMuted = new ReadOnlySubject<boolean>(this._channelContext.autoMuted);\n this._readOnlyAutoPaused = new ReadOnlySubject<boolean>(this._channelContext.autoPaused);\n this._readOnlyTokenExpiring = new ReadOnlySubject<boolean>(this._tokenContext.tokenExpiring);\n this._readOnlyAuthorized = new ReadOnlySubject<boolean>(this._channelContext.authorized);\n this._readOnlyOnline = new ReadOnlySubject<boolean>(this._channelContext.online);\n this._readOnlyLoading = new ReadOnlySubject<boolean>(this._channelContext.loading);\n this._readOnlyPlaying = new ReadOnlySubject<boolean>(this._channelContext.playing);\n this._readOnlyStandby = new ReadOnlySubject<boolean>(this._channelContext.standby);\n this._readOnlyStopped = new ReadOnlySubject<boolean>(this._channelContext.stopped);\n this._readOnlyTargetLag = new ReadOnlySubject<number>(this._channelContext.targetLag);\n this._readOnlyLag = new ReadOnlySubject<number | undefined>(this._channelContext.lag);\n this._readOnlyBitrateLimit = new ReadOnlySubject<BitsPerSecond>(this._channelContext.bitrateLimit);\n this._readOnlyResolution = new ReadOnlySubject<Dimension>(this._channelContext.resolution);\n this._readOnlyFailureCount = new ReadOnlySubject<number>(this._channelContext.failureCount);\n this._readOnlyEndPoint = new ReadOnlySubject<EndPoint | null>(this._channelContext.endPoint);\n this._readOnlyStream = new ReadOnlySubject<IStream | null>(this._channelContext.stream);\n this._readOnlyRtcStatistics = new ReadOnlySubject<IRtcMonitorStatistic | null>(this._channelContext.rtcStatistics);\n this._readOnlyMediaStream = new ReadOnlySubject<MediaStream | null>(this._peerConnectionContext.mediaStream);\n\n const discoveryUri = (edgeToken.uri || SDK.discoveryUri.value).toString();\n\n SDK.tenancy.value = edgeToken.tenancy || SDK.tenancy.value;\n DiscoveryUri.uri.value = discoveryUri;\n this._metricsService = MetricsFactory.getMetricsService(discoveryUri);\n this._sessionTelemetry = new SessionTelemetry(SDK.pageLoadTime, this._metricsService);\n this._channelContext.channelDisposables.add(this._sessionTelemetry);\n this._videoMetaDataChangedHandler = this.handleVideoMetaDataChanged.bind(this);\n this.videoElement = videoElement;\n\n this._frameTimingInformationContext = new FrameTimingInformationContext();\n this.configureFrameTimingInformation(edgeToken.capabilities);\n this._readOnlyIsFrameTimingInformationEnabled = new ReadOnlySubject<boolean>(this._frameTimingInformationContext.isEnabled);\n this._readOnlyDecodedFrameTimingInformation = new ReadOnlySubject<DecodedFrameTimingInformation | null>(this._frameTimingInformationContext.decodedFrameTimingInformation);\n this._readOnlyRenderedFrameTimingInformation = new ReadOnlySubject<RenderedFrameTimingInformation | null>(this._frameTimingInformationContext.renderedFrameTimingInformation);\n\n this._channelContext.channelDisposables.add(\n this._channelContext.videoElement.subscribe(videoElement => {\n this._channelContext.rendererDisposables.dispose();\n\n if (!videoElement) {\n return;\n }\n\n this._channelContext.rendererDisposables.add(this._channelContext.stream.subscribe(stream => {\n if (this._channelContext.videoTelemetry) {\n this._channelContext.videoTelemetry.dispose();\n }\n\n if (!stream) {\n return;\n }\n\n if (!this.videoElement) {\n return;\n }\n\n if (this.videoElement.dataset) {\n this.videoElement.dataset.sessionId = SDK.clientSessionId;\n this.videoElement.dataset.streamId = this.streamId;\n }\n\n this._channelContext.videoTelemetry = new VideoTelemetry(this.streamId, SDK.pageLoadTime, this._channelStartTime, this._metricsService);\n this._channelContext.videoTelemetry.setupListenerForTimeToFirstTime(this.videoElement);\n this._channelContext.videoTelemetry.setupListenerForRebuffering(this.videoElement);\n\n if (this._channelContext.state.value === ChannelState.Stopped) {\n const ignored = this.restartAfterStop();\n }\n }));\n\n this._channelContext.channelDisposables.add(this._channelContext.rendererDisposables);\n }));\n this._channelContext.channelDisposables.add(\n this._channelContext.state.subscribe(state => {\n if (this._channelContext.clearFailureCountTimeout) {\n GlobalScope.value.clearTimeout(this._channelContext.clearFailureCountTimeout);\n }\n\n if (!this._channelContext.failureCount.value) {\n return;\n }\n\n if (state !== ChannelState.Playing) {\n return;\n }\n\n this._channelContext.clearFailureCountTimeout = GlobalScope.value.setTimeout(() => {\n this._channelContext.failureCount.value = 0;\n }, failureCountCleanUpIntervalInMilliseconds);\n }));\n this._channelContext.channelDisposables.add(\n this._channelContext.resolution.subscribe(resolution => {\n if (this._channelContext.videoTelemetry) {\n this._channelContext.videoTelemetry.onVideoResolutionChanges(resolution.toString());\n }\n }));\n this._channelContext.channelDisposables.add(\n this._channelContext.bitrateLimit.subscribe(bitrateLimit => {\n if (bitrateLimit && this._channelContext.endPoint.value && this._channelContext.stream.value) {\n const elapsedInMilliseconds = Date.now() - this._channelContext.channelInitialization.getTime();\n const ignored = this._channelContext.endPoint.value.limitBitrate(\n this._channelContext.stream.value,\n elapsedInMilliseconds,\n bitrateLimit,\n BitrateState.Keep,\n BitrateMode.Normal\n )\n .catch(e => {\n this._logger.error('Error while setting limit bitrate', e);\n });\n }\n })\n );\n\n const destroyStreamOnUnmount = () => {\n if (this._channelContext.stream.value && this._channelContext.endPoint.value) {\n const ignored = this._channelContext.endPoint.value.destroyStreamOnUnmount(this._channelContext.stream.value, 'client:termination-on-window-unload');\n }\n };\n\n GlobalScope.value.addWindowEventListener('beforeunload', destroyStreamOnUnmount);\n\n this._channelContext.channelDisposables.add(new Disposable(() => {\n GlobalScope.value.removeWindowEventListener('beforeunload', destroyStreamOnUnmount);\n }));\n\n this.start();\n\n if (SDK.automaticRetryOnFailure) {\n // SDK.initialize() guarantees applicationActivityMonitor is created before any Channel can be instantiated\n this._channelContext.channelDisposables.add(\n SDK.applicationActivityMonitor!.isForeground.subscribe(isForeground => {\n if (!isForeground) {\n return;\n }\n\n const lastBackgroundDuration = SDK.applicationActivityMonitor!.getLastBackgroundDuration();\n const shouldForceRestart = FeatureEnablement.isMobile\n && lastBackgroundDuration !== null\n && lastBackgroundDuration > backgroundRecoveryFailsafeIntervalInMilliseconds;\n // Platform destroys streams after 30s of no media data. If the channel is already\n // reconnecting and the tab was backgrounded longer than that threshold, the server-side\n // stream is gone and we must do a full restart rather than waiting for the reconnect.\n const isStreamDeletedByPlatform = this._channelContext.state.value === ChannelState.Reconnecting\n && lastBackgroundDuration !== null\n && lastBackgroundDuration > streamDeletionThresholdInMilliseconds;\n\n if (shouldForceRestart || isStreamDeletedByPlatform) {\n this._logger.info('[%s] Foregrounded after [%s] ms in background, forcing restart', this._channelContext.streamId, lastBackgroundDuration);\n this.restartOnForeground(foregroundRestartReasonBackgroundTimeout);\n\n return;\n }\n\n if (this.isRetryableState()) {\n this.restartOnForeground(foregroundRestartReasonUnhealthy);\n\n return;\n }\n\n // The health check catches streams that are unhealthy while still in Playing state\n // (e.g., video stalled but no state transition yet)\n if (!this._streamSubscriber) {\n return;\n }\n\n const ignored = this.isSubscriberHealthy()\n .then(isHealthy => {\n if (isHealthy) {\n return;\n }\n\n if (this._stateContext.isStarting.value) {\n return;\n }\n\n // Only restart from Playing state — terminal states (Unauthorized, GeoBlocked,\n // Stopped, etc.) should not trigger health-check restarts\n if (this._channelContext.state.value !== ChannelState.Playing) {\n return;\n }\n\n this._channelContext.failureCount.value = 0;\n this._logger.debug('[%s] Reset failureCount to 0 and restarting Channel after returning to foreground', this._channelContext.streamId);\n\n const ignoredStart = this.start();\n })\n .catch(e => {\n this._logger.error('[%s] Unexpected error occurred when checking subscriber health while foregrounding', this._channelContext.streamId, e);\n });\n }));\n }\n }\n\n get videoElement(): HTMLVideoElement | null {\n return this._channelContext.videoElement.value;\n }\n\n set videoElement(videoElement: HTMLVideoElement) {\n if (this._channelContext.videoElement.value) {\n this._channelContext.videoElement.value.removeEventListener('loadeddata', this._videoMetaDataChangedHandler);\n this._channelContext.videoElement.value.removeEventListener('loadedmetadata', this._videoMetaDataChangedHandler);\n this._channelContext.videoElement.value.removeEventListener('resize', this._videoMetaDataChangedHandler);\n\n if (this._channelContext.videoElement.value.dataset) {\n this._channelContext.videoElement.value.dataset.sessionId = '';\n this._channelContext.videoElement.value.dataset.streamId = '';\n }\n\n this._channelContext.rendererDisposables.dispose();\n\n this._channelContext.videoElement.value.pause();\n this._channelContext.videoElement.value.srcObject = null;\n }\n\n this._channelContext.autoMuted.value = false;\n this._channelContext.autoPaused.value = false;\n this._channelContext.loading.value = false;\n this._channelContext.playing.value = false;\n\n if (this._channelContext.state.value !== ChannelState.Initializing) {\n this._channelContext.state.value = ChannelState.Stopped;\n }\n\n this._channelContext.videoElement.value = videoElement;\n\n if (this._channelContext.videoElement.value) {\n this._channelContext.videoElement.value.addEventListener('loadeddata', this._videoMetaDataChangedHandler);\n this._channelContext.videoElement.value.addEventListener('loadedmetadata', this._videoMetaDataChangedHandler);\n this._channelContext.videoElement.value.addEventListener('resize', this._videoMetaDataChangedHandler);\n }\n }\n\n private handleVideoMetaDataChanged(): void {\n const videoElement = this._channelContext.videoElement.value;\n\n if (videoElement) {\n if (this.resolution.value.width !== videoElement.videoWidth || this.resolution.value.height !== videoElement.videoHeight) {\n this._channelContext.resolution.value = new Dimension(videoElement.videoWidth, videoElement.videoHeight);\n }\n } else {\n this._channelContext.resolution.value = Dimension.empty;\n }\n }\n\n get token(): EncodedEdgeToken {\n return this._tokenContext.token.value;\n }\n\n set token(token: EncodedEdgeToken) {\n this._channelContext.disposables.dispose();\n\n this._tokenContext.token.value = token;\n this._tokenContext.tokenExpiring.value = false;\n\n const edgeToken = EdgeAuthParser.parseToken(this._tokenContext.token.value);\n const discoveryUri = (edgeToken.uri || SDK.discoveryUri.value).toString();\n\n SDK.tenancy.value = edgeToken.tenancy || SDK.tenancy.value;\n DiscoveryUri.uri.value = discoveryUri;\n\n this._metricsService = MetricsFactory.getMetricsService(discoveryUri);\n\n this._streamTransformContext.hasInsertableStreams.value = edgeToken.capabilities.includes('insertable-streams');\n this._streamTransformContext.hasEncodedInsertableStreams.value = edgeToken.capabilities.includes('encoded-insertable-streams');\n\n this.configureFrameTimingInformation(edgeToken.capabilities);\n\n this.start();\n }\n\n get peerConnection(): ReadOnlySubject<IPeerConnection | null> {\n return this._readOnlyPeerConnection;\n }\n\n get state(): ReadOnlySubject<ChannelState> {\n return this._readOnlyState;\n }\n\n get exists(): ReadOnlySubject<boolean | null> {\n return this._readOnlyExists;\n }\n\n get autoMuted(): ReadOnlySubject<boolean> {\n return this._readOnlyAutoMuted;\n }\n\n get autoPaused(): ReadOnlySubject<boolean> {\n return this._readOnlyAutoPaused;\n }\n\n get tokenExpiring(): ReadOnlySubject<boolean> {\n return this._readOnlyTokenExpiring;\n }\n\n get authorized(): ReadOnlySubject<boolean> {\n return this._readOnlyAuthorized;\n }\n\n get online(): ReadOnlySubject<boolean> {\n return this._readOnlyOnline;\n }\n\n get loading(): ReadOnlySubject<boolean> {\n return this._readOnlyLoading;\n }\n\n get playing(): ReadOnlySubject<boolean> {\n return this._readOnlyPlaying;\n }\n\n get standby(): ReadOnlySubject<boolean> {\n return this._readOnlyStandby;\n }\n\n get stopped(): ReadOnlySubject<boolean> {\n return this._readOnlyStopped;\n }\n\n get targetLag(): ReadOnlySubject<Millisecond> {\n return this._readOnlyTargetLag;\n }\n\n get lag(): ReadOnlySubject<Millisecond | undefined> {\n return this._readOnlyLag;\n }\n\n get bitrateLimit(): BitsPerSecond {\n return this._readOnlyBitrateLimit.value;\n }\n\n get resolution(): ReadOnlySubject<Dimension> {\n return this._readOnlyResolution;\n }\n\n get failureCount(): ReadOnlySubject<number> {\n return this._readOnlyFailureCount;\n }\n\n get endPoint(): ReadOnlySubject<EndPoint | null> {\n return this._readOnlyEndPoint;\n }\n\n get stream(): ReadOnlySubject<IStream | null> {\n return this._readOnlyStream;\n }\n\n get streamId(): string {\n return this._channelContext.streamId;\n }\n\n get rtcStatistics(): ReadOnlySubject<IRtcMonitorStatistic | null> {\n return this._readOnlyRtcStatistics;\n }\n\n get mediaStream(): ReadOnlySubject<MediaStream | null> {\n return this._readOnlyMediaStream;\n }\n\n get isFrameTimingInformationEnabled(): ReadOnlySubject<boolean> {\n return this._readOnlyIsFrameTimingInformationEnabled;\n }\n\n get decodedFrameTimingInformation(): ReadOnlySubject<DecodedFrameTimingInformation | null> {\n return this._readOnlyDecodedFrameTimingInformation;\n }\n\n get renderedFrameTimingInformation(): ReadOnlySubject<RenderedFrameTimingInformation | null> {\n return this._readOnlyRenderedFrameTimingInformation;\n }\n\n setBitrateLimit(bitrateLimit: BitsPerSecond): void {\n this._channelContext.bitrateLimit.value = bitrateLimit;\n }\n\n clearBitrateLimit(): void {\n if (this._channelContext.bitrateLimit.value && this._channelContext.endPoint.value && this._channelContext.stream.value) {\n const elapsedInMilliseconds = Date.now() - this._channelContext.channelInitialization.getTime();\n const bitrateInBitsPerSecond = 0;\n const ignored = this._channelContext.endPoint.value.limitBitrate(\n this._channelContext.stream.value,\n elapsedInMilliseconds,\n bitrateInBitsPerSecond,\n BitrateState.Keep,\n BitrateMode.Reset\n )\n .then(({status}) => {\n if (status === 'ok') {\n this._channelContext.bitrateLimit.value = 0;\n }\n })\n .catch(e => {\n this._logger.error('Error while setting limit bitrate', e);\n });\n }\n }\n\n updateTargetLag(lag: Millisecond): void {\n this._channelContext.targetLag.value = lag;\n }\n\n async stop(reason: string): Promise<void> {\n return new Promise(resolve => {\n if (!this._stateContext.isStarting.value) {\n this.processStop(reason);\n\n resolve();\n\n return;\n }\n\n this._channelContext.rendererDisposables.add(this._stateContext.isStarting.subscribe(isStarting => {\n if (!isStarting) {\n this.processStop(reason);\n resolve();\n }\n }));\n });\n }\n\n private processStop(reason: string): void {\n if (this._channelContext.videoElement.value) {\n this._channelContext.videoElement.value.pause();\n this._channelContext.videoElement.value.srcObject = null;\n }\n\n this._channelContext.rendererDisposables.dispose();\n\n this.cleanUpResources(reason);\n\n this._channelContext.state.value = ChannelState.Stopped;\n }\n\n async resume(): Promise<void> {\n if (this._peerConnectionContext.mediaStream.value) {\n this._channelContext.autoPaused.value = false;\n\n return this.playMediaStreamInVideoElement(this._peerConnectionContext.mediaStream.value);\n }\n }\n\n mute(): void {\n const videoElement = this._channelContext.videoElement.value;\n\n if (videoElement) {\n videoElement.muted = true;\n }\n }\n\n unmute(): void {\n const videoElement = this._channelContext.videoElement.value;\n\n if (videoElement) {\n videoElement.muted = false;\n this._channelContext.autoMuted.value = false;\n }\n }\n\n async dispose(): Promise<void> {\n return this.stop('client:channel-dispose').then(() => {\n this._channelContext.channelDisposables.dispose();\n this._stateContext.isDisposed = true;\n });\n }\n\n getUri(token: EncodedEdgeToken): URL {\n const url = EdgeAuthParser.parseToken(token).uri;\n\n if (url) {\n return url;\n }\n\n this._logger.info('Fall back to the default discover URI [%s]', SDK.discoveryUri.value);\n\n return new GlobalScope.value.URL(SDK.discoveryUri.value);\n }\n\n async start(): Promise<void> {\n if (this._stateContext.isDisposed) {\n throw new Error('Channel was already disposed');\n }\n\n if (this._stateContext.isStarting.value) {\n this._logger.info('Channel is already starting, skipping start');\n\n return;\n }\n\n this._stateContext.isStarting.value = true;\n\n return this.processStart();\n }\n\n private isRetryableState(): boolean {\n switch (this._channelContext.state.value) {\n case ChannelState.Error:\n case ChannelState.Reconnecting:\n case ChannelState.StandBy:\n case ChannelState.Offline:\n case ChannelState.Recovering:\n case ChannelState.TransientConfigurationError:\n case ChannelState.ConnectionError:\n case ChannelState.ClientStartError:\n return true;\n case ChannelState.Unauthorized:\n case ChannelState.GeoRestricted:\n case ChannelState.GeoBlocked:\n case ChannelState.Stopped:\n case ChannelState.Paused:\n case ChannelState.Initializing:\n case ChannelState.Starting:\n case ChannelState.Playing:\n case ChannelState.UnsupportedFeature:\n case ChannelState.ConfigurationError:\n return false;\n default:\n assertUnreachable(this._channelContext.state.value);\n }\n }\n\n private isSubscriberHealthy(): Promise<boolean> {\n if (!this._streamSubscriber) {\n return Promise.resolve(false);\n }\n\n return this._streamSubscriber.isStreamHealthy();\n }\n\n private restartOnForeground(reason: string): void {\n if (this._stateContext.isStarting.value) {\n this._logger.debug('[%s] Skipping failureCount reset and Channel restart due to Channel already starting', this._channelContext.streamId);\n\n return;\n }\n\n if (!this.isRetryableState()) {\n this._logger.debug('[%s] Skipping failureCount reset and Channel restart due to ChannelState [%s] which is not retryable', this._channelContext.streamId, ChannelState[this._channelContext.state.value]);\n\n return;\n }\n\n this._channelContext.failureCount.value = 0;\n this._logger.debug('[%s] Reset failureCount to 0 and restarting Channel due to [%s]', this._channelContext.streamId, reason);\n\n const ignored = this.start();\n }\n\n private async processStart(): Promise<void> {\n const isRecovery = this._channelContext.state.value !== ChannelState.Initializing;\n\n this._channelContext.state.value = isRecovery ? ChannelState.Recovering : ChannelState.Starting;\n this.cleanUpResources(isRecovery ? 'client:recover' : 'client:start');\n\n const token: EncodedEdgeToken = this._tokenContext.token.value;\n const listenOnStreamSetup = this._sessionTelemetry.listenOnStreamSetup();\n\n if (!EdgeAuthParser.isEncodedEdgeTokenValid(token)) {\n this._logger.error('Failed to parse token [%s]', token);\n this._channelContext.state.value = ChannelState.Unauthorized;\n this._channelContext.authorized.value = false;\n this._stateContext.isStarting.value = false;\n\n return;\n }\n\n if (this._streamTransformContext.videoStreamTransformCallback) {\n const {valid, validationResult} = StreamTrackTransform.validateMediaStreamTrackTransform<VideoFrame>('video', this._streamTransformContext.videoStreamTransformCallback);\n\n if (!valid) {\n this._logger.error(validationResult);\n this._channelContext.state.value = ChannelState.ConfigurationError;\n this._channelContext.authorized.value = false;\n this._stateContext.isStarting.value = false;\n\n return;\n }\n }\n\n if (this._streamTransformContext.audioStreamTransformCallback) {\n const {valid, validationResult} = StreamTrackTransform.validateMediaStreamTrackTransform<AudioData>('audio', this._streamTransformContext.audioStreamTransformCallback);\n\n if (!valid) {\n this._logger.error(validationResult);\n this._channelContext.state.value = ChannelState.ConfigurationError;\n this._channelContext.authorized.value = false;\n this._stateContext.isStarting.value = false;\n\n return;\n }\n }\n\n if (this._streamTransformContext.encodedVideoStreamSink) {\n const {valid, validationResult} = EncodedStreamSink.validateEncodedStreamSink('video', this._streamTransformContext.encodedVideoStreamSink);\n\n if (!valid) {\n this._logger.error(validationResult);\n this._channelContext.state.value = ChannelState.ConfigurationError;\n this._channelContext.authorized.value = false;\n this._stateContext.isStarting.value = false;\n\n return;\n }\n }\n\n if (this._streamTransformContext.encodedAudioStreamSink) {\n const {valid, validationResult} = EncodedStreamSink.validateEncodedStreamSink('audio', this._streamTransformContext.encodedAudioStreamSink);\n\n if (!valid) {\n this._logger.error(validationResult);\n this._channelContext.state.value = ChannelState.ConfigurationError;\n this._channelContext.authorized.value = false;\n this._stateContext.isStarting.value = false;\n\n return;\n }\n }\n\n if (this._streamTransformContext.hasInsertableStreams.value && this._streamTransformContext.hasEncodedInsertableStreams.value) {\n this._logger.error('Both insertable-streams and encoded-insertable-streams are enabled, only use one or the other');\n this._channelContext.state.value = ChannelState.ConfigurationError;\n this._channelContext.authorized.value = false;\n this._stateContext.isStarting.value = false;\n\n return;\n }\n\n const hasTransformStreamCallback = typeof this._streamTransformContext.videoStreamTransformCallback === 'function' || typeof this._streamTransformContext.audioStreamTransformCallback === 'function';\n const hasEncodedStreamSink = typeof this._streamTransformContext.encodedVideoStreamSink === 'function' || typeof this._streamTransformContext.encodedAudioStreamSink === 'function';\n\n if (hasTransformStreamCallback && hasEncodedStreamSink) {\n this._logger.error('Both Media Stream Track transform callback and encodedInsertableStreams sink function found, only use one type or the other');\n this._channelContext.state.value = ChannelState.ConfigurationError;\n this._channelContext.authorized.value = false;\n this._stateContext.isStarting.value = false;\n\n return;\n }\n\n if (this._streamTransformContext.hasInsertableStreams.value) {\n if (!FeatureEnablement.isInsertableStreamsSupported) {\n this._logger.error('Browser does not support Media Stream Track API');\n this._channelContext.state.value = ChannelState.UnsupportedFeature;\n this._channelContext.authorized.value = false;\n this._stateContext.isStarting.value = false;\n\n return;\n }\n\n if (!hasTransformStreamCallback) {\n this._logger.error('CreateChannelOptions transform callback function is missing; however, insertable-streams is enabled');\n this._channelContext.state.value = ChannelState.ConfigurationError;\n this._channelContext.authorized.value = false;\n this._stateContext.isStarting.value = false;\n\n return;\n }\n } else {\n if (hasTransformStreamCallback) {\n this._logger.error(`CreateChannelOptions transform callback function found; however, insertable-streams is not enabled`);\n this._channelContext.state.value = ChannelState.ConfigurationError;\n this._channelContext.authorized.value = false;\n this._stateContext.isStarting.value = false;\n\n return;\n }\n }\n\n if (this._streamTransformContext.hasEncodedInsertableStreams.value) {\n if (!(FeatureEnablement.isEncodedInsertableStreamsSupported || FeatureEnablement.isRTCRtpScriptTransformSupported)) {\n this._logger.error('Browser does not support encodedInsertableStreams API');\n this._channelContext.state.value = ChannelState.UnsupportedFeature;\n this._channelContext.authorized.value = false;\n this._stateContext.isStarting.value = false;\n\n return;\n }\n\n if (!hasEncodedStreamSink) {\n this._logger.error('CreateChannelOptions transform sink function is missing; however, encoded-insertable-streams is enabled');\n this._channelContext.state.value = ChannelState.ConfigurationError;\n this._channelContext.authorized.value = false;\n this._stateContext.isStarting.value = false;\n\n return;\n }\n } else {\n if (hasEncodedStreamSink) {\n this._logger.error(`CreateChannelOptions transform sink function found; however, encoded-insertable-streams is not enabled`);\n this._channelContext.state.value = ChannelState.ConfigurationError;\n this._channelContext.authorized.value = false;\n this._stateContext.isStarting.value = false;\n\n return;\n }\n }\n\n this._channelContext.loading.value = true;\n\n const uri = this.getUri(token);\n\n this._channelContext.disposables.add(\n this._channelContext.state.subscribe(state => {\n if (state === ChannelState.Error || state === ChannelState.Recovering) {\n Discovery.clearCachedClosestEndpoint(uri);\n }\n })\n );\n\n const handleStreamFailureCallback: () => Promise<void> = () => new Promise((resolve): void => {\n if (!this.isRetryableState()) {\n this._logger.debug('[%s] Ignoring stream failure callback due to ChannelState being [%s]', this._channelContext.streamId, ChannelState[this._channelContext.state.value]);\n\n return resolve();\n }\n\n this._stateContext.isStarting.value = false;\n this._channelContext.state.value = ChannelState.ConnectionError;\n\n if (this._channelContext.videoElement.value) {\n this._channelContext.videoElement.value.pause();\n this._channelContext.videoElement.value.srcObject = null;\n }\n\n this._channelContext.playing.value = false;\n this._channelContext.loading.value = true;\n\n if (!SDK.applicationActivityMonitor!.isForeground.value) {\n this._logger.debug('[%s] Deferring stream failure handling to foreground recovery', this._channelContext.streamId);\n\n const timeoutId = GlobalScope.value.setTimeout(() => {\n const ignored = this.handleStreamFailure()\n .catch(e => {\n this._logger.error('Failed handling stream failure', e);\n });\n }, backgroundRecoveryFailsafeIntervalInMilliseconds);\n\n this._channelContext.disposables.add(new Disposable(() => {\n GlobalScope.value.clearTimeout(timeoutId);\n }));\n\n return resolve();\n }\n\n return resolve(this.handleStreamFailure());\n });\n\n this._streamSubscriber = StreamSubscriberFactory.create(token, this._channelContext, this._peerConnectionContext, this._streamTransformContext, this._frameTimingInformationContext, handleStreamFailureCallback);\n\n if (!this._streamSubscriber) {\n this._stateContext.isStarting.value = false;\n\n return;\n }\n\n this._channelContext.rendererDisposables.add(this._streamSubscriber);\n\n return this._streamSubscriber.start(\n uri,\n token,\n listenOnStreamSetup,\n this.playMediaStreamInVideoElement.bind(this))\n .then(() => {\n this._channelContext.loading.value = false;\n })\n .catch(e => {\n listenOnStreamSetup.fail();\n\n this._channelContext.failureCount.value++;\n\n this._channelContext.online.value = false;\n\n this.cleanUpResources('client:cleanup-after-failed-setup');\n\n this._channelContext.state.value = ChannelState.ClientStartError;\n\n this._logger.error('Failed to start channel', e);\n })\n .finally(() => {\n this._stateContext.isStarting.value = false;\n\n if (this._channelContext.state.value === ChannelState.Playing || this._channelContext.state.value === ChannelState.Paused || this._channelContext.state.value === ChannelState.Stopped || !SDK.automaticRetryOnFailure) {\n return;\n }\n\n const timeoutId = GlobalScope.value.setTimeout(() => {\n const ignored = this.handleStreamFailure()\n .catch(e => {\n this._logger.error('Failed handling stream failure', e);\n });\n }, this.getRetryInterval());\n\n this._channelContext.disposables.add(new Disposable(() => {\n GlobalScope.value.clearTimeout(timeoutId);\n }));\n });\n }\n\n private async restartAfterStop(): Promise<void> {\n if (this._stateContext.isDisposed) {\n throw new Error('Channel was already disposed');\n }\n\n if (this._peerConnectionContext.mediaStream.value) {\n return this.playMediaStreamInVideoElement(this._peerConnectionContext.mediaStream.value);\n }\n\n if (this._tokenContext.token.value) {\n const ignored = this.start();\n }\n }\n\n public async play(): Promise<void> {\n const mediaStream = this._peerConnectionContext.mediaStream.value;\n\n if (!mediaStream) {\n return this.start();\n }\n\n return this.playMediaStreamInVideoElement(mediaStream);\n }\n\n private getRetryInterval(): number {\n switch (this._channelContext.state.value) {\n case ChannelState.Initializing:\n case ChannelState.StandBy:\n case ChannelState.Offline:\n return standbyPollingIntervalInMilliseconds;\n case ChannelState.Error:\n case ChannelState.Recovering:\n case ChannelState.Unauthorized:\n case ChannelState.GeoRestricted:\n case ChannelState.GeoBlocked:\n case ChannelState.Stopped:\n case ChannelState.Starting:\n case ChannelState.Playing:\n case ChannelState.Paused:\n case ChannelState.Reconnecting:\n case ChannelState.UnsupportedFeature:\n case ChannelState.ConfigurationError:\n case ChannelState.TransientConfigurationError:\n case ChannelState.ConnectionError:\n case ChannelState.ClientStartError:\n // First and second attempt fast, after that exponential with backoff interval\n return this._exponentialBackoff.getExponentialBackoffIntervalByFailureCount(this._channelContext.failureCount.value);\n default:\n assertUnreachable(this._channelContext.state.value);\n }\n }\n\n private async handleStreamFailure(): Promise<void> {\n switch (this._channelContext.state.value) {\n case ChannelState.Error:\n case ChannelState.Reconnecting:\n case ChannelState.StandBy:\n case ChannelState.Offline:\n case ChannelState.Recovering:\n case ChannelState.TransientConfigurationError:\n case ChannelState.ConnectionError:\n case ChannelState.ClientStartError:\n this._logger.info('Retry start with initial state [%s] [%s]', this._channelContext.state.value, ChannelState[this._channelContext.state.value]);\n\n break;\n case ChannelState.Unauthorized:\n this._logger.info('Channel is unauthorized, skipping retry of start. Please provide a new token and invoke start()');\n\n return;\n case ChannelState.GeoRestricted:\n this._logger.info('Channel is geo restricted, skipping retry of start. Please provide a new token and invoke start()');\n\n return;\n case ChannelState.GeoBlocked:\n this._logger.info('Channel is geo blocked, skipping retry of start. Please provide a new token and invoke start()');\n\n return;\n case ChannelState.Stopped:\n this._logger.info('Channel is stopped, skipping retry of start.');\n\n return;\n case ChannelState.Initializing:\n this._logger.info('Channel is already initializing, skipping retry of start');\n\n return;\n case ChannelState.Playing:\n this._logger.info('Channel is playing, skipping retry of start');\n\n return;\n case ChannelState.Paused:\n this._logger.info('Channel is paused, skipping retry of start. Please invoke play()');\n\n return;\n case ChannelState.Starting:\n this._logger.info('Channel is already starting, skipping retry of start');\n\n return;\n case ChannelState.UnsupportedFeature:\n this._logger.info('Channel is stopped due to unsupported feature, skipping retry of start.');\n\n return;\n case ChannelState.ConfigurationError:\n this._logger.info('Channel is stopped due to configuration error, skipping retry of start.');\n\n return;\n default:\n assertUnreachable(this._channelContext.state.value);\n }\n\n return this.start();\n }\n\n private cleanUpResources(reason: string = defaultStreamTerminationReason): void {\n this._streamSubscriber = null;\n this._channelContext.disposables.dispose();\n\n const peerConnection = this._peerConnectionContext.peerConnection.value;\n\n if (peerConnection) {\n this._peerConnectionContext.peerConnection.value = null;\n peerConnection.close();\n peerConnection.dispose();\n\n if (SDK.forceGarbageCollectionOnRestart && !(FeatureEnablement.isMobile && SDK.skipGarbageCollectionOnMobileDevices)) {\n GarbageCollectorManager.forceGarbageCollection();\n }\n }\n\n if (this._peerConnectionContext.mediaStream.value) {\n this._peerConnectionContext.mediaStream.value.getTracks().forEach(track => track.stop());\n this._peerConnectionContext.mediaStream.value = null;\n }\n\n this._channelContext.autoPaused.value = false;\n this._channelContext.autoMuted.value = false;\n this._channelContext.playing.value = false;\n this._channelContext.stopped.value = true;\n this._channelContext.standby.value = false;\n\n if (this._channelContext.stream.value && this._channelContext.endPoint.value) {\n const ignored = this._channelContext.endPoint.value.destroyStream(this._channelContext.stream.value, reason)\n .then(({status}) => {\n if (status !== 'ok') {\n this._logger.warn('[%s] Failed to destroy stream with reason [%s]', this.streamId, status);\n\n return;\n }\n\n this._logger.info('[%s] Destroyed stream with reason [%s]', this.streamId, status);\n })\n .catch(e => {\n this._logger.error('[%s] Failed to destroy stream', this.streamId, e);\n });\n }\n\n if (this.videoElement && this.videoElement.dataset) {\n this.videoElement.dataset.sessionId = '';\n this.videoElement.dataset.streamId = '';\n }\n\n this._channelContext.stream.value = null;\n this._channelContext.endPoint.value = null;\n this._peerConnectionContext.peerConnectionReconnectAttempts = 0;\n }\n\n private configureFrameTimingInformation(capabilities: string[]): void {\n const frameTimingInformationCapability = capabilities.find(capability => capability.startsWith('frame-timing-information='));\n\n this._frameTimingInformationContext.shouldExtractTimecode.value = false;\n this._frameTimingInformationContext.shouldExtractTimestamps.value = false;\n this._frameTimingInformationContext.isEnabled.value = false;\n\n if (!frameTimingInformationCapability) {\n this._logger.info('Disabling frame timing information as no capability was found');\n\n return;\n }\n\n if (!FeatureEnablement.isChannelFrameTimingInformationSupported) {\n this._logger.info('Disabling frame timing information as the environment does not support it [%s]', frameTimingInformationCapability);\n\n return;\n }\n\n frameTimingInformationCapability.split('=')[1]\n .split(',')\n .map(option => option.trim())\n .forEach(option => {\n switch (option) {\n case 'timecode':\n this._frameTimingInformationContext.shouldExtractTimecode.value = true;\n\n break;\n case 'timestamps':\n this._frameTimingInformationContext.shouldExtractTimestamps.value = true;\n\n break;\n default:\n this._logger.info('Ignoring unknown frame timing information option [%s]', option);\n\n break;\n }\n });\n\n this._logger.info('Frame timing information configuration [(timecode [%s], timestamps [%s])]', this._frameTimingInformationContext.shouldExtractTimecode.value, this._frameTimingInformationContext.shouldExtractTimestamps.value);\n }\n\n private async playMediaStreamInVideoElement(mediaStream: MediaStream): Promise<void> {\n const videoElement = this._channelContext.videoElement.value;\n\n if (!videoElement) {\n this._channelContext.autoMuted.value = false;\n this._channelContext.autoPaused.value = false;\n this._channelContext.loading.value = false;\n this._channelContext.playing.value = false;\n this._channelContext.state.value = ChannelState.Stopped;\n\n return;\n }\n\n if (!this._streamTransformContext.hasEncodedInsertableStreams.value) {\n videoElement.srcObject = mediaStream;\n }\n\n const playPromise = videoElement.play();\n\n if (playPromise === undefined) {\n this._channelContext.autoMuted.value = false;\n this._channelContext.autoPaused.value = false;\n this._channelContext.loading.value = false;\n this._channelContext.playing.value = true;\n this._channelContext.state.value = ChannelState.Playing;\n\n return;\n }\n\n return playPromise.then(() => {\n this._channelContext.autoMuted.value = false;\n this._channelContext.autoPaused.value = false;\n this._channelContext.loading.value = false;\n this._channelContext.playing.value = true;\n this._channelContext.state.value = ChannelState.Playing;\n }).catch(e => {\n const hasAudioTrack = !!mediaStream.getTracks().filter(track => {\n return track.kind === 'audio';\n }).length;\n const automaticallyMuteVideoOnPlayFailureOff = !SDK.automaticallyMuteVideoOnPlayFailure;\n\n if (automaticallyMuteVideoOnPlayFailureOff || videoElement.muted || !hasAudioTrack) {\n videoElement.srcObject = null;\n this._channelContext.autoMuted.value = false;\n this._channelContext.autoPaused.value = true;\n this._channelContext.loading.value = false;\n this._channelContext.playing.value = false;\n this._channelContext.state.value = ChannelState.Paused;\n\n if (automaticallyMuteVideoOnPlayFailureOff) {\n this._logger.info('[%s] Paused video after play failed. Manual user action required.', this.streamId, e);\n\n return;\n }\n\n if (hasAudioTrack) {\n this._logger.info('[%s] Failed to play video. Manual user action required.', this.streamId, e);\n\n return;\n }\n\n this._logger.info('[%s] Failed to play muted video. Manual user action required.', this.streamId, e);\n\n return;\n }\n\n videoElement.muted = true;\n\n return videoElement.play()\n .then(() => {\n this._logger.info('[%s] Played video after auto muting. Manual user action required to unmute.', this.streamId);\n\n this._channelContext.autoMuted.value = true;\n this._channelContext.autoPaused.value = false;\n this._channelContext.loading.value = false;\n this._channelContext.playing.value = true;\n this._channelContext.state.value = ChannelState.Playing;\n }).catch(e => {\n videoElement.muted = false;\n\n this._logger.info('[%s] Failed to play video. Manual user action required.', this.streamId, e);\n\n videoElement.srcObject = null;\n this._channelContext.autoMuted.value = false;\n this._channelContext.autoPaused.value = true;\n this._channelContext.loading.value = false;\n this._channelContext.playing.value = false;\n this._channelContext.state.value = ChannelState.Paused;\n });\n });\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport {Millisecond} from '../../units/Units';\nimport {EncodedEdgeToken} from '../../edgeAuth/EncodedEdgeToken';\nimport FeatureEnablement from '../../environment/FeatureEnablement';\nimport SDK from '../SDK';\nimport {IEncodedStreamSink} from '../transformation/EncodedStreamSink';\nimport {IStreamTrackTransform} from '../transformation/StreamTrackTransform';\nimport Channel, {ChannelOptions} from './Channel';\nimport {IOnRealTimeSubscribeRequestCallback} from './IOnRealTimeSubscribeRequestCallback';\nimport {IOnRealTimeSubscribeResponseCallback} from './IOnRealTimeSubscribeResponseCallback';\n\nexport type CreateChannelOptions = {\n videoElement: HTMLVideoElement;\n token: EncodedEdgeToken;\n targetLag?: Millisecond;\n videoStreamTransformCallback?: IStreamTrackTransform<VideoFrame>;\n audioStreamTransformCallback?: IStreamTrackTransform<AudioData>;\n encodedVideoStreamSink?: IEncodedStreamSink<RTCEncodedVideoFrame>;\n encodedAudioStreamSink?: IEncodedStreamSink<RTCEncodedAudioFrame>;\n};\n\nexport default class Channels {\n static createChannel(options: CreateChannelOptions): Channel {\n if (!SDK.initialized.value) {\n throw new Error('SDK is not loaded.');\n }\n\n const channelOptions: ChannelOptions = {\n targetLag: options.targetLag,\n videoStreamTransformCallback: options.videoStreamTransformCallback,\n audioStreamTransformCallback: options.audioStreamTransformCallback,\n encodedVideoStreamSink: options.encodedVideoStreamSink,\n encodedAudioStreamSink: options.encodedAudioStreamSink\n };\n const optionsWithRealTimeSubscribeCallbacks: ChannelOptions & {\n onRealTimeSubscribeRequestCallback?: IOnRealTimeSubscribeRequestCallback;\n onRealTimeSubscribeResponseCallback?: IOnRealTimeSubscribeResponseCallback;\n } = options;\n\n if (optionsWithRealTimeSubscribeCallbacks.onRealTimeSubscribeRequestCallback) {\n channelOptions.onRealTimeSubscribeRequestCallback = optionsWithRealTimeSubscribeCallbacks.onRealTimeSubscribeRequestCallback;\n }\n\n if (optionsWithRealTimeSubscribeCallbacks.onRealTimeSubscribeResponseCallback) {\n channelOptions.onRealTimeSubscribeResponseCallback = optionsWithRealTimeSubscribeCallbacks.onRealTimeSubscribeResponseCallback;\n }\n\n return new Channel(options.videoElement, options.token, channelOptions);\n }\n\n public static get isFrameTimingInformationSupported(): boolean {\n return FeatureEnablement.isChannelFrameTimingInformationSupported;\n }\n\n private constructor() {\n throw new Error('Channels is a static class that may not be instantiated');\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nenum PublisherState {\n Initializing = 0,\n Offline = 1,\n Starting = 2,\n Publishing = 3,\n Recovering = 4,\n Reconnecting = 5,\n Stopped = 6,\n Unauthorized = 7,\n GeoRestricted = 8,\n GeoBlocked = 9,\n UnsupportedFeature = 10,\n NotFound = 11,\n ConfigurationError = 12,\n TransientConfigurationError = 13,\n ConnectionError = 14,\n ClientStartError = 15,\n Error = 16\n}\n\nexport default PublisherState;","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport Subject from '../../rx/Subject';\nimport PublisherState from './PublisherState';\nimport EndPoint, {\n IStream,\n AddIceCandidatesStatus,\n SetRemoteDescriptionStatus\n} from '../discovery/EndPoint';\nimport assertUnreachable from '../../lang/assertUnreachable';\nimport Strings from '../../lang/Strings';\nimport DisposableList from '../../lang/DisposableList';\nimport {IRtcPublishMonitorStatistic} from '../../rtc/RtcPublishMonitor';\nimport {PublishStatus} from '../api/Publish';\n\nexport default class PublisherContext {\n publisherInitialization: Date;\n disposables: DisposableList;\n publisherDisposables: DisposableList;\n state: Subject<PublisherState>;\n authorized: Subject<boolean>;\n online: Subject<boolean>;\n loading: Subject<boolean>;\n publishing: Subject<boolean>;\n standby: Subject<boolean>;\n stopped: Subject<boolean>;\n failureCount: Subject<number>;\n endPoint: Subject<EndPoint | null>;\n stream: Subject<IStream | null>;\n rtcStatistics: Subject<IRtcPublishMonitorStatistic | null>;\n clearFailureCountTimeout: number;\n startReconnectionAttemptsTimeInMilliseconds: number;\n name: string;\n\n constructor(name?: string) {\n this.disposables = new DisposableList();\n this.publisherDisposables = new DisposableList();\n this.publisherInitialization = new Date();\n this.state = new Subject<PublisherState>(PublisherState.Initializing);\n this.authorized = new Subject<boolean>(true);\n this.online = new Subject<boolean>(true);\n this.loading = new Subject<boolean>(false);\n this.publishing = new Subject<boolean>(false);\n this.standby = new Subject<boolean>(false);\n this.stopped = new Subject<boolean>(false);\n this.failureCount = new Subject<number>(0);\n this.endPoint = new Subject<EndPoint | null>(null);\n this.stream = new Subject<IStream | null>(null);\n this.rtcStatistics = new Subject<IRtcPublishMonitorStatistic | null>(null);\n this.clearFailureCountTimeout = 0;\n this.name = name && name.length ? name : this.generateScreenName();\n this.startReconnectionAttemptsTimeInMilliseconds = 0;\n }\n\n get streamId(): string {\n const stream = this.stream.value;\n\n if (!stream) {\n return '-';\n }\n\n return stream.streamId;\n }\n\n applyPublishStatus(status: PublishStatus): void {\n switch (status) {\n case 'ok':\n return;\n case 'unauthorized':\n case 'geo-restricted':\n case 'geo-blocked':\n this.applyUnauthorized();\n\n return;\n case 'not-found':\n this.applyNotFound();\n\n return;\n default:\n this.applyUnhandledError();\n\n return;\n }\n }\n\n applySetRemoteDescriptionStatus(status: SetRemoteDescriptionStatus): void {\n switch (status) {\n case 'ok':\n return;\n case 'unauthorized':\n this.applyUnauthorized();\n\n return;\n case 'not-found':\n this.applyNotFound();\n\n return;\n default:\n this.applyUnhandledError();\n\n return;\n }\n }\n\n applyAddIceCandidatesStatus(status: AddIceCandidatesStatus): void {\n switch (status) {\n case 'ok':\n return;\n case 'unauthorized':\n this.applyUnauthorized();\n\n return;\n case 'not-found':\n this.applyNotFound();\n\n return;\n default:\n this.applyUnhandledError();\n\n return;\n }\n }\n\n mapPublishStatusToPublisherStatus(status: PublishStatus): PublisherState {\n switch (status) {\n case 'ok':\n return PublisherState.Starting;\n case 'not-found':\n return PublisherState.NotFound;\n case 'geo-restricted':\n return PublisherState.GeoRestricted;\n case 'geo-blocked':\n return PublisherState.GeoBlocked;\n case 'unauthorized':\n return PublisherState.Unauthorized;\n case 'capacity':\n case 'rate-limited':\n case 'timeout':\n return PublisherState.Recovering;\n case 'missing-channel-or-room-id':\n case 'forbidden-tag':\n return PublisherState.ConfigurationError;\n case 'port-in-range-not-found':\n return PublisherState.TransientConfigurationError;\n case 'failed':\n return PublisherState.Error;\n default:\n assertUnreachable(status);\n }\n }\n\n applyUnhandledError(): void {\n this.failureCount.value++;\n this.publishing.value = false;\n this.standby.value = true;\n this.stopped.value = false;\n this.stream.value = null;\n }\n\n applyUnauthorized(): void {\n this.authorized.value = false;\n this.failureCount.value = 0;\n this.publishing.value = false;\n this.standby.value = true;\n this.stopped.value = false;\n this.stream.value = null;\n }\n\n applyNotFound(): void {\n this.failureCount.value = 0;\n this.publishing.value = false;\n this.standby.value = true;\n this.stopped.value = false;\n this.stream.value = null;\n }\n\n private generateScreenName(): string {\n return Strings.random(12);\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport GlobalScope from '../globalScope/GlobalScope';\nimport IDisposable from '../lang/IDisposable';\nimport DisposableList from '../lang/DisposableList';\nimport FeatureEnablement from '../environment/FeatureEnablement';\nimport LoggerFactory from '../logger/LoggerFactory';\nimport {ILogger} from '../logger/LoggerInterface';\nimport Subject from '../rx/Subject';\nimport ReadOnlySubject from '../rx/ReadOnlySubject';\nimport IPeerConnection from './IPeerConnection';\nimport SdpParser from './SdpParser';\n\nexport interface IRtcPublishMonitorStatistic {\n [kind: string]: IRtcPublishStatistic;\n}\n\nexport interface ILegacyRTCStatsReport {\n result: () => ILegacyRTCStatsReportItem[];\n}\n\nexport interface ILegacyRTCStatsReportItem extends RTCStatsReport {\n type: string;\n names: () => string[];\n stat: (name: string) => number;\n}\n\nexport interface IRtcPublishStatistic {\n lastPacketSentTimestamp?: number;\n ssrc: string;\n mediaType: string;\n timestamp: number;\n bitrate?: number;\n bytesSent: number;\n packetsSent: number;\n retransmittedBytesSent?: number;\n firCount?: number;\n frameHeight?: number;\n frameWidth?: number;\n framesEncoded?: number;\n framesSent?: number;\n headerBytesSent?: number;\n hugeFramesSent?: number;\n pliCount?: number;\n qpSum?: number;\n totalEncodeTime?: number;\n totalEncodedBytesTarget?: number;\n codec: string;\n fps?: number;\n roundTripTime: number;\n}\n\nconst updateStatisticTimeout = 1000;\nconst getStatsTimeoutDuration = 5000;\n\nexport default class RtcPublishMonitor implements IDisposable {\n private readonly _logger: ILogger = LoggerFactory.getLogger('RtcPublishMonitor');\n private readonly _estimatedRoundTripTime: number;\n private readonly _estimatedVideoCodec: string = 'unknown';\n private readonly _estimatedAudioCodec: string = 'unknown';\n private readonly _rtcStatistic: Subject<IRtcPublishMonitorStatistic> = new Subject<IRtcPublishMonitorStatistic>({});\n private readonly _disposables: DisposableList = new DisposableList();\n private _peerConnection: IPeerConnection | null;\n private _isMonitorRunning = true;\n private _updateTimeout: number | undefined = undefined;\n private _monitorGeneration = 0;\n private _availableTracks: {\n audio: boolean;\n video: boolean;\n } | null = null;\n\n constructor(peerConnection: IPeerConnection, estimatedRoundTripTime: number, isForeground: ReadOnlySubject<boolean>) {\n this._peerConnection = peerConnection;\n this._estimatedRoundTripTime = estimatedRoundTripTime;\n\n if (this._peerConnection && this._peerConnection?.currentLocalDescription?.sdp && this._peerConnection?.currentRemoteDescription?.sdp) {\n const parsedLocalDescription = new SdpParser(this._peerConnection.currentLocalDescription.sdp);\n const parsedRemoteDescription = new SdpParser(this._peerConnection.currentRemoteDescription.sdp);\n\n this._estimatedAudioCodec = parsedRemoteDescription.audioCodec;\n this._estimatedVideoCodec = parsedRemoteDescription.videoCodec;\n\n this._availableTracks = {\n audio: parsedLocalDescription.isAudioTrackEnabled && parsedRemoteDescription.isAudioTrackEnabled,\n video: parsedLocalDescription.isVideoTrackEnabled && parsedRemoteDescription.isVideoTrackEnabled\n };\n\n let isInitialSubscriptionCallback = true;\n\n this._disposables.add(\n isForeground.subscribe(foreground => {\n if (isInitialSubscriptionCallback) {\n isInitialSubscriptionCallback = false;\n\n return;\n }\n\n if (!foreground || !this._isMonitorRunning) {\n return;\n }\n\n // Invalidate any in-flight poll from before the freeze\n this._monitorGeneration++;\n GlobalScope.value.clearTimeout(this._updateTimeout);\n\n this._logger.debug('Restarting stats polling after foreground transition');\n this.updateStatistic();\n })\n );\n\n this.updateStatistic();\n }\n }\n\n get rtcStatistic(): Subject<IRtcPublishMonitorStatistic> {\n return this._rtcStatistic;\n }\n\n public dispose(): void {\n this._monitorGeneration++;\n this._isMonitorRunning = false;\n this._peerConnection = null;\n this._disposables.dispose();\n GlobalScope.value.clearTimeout(this._updateTimeout);\n this._updateTimeout = undefined;\n }\n\n private async updateStatistic(): Promise<void> {\n if (FeatureEnablement.getStatsPromiseBasedDisabled) {\n const ignored = {\n audio: 0,\n video: 0\n };\n\n return;\n }\n\n const generation = this._monitorGeneration;\n // Safari 11 doesnt have kind or mediaType so we need to take it from the inbound-rtp object id\n const getKindForSafari11 = (item: {id: string}): string => item.id.includes('Audio') ? 'audio' : item.id.includes('Video') ? 'video' : '';\n let timeoutHandle: number | undefined;\n\n try {\n const statsPromise = this._peerConnection?.getStats(null);\n\n if (!statsPromise) {\n return;\n }\n\n const timeoutPromise = new Promise<undefined>(resolve => {\n timeoutHandle = GlobalScope.value.setTimeout(() => resolve(undefined), getStatsTimeoutDuration);\n });\n const stats = await Promise.race([statsPromise, timeoutPromise]);\n\n if (generation !== this._monitorGeneration || !this._isMonitorRunning) {\n return;\n }\n\n if (!stats) {\n this._logger.debug('getStats() timed out, skipping stats processing');\n } else {\n const rtcStatistics: IRtcPublishMonitorStatistic = {};\n let roundTripTime = this._estimatedRoundTripTime;\n let lastPacketSentTimestamp: number | undefined;\n\n stats.forEach(report => {\n if (report.type === 'candidate-pair' && report.currentRoundTripTime) {\n roundTripTime = report.currentRoundTripTime * 1000;\n\n if (rtcStatistics['audio']) {\n rtcStatistics['audio'].roundTripTime = roundTripTime;\n }\n\n if (rtcStatistics['video']) {\n rtcStatistics['video'].roundTripTime = roundTripTime;\n }\n }\n\n if (report.type === 'candidate-pair' && report.lastPacketSentTimestamp) {\n lastPacketSentTimestamp = report.lastPacketSentTimestamp;\n\n if (rtcStatistics['audio']) {\n rtcStatistics['audio'].lastPacketSentTimestamp = lastPacketSentTimestamp;\n }\n\n if (rtcStatistics['video']) {\n rtcStatistics['video'].lastPacketSentTimestamp = lastPacketSentTimestamp;\n }\n }\n\n if (report.type === 'outbound-rtp') {\n const kind: 'video' | 'audio' | undefined = report.kind || report.mediaType || getKindForSafari11(report);\n let codec = '';\n\n stats.forEach(item => {\n if (item.id === report.codecId) {\n codec = item.mimeType;\n }\n });\n\n if (kind && this._availableTracks?.[kind]) {\n const bytes = report.bytesSent || 0;\n const previousBytesSent = this._rtcStatistic.value?.[kind]?.bytesSent ?? 0;\n const bytesDelta = bytes - previousBytesSent;\n const timeDelta = report.timestamp - this._rtcStatistic.value?.[kind]?.timestamp;\n const bitrate = bytesDelta && timeDelta ? Math.floor(8 * bytesDelta /\n timeDelta * 1000) : 0;\n\n rtcStatistics[kind] = {\n ssrc: report.ssrc,\n mediaType: kind,\n timestamp: report.timestamp,\n bitrate,\n bytesSent: report.bytesSent,\n packetsSent: report.packetsSent,\n retransmittedBytesSent: report.retransmittedBytesSent,\n codec: codec || this.getCodecByType(kind),\n roundTripTime\n };\n\n if (report.lastPacketSentTimestamp || lastPacketSentTimestamp) {\n rtcStatistics[kind].lastPacketSentTimestamp = report.lastPacketSentTimestamp || lastPacketSentTimestamp;\n }\n\n if (kind === 'video') {\n rtcStatistics[kind]['firCount'] = report.firCount;\n rtcStatistics[kind]['frameHeight'] = report.frameHeight;\n rtcStatistics[kind]['frameWidth'] = report.frameWidth;\n rtcStatistics[kind]['framesEncoded'] = report.framesEncoded;\n rtcStatistics[kind]['framesSent'] = report.framesSent;\n rtcStatistics[kind]['headerBytesSent'] = report.headerBytesSent;\n rtcStatistics[kind]['hugeFramesSent'] = report.hugeFramesSent;\n rtcStatistics[kind]['pliCount'] = report.pliCount;\n rtcStatistics[kind]['qpSum'] = report.qpSum;\n rtcStatistics[kind]['totalEncodeTime'] = report.totalEncodeTime;\n rtcStatistics[kind]['totalEncodedBytesTarget'] = report.totalEncodedBytesTarget;\n\n if (this._rtcStatistic.value?.video?.framesEncoded) {\n const fps = (report.framesEncoded - this._rtcStatistic.value.video.framesEncoded) /\n (rtcStatistics[kind].timestamp - this._rtcStatistic.value.video.timestamp) *\n 1000;\n\n rtcStatistics[kind]['fps'] = fps ? Math.round(fps * 100) / 100 : 0;\n }\n }\n }\n }\n });\n\n this._rtcStatistic.value = rtcStatistics;\n }\n } catch (error) {\n if (generation !== this._monitorGeneration || !this._isMonitorRunning) {\n return;\n }\n\n this._logger.warn('getStats() rejected', error);\n } finally {\n GlobalScope.value.clearTimeout(timeoutHandle);\n }\n\n if (this._isMonitorRunning && generation === this._monitorGeneration) {\n this._updateTimeout = GlobalScope.value.setTimeout(\n () => this.updateStatistic(), updateStatisticTimeout);\n }\n }\n\n private getCodecByType(type: string): string {\n switch (type) {\n case 'audio':\n return this._estimatedAudioCodec || 'unknown';\n case 'video':\n return this._estimatedVideoCodec || 'unknown';\n default:\n return 'unknown';\n }\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport GlobalScope from '../../globalScope/GlobalScope';\nimport assertUnreachable from '../../lang/assertUnreachable';\nimport Disposable from '../../lang/Disposable';\nimport {ILogger} from '../../logger/LoggerInterface';\nimport LoggerFactory from '../../logger/LoggerFactory';\nimport SDK from '../SDK';\nimport {StreamSetupListener} from '../../dom/StreamSetupListener';\nimport GarbageCollectorManager from '../../dom/GarbageCollectorManager';\nimport FeatureEnablement from '../../environment/FeatureEnablement';\nimport {AddIceCandidatesStatus, SetRemoteDescriptionStatus} from '../discovery/EndPoint';\nimport Discovery from '../discovery/Discovery';\nimport IPeerConnection from '../../rtc/IPeerConnection';\nimport PeerConnectionService from '../../rtc/PeerConnectionService';\nimport PeerConnectionContext from '../context/PeerConnectionContext';\nimport RtcPublishMonitor from '../../rtc/RtcPublishMonitor';\n\nimport RtcConfigurationManager from '../../rtc/RtcConfigurationManager';\nimport PublisherState from './PublisherState';\nimport PublisherContext from './PublisherContext';\n\nconst iceCandidateAccumulationInterval = 100;\nconst softRestartInterval = 1000;\n\nexport default class RealTimePublisher {\n private readonly _logger: ILogger = LoggerFactory.getLogger('RealTimePublisher');\n private readonly _publisherContext: PublisherContext;\n private readonly _peerConnectionContext: PeerConnectionContext;\n private readonly _handleStreamFailure: () => Promise<void>;\n\n constructor(publisherContext: PublisherContext, peerConnectionContext: PeerConnectionContext, handleStreamFailure: () => Promise<void>) {\n this._publisherContext = publisherContext;\n this._peerConnectionContext = peerConnectionContext;\n this._handleStreamFailure = handleStreamFailure;\n }\n\n start(uri: URL, token: string, listenOnStreamSetup: StreamSetupListener): Promise<void> {\n if (!GlobalScope.value.navigatorIsOnLine) {\n this._publisherContext.state.value = PublisherState.Offline;\n\n return Promise.resolve();\n }\n\n const mediaStream = this._peerConnectionContext.mediaStream.value;\n\n if (!mediaStream) {\n this._logger.error('Publish failed no media stream provided');\n this._publisherContext.state.value = PublisherState.ConfigurationError;\n\n return Promise.resolve();\n }\n\n const mediaTracks = mediaStream.getTracks();\n const trackKinds = mediaTracks.reduce((accumulator: ('audio' | 'video')[], track) => {\n if (track.kind === 'audio' || track.kind === 'video') {\n accumulator.push(track.kind);\n } else {\n this._logger.warn('[%s] Track kind is not supported', track.kind);\n }\n\n return accumulator;\n }, []);\n\n return Promise.all([\n Discovery.discoverClosestEndPointWithCaching(uri),\n PeerConnectionService.createPeerConnectionOffer('sendonly', trackKinds)\n .then(({localOffer, peerConnection}) => {\n this._peerConnectionContext.peerConnection.value = peerConnection;\n\n return {\n localOffer,\n peerConnection\n };\n })\n ])\n .then(([endPoint, {localOffer, peerConnection}]) => {\n this._publisherContext.online.value = true;\n this._publisherContext.endPoint.value = endPoint;\n this._logger.info('Connecting to [%s]', endPoint.toString());\n this._logger.info('Local offer:\\n' + localOffer.sdp);\n\n if (FeatureEnablement.clientOfferDisabled || !peerConnection.supportsSetConfiguration || !peerConnection.supportsGetConfiguration || this._publisherContext.failureCount.value > 0) {\n peerConnection.close();\n peerConnection.dispose();\n\n if (SDK.forceGarbageCollectionOnRestart && !(FeatureEnablement.isMobile && SDK.skipGarbageCollectionOnMobileDevices)) {\n GarbageCollectorManager.forceGarbageCollection();\n }\n\n this._peerConnectionContext.peerConnection.value = null;\n\n return endPoint.publish(this._publisherContext.name, token, null, this._publisherContext.failureCount.value);\n }\n\n return endPoint.publish(this._publisherContext.name, token, localOffer, this._publisherContext.failureCount.value);\n })\n .then(response => {\n const {status} = response;\n\n this._publisherContext.state.value = this._publisherContext.mapPublishStatusToPublisherStatus(status);\n\n this._publisherContext.applyPublishStatus(status);\n\n if (status !== 'ok') {\n this._publisherContext.stream.value = null;\n\n this._logger.info(\n '[%s] Publish failed with status [%s]',\n this._publisherContext.streamId,\n status\n );\n\n return;\n }\n\n const {stream, rtcConfiguration, setRemoteDescriptionResponse, createOfferDescriptionResponse, createAnswerDescriptionResponse} = response;\n\n this._publisherContext.stream.value = stream;\n\n this._logger.debug(\n '[%s] Publish completed [%s] [%j] [%j] [%j] [%j]',\n this._publisherContext.streamId,\n status,\n rtcConfiguration,\n setRemoteDescriptionResponse,\n createOfferDescriptionResponse,\n createAnswerDescriptionResponse\n );\n\n this._publisherContext.state.value = this._publisherContext.mapPublishStatusToPublisherStatus(status);\n\n this._publisherContext.applyPublishStatus(status);\n\n return this.applyRtcConfiguration(this._peerConnectionContext.peerConnection.value, rtcConfiguration as RTCConfiguration)\n .then(peerConnection => {\n let submitCandidatesTimeout: undefined | number;\n let cancelDiscovery = false;\n let discoveryCompleted = false;\n const candidates: RTCIceCandidate[] = [];\n\n this._peerConnectionContext.peerConnection.value = peerConnection;\n\n peerConnection.addStream(this._peerConnectionContext.mediaStream.value as MediaStream);\n\n peerConnection.onicecandidate = (e): void => {\n if (this._publisherContext.stream.value !== stream) {\n return;\n }\n\n if (this._peerConnectionContext.peerConnection.value !== peerConnection) {\n return;\n }\n\n if (cancelDiscovery) {\n return;\n }\n\n if (!SDK.sendLocalCandidates.value) {\n return;\n }\n\n if (e.candidate && e.candidate.candidate) {\n candidates.push(e.candidate);\n } else {\n discoveryCompleted = true;\n }\n\n if (!submitCandidatesTimeout) {\n submitCandidatesTimeout = GlobalScope.value.setTimeout(() => {\n if (this._publisherContext.stream.value !== stream) {\n return;\n }\n\n if (cancelDiscovery) {\n return;\n }\n\n const ignored = this._publisherContext.endPoint.value?.addIceCandidates(stream, candidates, discoveryCompleted)\n .then(({status, options}) => {\n if (status !== 'ok') {\n if (this._publisherContext.stream.value !== stream) {\n return;\n }\n\n if (this._peerConnectionContext.peerConnection.value !== peerConnection) {\n return;\n }\n\n this._publisherContext.state.value = this.mapAddIceCandidatesStatusToPublisherStatus(status);\n this._publisherContext.applyAddIceCandidatesStatus(status);\n\n this._logger.warn('[%s] Failed to add ICE candidates with reason [%s]', this._publisherContext.streamId, status);\n\n const ignored = this._handleStreamFailure()\n .catch(e => {\n this._logger.error(\n '[%s] Failed handling stream failure after peer connection failed to add ICE candidates with reason [%s]',\n this._publisherContext.streamId,\n status,\n e\n );\n });\n\n return;\n }\n\n if (options?.includes('cancel')) {\n cancelDiscovery = true;\n }\n\n this._logger.info('[%s] Added ICE candidates with reason [%s] and options [%s]', this._publisherContext.streamId, status, options);\n })\n .catch(e => {\n if (this._publisherContext.stream.value !== stream) {\n return;\n }\n\n if (this._peerConnectionContext.peerConnection.value !== peerConnection) {\n return;\n }\n\n this._logger.error('[%s] Failed to add ICE candidates', this._publisherContext.streamId, e);\n this._publisherContext.state.value = PublisherState.ConnectionError;\n this._publisherContext.applyUnhandledError();\n\n const ignored = this._handleStreamFailure()\n .catch(e => {\n this._logger.error(\n '[%s] Failed handling stream failure after peer connection failed to add ICE candidates',\n this._publisherContext.streamId,\n e\n );\n });\n });\n }, iceCandidateAccumulationInterval);\n }\n };\n\n peerConnection.oniceconnectionstatechange = (): void => {\n if (this._publisherContext.stream.value !== stream) {\n return;\n }\n\n if (this._peerConnectionContext.peerConnection.value !== peerConnection) {\n return;\n }\n\n const retryCallback = (): void => {\n // If we stop normally the peer connection is unregistered first.\n // Thus anytime we see a closed peer connection that is still valid, it is an error.\n this._publisherContext.state.value = PublisherState.ConnectionError;\n this._publisherContext.publishing.value = false;\n this._publisherContext.loading.value = true;\n\n const ignored = this._handleStreamFailure()\n .catch(e => {\n this._logger.error(\n '[%s] Failed handling stream failure after peer connection stopped with state [%s]',\n this._publisherContext.streamId,\n peerConnection.iceConnectionState,\n e\n );\n });\n };\n\n switch (peerConnection.iceConnectionState) {\n case 'checking':\n case 'completed':\n case 'connected':\n case 'new':\n return;\n\n case 'disconnected':\n case 'failed':\n this._logger.info('[%s] ICE connection state changed to [%s], trying to reconnect', this._publisherContext.streamId, peerConnection.iceConnectionState);\n this.reconnectPeerConnection(peerConnection, retryCallback);\n\n return;\n case 'closed':\n this._logger.info('[%s] ICE connection state changed to [%s], retrying to connect', this._publisherContext.streamId, peerConnection.iceConnectionState);\n retryCallback();\n\n return;\n default:\n assertUnreachable(peerConnection.iceConnectionState as never);\n }\n };\n\n return new Promise<void>(resolve => {\n resolve();\n }).then(() => {\n if (!setRemoteDescriptionResponse) {\n return;\n }\n\n this._logger.info('[%s] Set local SDP offer [%s]', this._publisherContext.streamId, setRemoteDescriptionResponse.sessionDescription.sdp);\n\n return peerConnection.setLocalDescription(setRemoteDescriptionResponse.sessionDescription)\n .catch(e => {\n this._logger.info('[%s] Failed to set local description [%j] with message [%s]', this._publisherContext.streamId, setRemoteDescriptionResponse.sessionDescription, e.message);\n\n throw e;\n });\n }).then(() => {\n if (!createAnswerDescriptionResponse) {\n return;\n }\n\n this._logger.info('[%s] Set remote SDP answer [%s]', this._publisherContext.streamId, createAnswerDescriptionResponse?.sessionDescription?.sdp);\n\n return peerConnection.setRemoteDescription(createAnswerDescriptionResponse.sessionDescription)\n .catch(e => {\n this._logger.info('[%s] Failed to set remote description [%j] with message [%s]', this._publisherContext.streamId, createAnswerDescriptionResponse?.sessionDescription, e.message);\n\n throw e;\n });\n }).then(() => {\n if (!createOfferDescriptionResponse) {\n return;\n }\n\n this._logger.info('[%s] Set remote SDP offer [%s]', this._publisherContext.streamId, createOfferDescriptionResponse.sessionDescription.sdp);\n\n return peerConnection.setRemoteDescription(createOfferDescriptionResponse.sessionDescription)\n .catch(e => {\n this._logger.info('[%s] Failed to set remote description [%j] with message [%s]', this._publisherContext.streamId, createAnswerDescriptionResponse?.sessionDescription, e.message);\n\n throw e;\n })\n .then(() => {\n return peerConnection.createAnswer({\n offerToReceiveAudio: false,\n offerToReceiveVideo: false\n });\n }).then(answer => {\n this._logger.info('[%s] Set local SDP answer [%s]', this._publisherContext.streamId, answer.sdp);\n\n const endPoint = this._publisherContext.endPoint.value;\n\n if (!endPoint) {\n throw new Error('Failed to set remote description, EndPoint is not set');\n }\n\n return endPoint.setRemoteDescription(stream, answer);\n }).then(({status, sessionDescription}) => {\n this._publisherContext.state.value = this.mapSetRemoteDescriptionStatusToPublisherStatus(status);\n\n this._publisherContext.applySetRemoteDescriptionStatus(status);\n\n if (status !== 'ok') {\n return;\n }\n\n this._logger.info('[%s] Set local SDP [%s]', this._publisherContext.streamId, sessionDescription?.sdp);\n\n return peerConnection.setLocalDescription(sessionDescription as RTCSessionDescription)\n .catch(e => {\n this._logger.info('[%s] Failed to set local description [%j] with message [%s]', this._publisherContext.streamId, sessionDescription, e.message);\n\n throw e;\n });\n });\n }).then(() => {\n listenOnStreamSetup.success(this._publisherContext.streamId);\n\n if (this._publisherContext.state.value !== PublisherState.Starting) {\n return Promise.resolve();\n }\n\n this._publisherContext.state.value = PublisherState.Publishing;\n\n this._publisherContext.publishing.value = true;\n\n const rtcPublishMonitor = new RtcPublishMonitor(\n peerConnection,\n this._publisherContext.endPoint.value?.roundTripTime ? this._publisherContext.endPoint.value.roundTripTime / 4 : 0,\n SDK.applicationActivityMonitor!.isForeground\n );\n\n this._publisherContext.disposables.add(rtcPublishMonitor);\n\n const ignored = rtcPublishMonitor.rtcStatistic.subscribe(statistics => {\n this._publisherContext.rtcStatistics.value = statistics;\n });\n\n return Promise.resolve();\n });\n });\n });\n }\n\n private async applyRtcConfiguration(\n optionalPeerConnection: IPeerConnection | null,\n rtcConfiguration: RTCConfiguration): Promise<IPeerConnection> {\n if (!optionalPeerConnection) {\n rtcConfiguration = RtcConfigurationManager.truncateIceServers(rtcConfiguration);\n\n return SDK.peerConnectionFactory.value.createPeerConnection(rtcConfiguration);\n }\n\n const newRtcConfiguration = {\n ...optionalPeerConnection.getConfiguration(),\n ...rtcConfiguration\n };\n\n optionalPeerConnection.setConfiguration(newRtcConfiguration);\n\n return optionalPeerConnection;\n }\n\n private reconnectPeerConnection(peerConnection: IPeerConnection, retryCallback: () => void): void {\n if (peerConnection.iceConnectionState === 'closed') {\n return;\n }\n\n this._publisherContext.state.value = PublisherState.Reconnecting;\n\n if (this._peerConnectionContext.peerConnectionReconnectAttempts < SDK.maximalNumberOfPeerConnectionReconnectAttempts || !SDK.automaticallyReconnectPeerConnection) {\n this._peerConnectionContext.peerConnectionReconnectAttempts++;\n\n const isClientOfferFlow = peerConnection.currentLocalDescription?.type === 'offer';\n\n if (FeatureEnablement.clientOfferDisabled ||\n !peerConnection.supportsSetConfiguration ||\n !peerConnection.supportsGetConfiguration ||\n !isClientOfferFlow\n ) {\n const reconnectPeerConnectionTimeout = GlobalScope.value.setTimeout(() => {\n this.reconnectPeerConnection(peerConnection, retryCallback);\n }, softRestartInterval);\n\n this._publisherContext.disposables.add(new Disposable(() => GlobalScope.value.clearTimeout(reconnectPeerConnectionTimeout)));\n\n return;\n }\n\n this._logger.info('Reconnecting peer connection by restarting ICE');\n\n const currentLocalDescription = peerConnection.currentLocalDescription;\n const ignored = peerConnection.createOffer({iceRestart: true}).then(offer => {\n return peerConnection.setLocalDescription(offer).then(() => {\n return peerConnection.setLocalDescription(currentLocalDescription)\n .then(() => {\n if (peerConnection.iceConnectionState === 'disconnected' || peerConnection.iceConnectionState === 'failed') {\n const reconnectPeerConnectionTimeout = GlobalScope.value.setTimeout(() => {\n this.reconnectPeerConnection(peerConnection, retryCallback);\n }, softRestartInterval);\n\n this._publisherContext.disposables.add(new Disposable(() => GlobalScope.value.clearTimeout(reconnectPeerConnectionTimeout)));\n } else {\n this._publisherContext.state.value = PublisherState.Publishing;\n }\n });\n });\n })\n .catch(e => {\n this._logger.error('Failed to reconnect peer connection', e);\n this._peerConnectionContext.peerConnectionReconnectAttempts = 0;\n retryCallback();\n });\n\n return;\n }\n\n this._logger.info('Failed to reconnect peer connection after [%s] attempts, performing full recovery', this._peerConnectionContext.peerConnectionReconnectAttempts);\n this._peerConnectionContext.peerConnectionReconnectAttempts = 0;\n retryCallback();\n }\n\n private mapSetRemoteDescriptionStatusToPublisherStatus(status: SetRemoteDescriptionStatus): PublisherState {\n switch (status) {\n case 'ok':\n return PublisherState.Starting;\n case 'unauthorized':\n return PublisherState.Unauthorized;\n case 'not-found':\n return PublisherState.NotFound;\n case 'capacity':\n case 'rate-limited':\n case 'timeout':\n return PublisherState.Recovering;\n case 'failed':\n return PublisherState.Error;\n default:\n assertUnreachable(status);\n }\n }\n\n private mapAddIceCandidatesStatusToPublisherStatus(status: AddIceCandidatesStatus): PublisherState {\n switch (status) {\n case 'ok':\n return this._publisherContext.state.value;\n case 'unauthorized':\n return PublisherState.Unauthorized;\n case 'not-found':\n return PublisherState.NotFound;\n case 'capacity':\n case 'rate-limited':\n case 'timeout':\n return PublisherState.Recovering;\n case 'failed':\n return PublisherState.Error;\n default:\n assertUnreachable(status);\n }\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport GlobalScope from '../../globalScope/GlobalScope';\nimport LoggerFactory from '../../logger/LoggerFactory';\nimport IDisposable from '../../lang/IDisposable';\nimport ReadOnlySubject from '../../rx/ReadOnlySubject';\nimport ExponentialBackoff from '../../time/ExponentialBackoff';\nimport EndPoint, {IStream} from '../discovery/EndPoint';\nimport SDK from '../SDK';\nimport GarbageCollectorManager from '../../dom/GarbageCollectorManager';\nimport IPeerConnection from '../../rtc/IPeerConnection';\nimport {IRtcPublishMonitorStatistic} from '../../rtc/RtcPublishMonitor';\nimport PublisherState from './PublisherState';\nimport assertUnreachable from '../../lang/assertUnreachable';\nimport Disposable from '../../lang/Disposable';\nimport {ILogger} from '../../logger/LoggerInterface';\nimport SessionTelemetry from '../../video/SessionTelemetry';\nimport EdgeAuthParser from '../../edgeAuth/EdgeAuthParser';\n\nimport {EncodedEdgeToken} from '../../edgeAuth/EncodedEdgeToken';\nimport TokenContext from '../context/TokenContext';\nimport PublisherContext from './PublisherContext';\nimport PeerConnectionContext from '../context/PeerConnectionContext';\nimport StateContext from '../context/StateContext';\nimport Discovery from '../discovery/Discovery';\nimport DiscoveryUri from '../discovery/DiscoveryUri';\nimport MetricsFactory from '../../metrics/MetricsFactory';\nimport MetricsService from '../../metrics/MetricsService';\nimport RealTimePublisher from './RealTimePublisher';\nimport FeatureEnablement from '../../environment/FeatureEnablement';\n\nconst defaultStreamTerminationReason = 'client:termination';\nconst failureCountCleanUpIntervalInMilliseconds = 3000;\nconst standbyPollingIntervalInMilliseconds = 15000;\nconst oneHourInMilliseconds = 3600 * 1000;\nconst maxReconnectingAttemptsIntervalInMilliseconds = 2 * oneHourInMilliseconds;\n\nexport default class Publisher implements IDisposable {\n private readonly _logger: ILogger = LoggerFactory.getLogger('Publisher');\n private readonly _tokenContext: TokenContext;\n private readonly _publisherContext: PublisherContext;\n private readonly _peerConnectionContext: PeerConnectionContext;\n private readonly _stateContext: StateContext;\n private readonly _exponentialBackoff: ExponentialBackoff;\n private readonly _publisherStartTime: number;\n private readonly _readOnlyToken: ReadOnlySubject<EncodedEdgeToken>;\n private readonly _readOnlyPeerConnection: ReadOnlySubject<IPeerConnection | null>;\n private readonly _readOnlyState: ReadOnlySubject<PublisherState>;\n private readonly _readOnlyTokenExpiring: ReadOnlySubject<boolean>;\n private readonly _readOnlyAuthorized: ReadOnlySubject<boolean>;\n private readonly _readOnlyOnline: ReadOnlySubject<boolean>;\n private readonly _readOnlyLoading: ReadOnlySubject<boolean>;\n private readonly _readOnlyPublishing: ReadOnlySubject<boolean>;\n private readonly _readOnlyStandby: ReadOnlySubject<boolean>;\n private readonly _readOnlyStopped: ReadOnlySubject<boolean>;\n private readonly _readOnlyFailureCount: ReadOnlySubject<number>;\n private readonly _readOnlyEndPoint: ReadOnlySubject<EndPoint | null>;\n private readonly _readOnlyStream: ReadOnlySubject<IStream | null>;\n private readonly _readOnlyRtcStatistics: ReadOnlySubject<IRtcPublishMonitorStatistic | null>;\n private readonly _readOnlyMediaStream: ReadOnlySubject<MediaStream | null>;\n\n private _metricsService: MetricsService;\n private readonly _sessionTelemetry: SessionTelemetry;\n\n constructor(mediaStream: MediaStream, token: EncodedEdgeToken, name?: string) {\n this._tokenContext = new TokenContext(token);\n this._publisherContext = new PublisherContext(name);\n this._peerConnectionContext = new PeerConnectionContext();\n this._stateContext = new StateContext();\n this._exponentialBackoff = new ExponentialBackoff();\n this._publisherStartTime = Date.now();\n this._readOnlyToken = new ReadOnlySubject<string>(this._tokenContext.token);\n this._readOnlyPeerConnection = new ReadOnlySubject<IPeerConnection | null>(this._peerConnectionContext.peerConnection);\n this._readOnlyState = new ReadOnlySubject<PublisherState>(this._publisherContext.state);\n this._readOnlyTokenExpiring = new ReadOnlySubject<boolean>(this._tokenContext.tokenExpiring);\n this._readOnlyAuthorized = new ReadOnlySubject<boolean>(this._publisherContext.authorized);\n this._readOnlyOnline = new ReadOnlySubject<boolean>(this._publisherContext.online);\n this._readOnlyLoading = new ReadOnlySubject<boolean>(this._publisherContext.loading);\n this._readOnlyPublishing = new ReadOnlySubject<boolean>(this._publisherContext.publishing);\n this._readOnlyStandby = new ReadOnlySubject<boolean>(this._publisherContext.standby);\n this._readOnlyStopped = new ReadOnlySubject<boolean>(this._publisherContext.stopped);\n this._readOnlyFailureCount = new ReadOnlySubject<number>(this._publisherContext.failureCount);\n this._readOnlyEndPoint = new ReadOnlySubject<EndPoint | null>(this._publisherContext.endPoint);\n this._readOnlyStream = new ReadOnlySubject<IStream | null>(this._publisherContext.stream);\n this._readOnlyRtcStatistics = new ReadOnlySubject<IRtcPublishMonitorStatistic | null>(this._publisherContext.rtcStatistics);\n this._readOnlyMediaStream = new ReadOnlySubject<MediaStream | null>(this._peerConnectionContext.mediaStream);\n\n this._peerConnectionContext.mediaStream.value = mediaStream;\n\n const edgeToken = EdgeAuthParser.parseToken(this._tokenContext.token.value);\n const discoveryUri = (edgeToken.uri || SDK.discoveryUri.value).toString();\n\n SDK.tenancy.value = edgeToken.tenancy || SDK.tenancy.value;\n DiscoveryUri.uri.value = discoveryUri;\n this._metricsService = MetricsFactory.getMetricsService(discoveryUri);\n this._sessionTelemetry = new SessionTelemetry(SDK.pageLoadTime, this._metricsService);\n this._publisherContext.publisherDisposables.add(this._sessionTelemetry);\n\n this._publisherContext.publisherDisposables.add(\n this._publisherContext.state.subscribe(state => {\n if (this._publisherContext.clearFailureCountTimeout) {\n GlobalScope.value.clearTimeout(this._publisherContext.clearFailureCountTimeout);\n }\n\n if (!this._publisherContext.failureCount.value) {\n return;\n }\n\n if (state !== PublisherState.Publishing) {\n return;\n }\n\n this._publisherContext.clearFailureCountTimeout = GlobalScope.value.setTimeout(() => {\n this._publisherContext.failureCount.value = 0;\n }, failureCountCleanUpIntervalInMilliseconds);\n }));\n\n const destroyStreamOnUnmount = () => {\n if (this._publisherContext.stream.value && this._publisherContext.endPoint.value) {\n const ignored = this._publisherContext.endPoint.value.destroyStreamOnUnmount(this._publisherContext.stream.value, 'client:termination-on-window-unload');\n }\n };\n\n GlobalScope.value.addWindowEventListener('beforeunload', destroyStreamOnUnmount);\n\n this._publisherContext.publisherDisposables.add(new Disposable(() => {\n GlobalScope.value.removeWindowEventListener('beforeunload', destroyStreamOnUnmount);\n }));\n\n this.start();\n }\n\n get token(): EncodedEdgeToken {\n return this._tokenContext.token.value;\n }\n\n set token(token: EncodedEdgeToken) {\n this._publisherContext.disposables.dispose();\n\n this._tokenContext.token.value = token;\n this._tokenContext.tokenExpiring.value = false;\n\n const edgeToken = EdgeAuthParser.parseToken(this._tokenContext.token.value);\n const discoveryUri = (edgeToken.uri || SDK.discoveryUri.value).toString();\n\n SDK.tenancy.value = edgeToken.tenancy || SDK.tenancy.value;\n DiscoveryUri.uri.value = discoveryUri;\n\n this._metricsService = MetricsFactory.getMetricsService(discoveryUri);\n\n this.start();\n }\n\n get peerConnection(): ReadOnlySubject<IPeerConnection | null> {\n return this._readOnlyPeerConnection;\n }\n\n get state(): ReadOnlySubject<PublisherState> {\n return this._readOnlyState;\n }\n\n get tokenExpiring(): ReadOnlySubject<boolean> {\n return this._readOnlyTokenExpiring;\n }\n\n get authorized(): ReadOnlySubject<boolean> {\n return this._readOnlyAuthorized;\n }\n\n get online(): ReadOnlySubject<boolean> {\n return this._readOnlyOnline;\n }\n\n get loading(): ReadOnlySubject<boolean> {\n return this._readOnlyLoading;\n }\n\n get publishing(): ReadOnlySubject<boolean> {\n return this._readOnlyPublishing;\n }\n\n get standby(): ReadOnlySubject<boolean> {\n return this._readOnlyStandby;\n }\n\n get stopped(): ReadOnlySubject<boolean> {\n return this._readOnlyStopped;\n }\n\n get failureCount(): ReadOnlySubject<number> {\n return this._readOnlyFailureCount;\n }\n\n get endPoint(): ReadOnlySubject<EndPoint | null> {\n return this._readOnlyEndPoint;\n }\n\n get stream(): ReadOnlySubject<IStream | null> {\n return this._readOnlyStream;\n }\n\n get streamId(): string {\n return this._publisherContext.streamId;\n }\n\n get rtcStatistics(): ReadOnlySubject<IRtcPublishMonitorStatistic | null> {\n return this._readOnlyRtcStatistics;\n }\n\n get mediaStream(): ReadOnlySubject<MediaStream | null> {\n return this._readOnlyMediaStream;\n }\n\n async stop(reason: string): Promise<void> {\n return new Promise(resolve => {\n if (!this._stateContext.isStarting.value) {\n this.processStop(reason);\n\n resolve();\n\n return;\n }\n\n this._publisherContext.disposables.add(this._stateContext.isStarting.subscribe(isStarting => {\n if (!isStarting) {\n this.processStop(reason);\n resolve();\n }\n }));\n });\n }\n\n private processStop(reason: string): void {\n this.cleanUpResources(reason);\n\n if (this._peerConnectionContext.peerConnection.value) {\n this._peerConnectionContext.peerConnection.value.close();\n this._peerConnectionContext.peerConnection.value = null;\n }\n\n this._publisherContext.state.value = PublisherState.Stopped;\n }\n\n async dispose(): Promise<void> {\n return this.stop('client:channel-dispose').then(() => {\n this._publisherContext.publisherDisposables.dispose();\n this._stateContext.isDisposed = true;\n });\n }\n\n getUri(token: EncodedEdgeToken): URL {\n const url = EdgeAuthParser.parseToken(token).uri;\n\n if (url) {\n return url;\n }\n\n this._logger.info('Fall back to the default discover URI [%s]', SDK.discoveryUri.value);\n\n return new GlobalScope.value.URL(SDK.discoveryUri.value);\n }\n\n async start(): Promise<void> {\n if (this._stateContext.isDisposed) {\n throw new Error('Channel was already disposed');\n }\n\n if (this._stateContext.isStarting.value) {\n this._logger.info('Publisher is already starting, skipping start');\n\n return;\n }\n\n this._stateContext.isStarting.value = true;\n\n return this.processStart();\n }\n\n private async processStart(): Promise<void> {\n this._publisherContext.state.value = PublisherState.Starting;\n this.cleanUpResources('client:start');\n\n const token: EncodedEdgeToken = this._tokenContext.token.value;\n const listenOnStreamSetup = this._sessionTelemetry.listenOnStreamSetup();\n\n if (!EdgeAuthParser.isEncodedEdgeTokenValid(token)) {\n this._logger.error('Failed to parse token [%s]', token);\n this._publisherContext.state.value = PublisherState.Unauthorized;\n this._publisherContext.authorized.value = false;\n this._stateContext.isStarting.value = false;\n\n return;\n }\n\n this._publisherContext.loading.value = true;\n\n const uri = this.getUri(token);\n\n this._publisherContext.disposables.add(\n this._publisherContext.state.subscribe(state => {\n if (state === PublisherState.Error || state === PublisherState.Recovering) {\n Discovery.clearCachedClosestEndpoint(uri);\n }\n })\n );\n\n const handleStreamFailureCallback: () => Promise<void> = () => new Promise((resolve): void => {\n // Need to set isStarting to false and call handleStreamFailure if stream monitors found an issue\n this._stateContext.isStarting.value = false;\n\n return resolve(this.handleStreamFailure());\n });\n const streamPublisher = new RealTimePublisher(this._publisherContext, this._peerConnectionContext, handleStreamFailureCallback);\n\n return streamPublisher.start(\n uri,\n token,\n listenOnStreamSetup)\n .then(() => {\n this._publisherContext.loading.value = false;\n })\n .catch(e => {\n listenOnStreamSetup.fail();\n\n this._publisherContext.failureCount.value++;\n\n this._publisherContext.online.value = false;\n\n this.cleanUpResources('client:cleanup-after-failed-setup');\n\n this._publisherContext.state.value = PublisherState.ClientStartError;\n\n this._logger.error('Failed to start publishing', e);\n })\n .finally(() => {\n this._stateContext.isStarting.value = false;\n\n if (this._publisherContext.state.value === PublisherState.Publishing || !SDK.automaticRetryOnFailure) {\n this._publisherContext.startReconnectionAttemptsTimeInMilliseconds = 0;\n\n return;\n }\n\n const timeoutId = GlobalScope.value.setTimeout(() => {\n const ignored = this.handleStreamFailure()\n .catch(e => {\n this._logger.error('Failed handling stream failure', e);\n });\n }, this.getRetryInterval());\n\n this._publisherContext.disposables.add(new Disposable(() => {\n GlobalScope.value.clearTimeout(timeoutId);\n }));\n });\n }\n\n setMediaStream(mediaStream: MediaStream) {\n this._peerConnectionContext.mediaStream.value = mediaStream;\n\n if (this._peerConnectionContext.peerConnection.value) {\n mediaStream.getTracks().forEach(mediaTrack => {\n this._peerConnectionContext.peerConnection.value?.getSenders().forEach(sender => {\n if (mediaTrack.kind === sender?.track?.kind && mediaTrack.id !== sender.track.id) {\n sender.replaceTrack(mediaTrack);\n }\n });\n });\n }\n }\n\n private getRetryInterval(): number {\n switch (this._publisherContext.state.value) {\n case PublisherState.Offline:\n return standbyPollingIntervalInMilliseconds;\n case PublisherState.Initializing:\n case PublisherState.NotFound:\n case PublisherState.Error:\n case PublisherState.Recovering:\n case PublisherState.Unauthorized:\n case PublisherState.GeoRestricted:\n case PublisherState.GeoBlocked:\n case PublisherState.Stopped:\n case PublisherState.Starting:\n case PublisherState.Publishing:\n case PublisherState.Reconnecting:\n case PublisherState.UnsupportedFeature:\n case PublisherState.ConfigurationError:\n case PublisherState.TransientConfigurationError:\n case PublisherState.ConnectionError:\n case PublisherState.ClientStartError:\n // First and second attempt fast, after that exponential with backoff interval\n return this._exponentialBackoff.getExponentialBackoffIntervalByFailureCount(this._publisherContext.failureCount.value);\n\n default:\n assertUnreachable(this._publisherContext.state.value);\n }\n }\n\n private async handleStreamFailure(): Promise<void> {\n let reconnectingAttemptsInterval = 0;\n\n switch (this._publisherContext.state.value) {\n case PublisherState.Error:\n case PublisherState.Reconnecting:\n case PublisherState.Offline:\n case PublisherState.Recovering:\n case PublisherState.TransientConfigurationError:\n case PublisherState.ConnectionError:\n case PublisherState.ClientStartError:\n if (!this._publisherContext.startReconnectionAttemptsTimeInMilliseconds) {\n this._publisherContext.startReconnectionAttemptsTimeInMilliseconds = Date.now();\n }\n\n reconnectingAttemptsInterval = Date.now() - this._publisherContext.startReconnectionAttemptsTimeInMilliseconds;\n\n if (maxReconnectingAttemptsIntervalInMilliseconds <= reconnectingAttemptsInterval) {\n this._logger.info('Publisher stopped with state [%s] [%s] after exceeding timeout', this._publisherContext.state.value, PublisherState[this._publisherContext.state.value]);\n\n return;\n }\n\n this._logger.info('Retry start with initial state [%s] [%s]', this._publisherContext.state.value, PublisherState[this._publisherContext.state.value]);\n\n break;\n case PublisherState.Unauthorized:\n this._logger.info('Publisher is unauthorized, skipping retry of start. Please provide a new token and invoke start()');\n\n return;\n case PublisherState.GeoRestricted:\n this._logger.info('Publisher is geo restricted, skipping retry of start. Please provide a new token and invoke start()');\n\n return;\n case PublisherState.GeoBlocked:\n this._logger.info('Publisher is geo blocked, skipping retry of start. Please provide a new token and invoke start()');\n\n return;\n case PublisherState.Stopped:\n this._logger.info('Publisher is stopped, skipping retry of start.');\n\n return;\n case PublisherState.Publishing:\n this._logger.info('Publisher is publishing, skipping retry of start');\n\n return;\n case PublisherState.Initializing:\n this._logger.info('Publisher is initializing, skipping retry of start');\n\n return;\n case PublisherState.Starting:\n this._logger.info('Publisher is already starting, skipping retry of start');\n\n return;\n case PublisherState.UnsupportedFeature:\n this._logger.info('Publisher is stopped due to unsupported feature, skipping retry of start.');\n\n return;\n case PublisherState.NotFound:\n this._logger.info('Publisher is stopped due to channel not found, skipping retry of start.');\n\n return;\n case PublisherState.ConfigurationError:\n this._logger.info('Publisher is stopped due to configuration error, skipping retry of start.');\n\n return;\n default:\n assertUnreachable(this._publisherContext.state.value);\n }\n\n return this.start();\n }\n\n private cleanUpResources(reason: string = defaultStreamTerminationReason): void {\n this._publisherContext.disposables.dispose();\n\n const peerConnection = this._peerConnectionContext.peerConnection.value;\n\n if (peerConnection) {\n this._peerConnectionContext.peerConnection.value = null;\n peerConnection.close();\n peerConnection.dispose();\n\n if (SDK.forceGarbageCollectionOnRestart && !(FeatureEnablement.isMobile && SDK.skipGarbageCollectionOnMobileDevices)) {\n GarbageCollectorManager.forceGarbageCollection();\n }\n }\n\n this._publisherContext.publishing.value = false;\n this._publisherContext.stopped.value = true;\n this._publisherContext.standby.value = false;\n\n if (this._publisherContext.stream.value && this._publisherContext.endPoint.value) {\n const ignored = this._publisherContext.endPoint.value.destroyStream(this._publisherContext.stream.value, reason)\n .then(({status}) => {\n if (status !== 'ok') {\n this._logger.warn('[%s] Failed to destroy stream with reason [%s]', this.streamId, status);\n\n return;\n }\n\n this._logger.info('[%s] Destroyed stream with reason [%s]', this.streamId, status);\n })\n .catch(e => {\n this._logger.error('[%s] Failed to destroy stream', this.streamId, e);\n });\n }\n\n this._publisherContext.stream.value = null;\n this._publisherContext.endPoint.value = null;\n this._peerConnectionContext.peerConnectionReconnectAttempts = 0;\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport SDK from '../SDK';\nimport {EncodedEdgeToken} from '../../edgeAuth/EncodedEdgeToken';\nimport Publisher from './Publisher';\n\ntype CreatePublisherOptions = {\n mediaStream: MediaStream;\n token: EncodedEdgeToken;\n name?: string;\n};\n\nexport default class Publishers {\n static createPublisher(options: CreatePublisherOptions): Publisher {\n if (!SDK.initialized.value) {\n throw new Error('SDK is not loaded.');\n }\n\n return new Publisher(options.mediaStream, options.token, options.name);\n }\n\n private constructor() {\n throw new Error('Publishers is a static class that may not be instantiated');\n }\n}","/**\n * Copyright 2026 Perform Content Services Limited. Confidential and Proprietary. All Rights Reserved.\n */\n\nimport SDK from '../SDK';\nimport Channels from '../channels/Channels';\nimport ChannelState from '../channels/ChannelState';\nimport Publishers from '../publish/Publishers';\nimport PublisherState from '../publish/PublisherState';\n\nexport {\n SDK,\n Channels,\n ChannelState,\n Publishers,\n PublisherState\n};\n\nexport default {\n SDK,\n Channels,\n ChannelState,\n Publishers,\n PublisherState\n};"],"names":["root","factory","exports","module","define","amd","self","PromiseHandler","_createClass","onFulfilled","onRejected","promise","_classCallCheck","_defineProperty","this","Promise","callback","TypeError","_state","_handled","_value","_deferreds","doResolve","key","value","_this","done","promiseResolve","reason","promiseReject","error","newValue","_typeof","then","finale","apply","arguments","e","_this2","length","_immediate","_unhandledRejection","i","len","handle","deferred","result","push","arr","resolve","reject","Array","isArray","args","prototype","slice","call","remaining","manageResponse","constructor","_","window","setTimeout","console","warn","content","workerConstructor","workerOptions","url","globalScope","blob","Blob","BlobBuilder","WebKitBlobBuilder","MozBlobBuilder","MSBlobBuilder","append","getBlob","URL","webkitURL","objectURL","createObjectURL","worker","revokeObjectURL","concat","encodeURIComponent","Error","r","a","n","__esModule","arrayLikeToArray","ReferenceError","asyncGeneratorStep","t","o","c","u","_next","_throw","toPropertyKey","_defineProperties","enumerable","configurable","writable","Object","defineProperty","_getPrototypeOf","setPrototypeOf","getPrototypeOf","bind","__proto__","create","Symbol","iterator","from","l","f","next","objectWithoutPropertiesLoose","getOwnPropertySymbols","indexOf","propertyIsEnumerable","hasOwnProperty","assertThisInitialized","_setPrototypeOf","arrayWithHoles","iterableToArrayLimit","unsupportedIterableToArray","nonIterableRest","arrayWithoutHoles","iterableToArray","nonIterableSpread","toPrimitive","String","Number","toString","name","test","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","getter","d","definition","get","obj","prop","toStringTag","Disposable","disposable","_disposed","_disposable","DisposableListener","_Disposable","listeners","listener","idx","splice","_inherits","Subject","_listeners","set","changed","comparable","equals","_i","_arr","_toConsumableArray","ReadOnlySubject","subject","_subject","subscribe","browserGlobalScope","document","location","navigator","GlobalScope","_document","_location","_navigator","_window","FormData","HTMLVideoElement","MediaStream","MediaStreamTrack","MediaSource","RTCPeerConnection","RTCSessionDescription","RTCIceCandidate","URLSearchParams","addEventListener","clearInterval","clearTimeout","createElement","hasFocus","hidden","querySelector","fetch","hostname","search","connection","onLine","queueMicrotask","removeEventListener","requestAnimationFrame","setInterval","providedGlobalScope","_readOnlyInstance","_GlobalScope","_instance","getInstance","BrowserDetector","_browserNameAndVersion","_browserName","_browserMajorVersion","_isAndroid","_isChrome69","_isChrome70","_isChrome71","_isChrome72","_isChrome74","_isChrome75","_isChrome76","_isChrome77","_isMobile","userAgent","browserNameAndVersion","match","_browserNameAndVersionRegex","parseBrowserNameAndVersionForIE","browserNameList","split","browserVersionList","fullVersion","msie","parseInt","substring","version","_BrowserDetector","parseBrowserNameAndVersion","parseBrowserName","parseBrowserMajorVersion","_navigator2","includes","FeatureEnablement","isChrome74","isChrome75","isChrome76","isChrome77","addTranceiverDisabled","isChrome69","isChrome70","isChrome71","isChrome72","browserName","browserMajorVersion","_GlobalScope$value","documentCreateElement","isMobile","MediaStreamTrackProcessor","MediaStreamTrackGenerator","RTCRtpReceiver","createEncodedStreams","RTCRtpScriptTransform","_GlobalScope$value2","requestVideoFrameCallback","_GlobalScope$value3","isRequestVideoFrameCallbackSupported","isEncodedInsertableStreamsSupported","isRTCRtpScriptTransformSupported","LoggingLevel","Logger","category","appenders","threshold","_category","_appenders","_threshold","Trace","_len","_key","log","Debug","_len2","_key2","Info","_len3","_key3","Warn","_len4","_key4","_len5","_key5","Fatal","_len6","_key6","level","date","Date","message","replacePlaceholders","forEach","appender","replacePlaceholdersString","index","replaceArgument","stringify","reduce","accumulator","currentValue","array","errorStackAlsoHasErrorMessage","stack","arg","cache","JSON","argument","data","toStringStr","Appenders","items","item","BuildFeatures","_sendLocalCandidates","_sendLogs","_sendMetrics","_logToConsole","features","__FEATURES__","sendLocalCandidates","sendLogs","sendMetrics","logToConsole","applyFeatures","LoggerDefaults","LoggingThreshold","defaultLoggingLevel","ConsoleAppender","logLevel","fullMessage","toISOString","Numbers","incrementForNegativeValue","number","countDigitsBeforeDecimal","Math","floor","countDigitsAfterDecimal","precision","power","pow","round","digitsBeforeDecimal","originalValue","modifiedValue","count","fixRounding","VersionManager","__BUILD_VERSION__","_defaultVersion","Generator","_regeneratorDefine2","p","y","G","v","return","GeneratorFunction","GeneratorFunctionPrototype","displayName","_regenerator","w","m","_invoke","TelemetryService","telemetryConfiguration","_telemetryConfiguration","getLocationHostnameFromGlobalScope","locationHostname","_domain","timestamp","runtime","valueOf","pageLoadTime","logRecord","tenancy","sessionId","sdkVersion","environment","fullQualifiedName","_logs","unshift","sendLogsIfAble","resolveLocationHostname","globalScopeSubscription","dispose","_asyncToGenerator","_callee","logMessages","formData","_context","records","method","body","_x","_sendLogsIfAble","_callee2","numberOfLogsToSend","sizeOfLogsToSend","getItemSize","getLogSize","_context2","_isSending","countNumberLength","values","sum","response","catch","TelemetryAppender","_tenancy","_sessionId","_telemetryService","TelemetryConfiguration","defaultTelemetryLoggingLevel","_url","telemetryUrl","pathname","_environment","_pageLoadTime","x","LoggingLevelMapping","loggingLevel","Off","All","assertUnreachable","loggingLevelType","TelemetryLevel","MetricsConfiguration","TelemetryDefault","defaultTelemetryLevel","metricsUrl","TelemetryLevelMapping","telemetryLevel","Essential","telemetryLevelType","ConfigurationParameterReader","readConfigurationParameterValue","readConfigurationParameterURIValue","defaultStringValue","valueFromUri","defaultBooleanValue","convertTelemetryLevelToTelemetryLevelType","convertLoggingLevelToLoggingLevelType","defaultConsoleLoggingLevel","metaValue","documentQuerySelector","getAttribute","valueURIParameterName","locationSearch","LoggerFactory","_loggers","applyLoggingLevel","applyAppenderLoggingLevel","applyConsoleLogger","applyTelemetryLogger","parameterValue","getStringValue","setThreshold","applyAppender","add","applyLoggerConfigFromParameterConfiguration","Strings","loops","ceil","fill","random","string","func","EdgeToken","edgeToken","_edgeToken$token","_edgeToken$token2","_applicationId","applicationId","_token","uri","token","capabilities","EdgeAuthParser","isEncodedEdgeTokenValid","_logger","decodedToken","atob","substr","edgeAuthTokenPrefix","parse","startsWith","getLogger","DisposableList","_list","visibilityChangeEvent","ApplicationActivityMonitor","now","_isForeground","_readOnlyIsForeground","initialize","_timeOfLastTabFocusChange","_lastBackgroundDuration","_disposables","backgroundEntryTime","handleVisibilityChange","isNowForeground","documentIsHidden","useEventCapturePhase","addDocumentEventListener","removeDocumentEventListener","VanillaPeerConnection","configuration","webkitRTCPeerConnectionEnabled","_peerConnection","webkitRTCPeerConnection","_this$_peerConnection","currentLocalDescription","_this$_peerConnection2","currentRemoteDescription","_this$_peerConnection3","connectionState","_this$_peerConnection4","iceConnectionState","_this$_peerConnection5","getConfiguration","_this$_peerConnection6","setConfiguration","_this$_peerConnection7","getTransceiversDisabled","getTransceivers","_this$_peerConnection8","addTransceiver","_createOffer","options","promiseBasedPCMethodsDisabled","createOffer","_createAnswer","createAnswer","_x2","_setLocalDescription","_callee3","description","_context3","setLocalDescription","_x3","_setRemoteDescription","_callee4","_description$sdp","_context4","sdp","setRemoteDescription","_x4","getSenders","getReceivers","selector","getStats","_this3","type","mediaStream","_this4","getTracks","track","addTrack","ontrack","handler","onicecandidate","onconnectionstatechange","oniceconnectionstatechange","_this$_peerConnection9","close","VanillaPeerConnectionFactory","_createPeerConnection","resolvePeerConnectionPromise","EncodedInsertableStreams","defaultTrackKinds","PeerConnectionService","_peerConnectionFactory","isPrecachingEnabled","precacheCreatePeerConnectionOffer","_precacheCreatePeerConnectionOffer","_cached","direction","peerConnection","createPeerConnectionOffer","_createPeerConnectionOffer","trackKinds","encodedInsertableStreams","_args3","Disabled","isTracksKindsEquivalentToDefault","Enabled","createPeerConnection","_ref","supportsAddTransceiver","audioTransceivers","videoTransceivers","_t","_t2","_t3","_t4","_t5","_t6","kind","localOffer","offerToReceiveAudio","offerToReceiveVideo","tracksKinds","countTrackKinds","trackKindCount","audio","video","countedTrackKinds","countedDefaultTrackKinds","initiateInitialPrecaching","TelemetryUrl","baseURL","segments","protocol","endsWith","join","origin","Environment","Parameters","_discoveryParameters","parameters","__PARAMETERS__","discovery","intentions","applyParameters","DiscoveryUri","_discoveryUri","discoveryParameters","searchParams","ExponentialBackoff","backoffIntervalInMillisecond","minBackoffIntervalInMillisecond","maxBackoffIntervalInMillisecond","_backoffIntervalInMillisecond","_minBackoffIntervalInMillisecond","_maxBackoffIntervalInMillisecond","failureCount","backoffIntervalInSeconds","randomization","exponentialBackoff","exponentialBackoffWithRandomization","exponentialBackoffWithRandomizationInMillisecond","max","min","MetricsType","MetricType","metrics","_metrics","TimeToFirstFrame","ChannelCreationTimeToFirstFrame","Stalled","Buffering","SetupCompleted","SetupFailed","RoundTripTime","DownlinkThroughputCapacity","NetworkType","ResolutionChanged","ApplicationForeground","ApplicationBackground","MetricsService","metricsConfiguration","_metricsConfiguration","_exponentialBackoff","metric","streamId","previousValue","resource","metricType","getTelemetryLevel","metricRecord","getName","sendMetricsIfAble","metricsMessages","_sendMetricsIfAble","isResponseStatusCodeRetryable","_failureCount","getExponentialBackoffIntervalByFailureCount","status","MetricsFactory","metricsServices","_metricsServices","SDK","clientSessionId","getTelemetryUrl","getEnvironmentFromUrl","convertTelemetryLevelTypeToTelemetryLevel","metricsService","_GlobalScope$getInsta","_clientSessionId","_loadedTimestamp","_readOnlyInitialized","_readOnlyDiscoveryUri","_readOnlyPeerConnectionFactory","_automaticallyRetryOnFailure","_automaticallyReconnectPeerConnection","_automaticallyPlayMediaStream","_automaticallyMuteVideoOnPlayFailure","_forceGarbageCollectionOnRestart","_skipGarbageCollectionOnMobileDevices","_webPlayerLoader","_shakaPlayerLoader","_hlsJsLoader","_metricsService","_applicationActivityMonitor","_telemetryUrl","_maximalNumberOfPeerConnectionReconnectAttempts","retriesAmount","_telemetryLevel","telemetryAppender","find","remove","info","getMetricsService","setTelemetryLevel","getBooleanValue","discoveryUri","channelToken","parseToken","uriValue","baseURIValue","_initialized","addWindowEventListener","applyDiscoveryUriDefaultFromParameterConfiguration","applyMetricsConfiguration","applyTelemetryConfiguration","optionsWithOptionalglobalScope","setInstance","peerConnectionFactory","convertLoggingLevelTypeToLoggingLevel","consoleLoggingLevel","consoleAppender","automaticallyPlayMediaStream","automaticallyMuteVideoOnPlayFailure","webPlayerLoader","shakaPlayerLoader","hlsJsLoader","_this$_applicationAct","_SDK","onLoad","Dimension","width","height","other","GarbageCollectorManager","isForceChromeGarbageCollectionSupported","forceChromeGarbageCollection","isQueueMicrotaskSupported","overloadMemoryToInvokeGarbageCollection","img","src","ArrayBuffer","onerror","ChannelState","Durations","duration","_duration","isNegative","abs","offset","milliseconds","seconds","minutes","hours","parts","padStart","targetLength","padString","repeat","noop","VideoTelemetry","channelStartTime","_streamId","_channelStartTime","_startRecordingFirstFrame","_listenToFirstTime","callTimeToFirstFrame","_clearTimeToFirstFrameListener","_listenForStall","onStall","_listenForContinuation","event","onContinuation","_clearRebufferingListener","toIsoString","pushTimeToFirstFrame","pushChannelCreationTimeToFirstFrame","_timeToFirstFrame","uint64","durationSincePageLoad","_channelCreationTimeToFirstFrame","_videoStalled","buffered","bufferLength","hasNotProgressedSinceLastProgressEvent","end","_lastProgress","timeSinceStop","newResolution","_videoResolution","StreamSetupListener","_startTime","recordStreamMetric","_metricSubmitted","setupTime","metricName","NetworkMonitor","navigatorConnection","isSupported","setupNetworkChangeListeners","updateStatistics","_isSupported","_rtt","_effectiveType","_downlinkThroughputCapacity","_GlobalScope$value$na","_GlobalScope$value$na2","_GlobalScope$value$na3","downlink","downlinkMax","_ref2","_GlobalScope$value$na4","_GlobalScope$value$na5","_GlobalScope$value$na6","effectiveType","_GlobalScope$value$na7","_GlobalScope$value$na8","rtt","_GlobalScope$value$na9","_GlobalScope$value$na0","getRoundTripTime","getEffectiveType","getDownlinkThroughputCapacity","SessionTelemetry","applicationActivityMonitor","_networkMonitor","isForeground","recordForegroundChange","recordNetworkRTTUpdate","recordNetworkTypeChangeUpdate","downlinkThroughputCapacity","recordNetworkDownlinkThroughputCapacityUpdate","timeSinceLastChange","getTimeSinceLastChange","newRTT","oldRtt","_lastNetworkStatistics","newNetworkType","oldNetworkType","newCapacity","oldCapacity","float","BitrateState","BitrateMode","TokenContext","tokenExpiring","ChannelContext","_options$targetLag","_options$onRealTimeSu","_options$onRealTimeSu2","disposables","channelDisposables","rendererDisposables","channelInitialization","videoElement","state","Initializing","exists","autoMuted","autoPaused","authorized","online","loading","playing","standby","stopped","targetLag","lag","bitrateLimit","resolution","empty","endPoint","onRealTimeSubscribeRequestCallback","onRealTimeSubscribeResponseCallback","stream","rtcStatistics","videoTelemetry","rtcAudioStatistic","rtcVideoStatistic","clearFailureCountTimeout","dataset","Starting","StandBy","GeoRestricted","GeoBlocked","Unauthorized","Recovering","ConfigurationError","TransientConfigurationError","EncodedStreamSink","mode","valid","validationResult","StreamTrackTransform","StreamTransformContext","hasInsertableStreams","hasEncodedInsertableStreams","videoStreamTransformCallback","audioStreamTransformCallback","encodedVideoStreamSink","encodedAudioStreamSink","audioTrack","mediaStreamTrack","receiver","mid","codec","transformPipelineWorker","transformMessageRouter","transformFunctionNames","videoTrack","PeerConnectionContext","peerConnectionReconnectAttempts","StateContext","isStarting","isDisposed","FrameTimingInformationContext","shouldExtractTimecode","shouldExtractTimestamps","isEnabled","decodedFrameTimingInformation","renderedFrameTimingInformation","BitrateModeMapping","bitrateMode","Normal","Force","Reset","BitrateStateMapping","bitrateState","Keep","EndPoint","timeout","_uri","_timeout","_roundTripTime","_ping","start","finished","buildPingUrl","race","ok","_subscribe","localSessionDescription","_options$onSubscribeR","_options$onSubscribeR3","clientVersion","requestBody","httpResponse","_options$onSubscribeR2","_response","subscribeResponse","_args2","buildUrl","apiVersion","bearerToken","httpRoundTripTime","sessionDescription","createAnswerDescription","createOfferDescription","onSubscribeRequestCallback","finally","mapHttpStatusToSubscribeStatus","onSubscribeResponseCallback","convertHttpResponseToSubscribeResponse","debug","_publish","bodyWithOffer","bodyWithoutOffer","mapHttpStatusToPublishStatus","convertHttpResponseToPublishResponse","_x5","_x6","_x7","setRemoteDescriptionResponse","sharedSecret","mapHttpStatusToSetRemoteDescriptionStatus","convertHttpResponseToSetRemoteDescriptionResponse","_x8","_x9","_limitBitrate","_callee5","elapsedInMilliseconds","bitrateInBitsPerSecond","_this5","_context5","convertBitrateStateToBitrateStateType","convertBitrateModeToBitrateModeType","mapHttpStatusToSetTemporaryMaximalBitrateStatus","_x0","_x1","_x10","_x11","_x12","_addIceCandidates","_callee6","candidates","discoveryCompleted","addIceCandidatesResponse","_this6","_args6","_context6","mapHttpStatusToAddIceCandidatesStatus","convertHttpResponseToAddIceCandidatesResponse","_x13","_x14","_x15","_destroyStream","_callee7","destroyStreamResponse","_this7","_context7","mapHttpStatusToSetDestroyStreamStatus","convertHttpResponseToDestroyStreamResponse","_x16","_x17","_destroyStreamOnUnmount","_callee8","_context8","sendBeacon","destroyStream","_x18","_x19","path","pathAsArray","_convertHttpResponseToSubscribeResponse","_callee9","rtcConfiguration","createAnswerDescriptionResponse","createOfferDescriptionResponse","otherProperties","_context9","json","_objectWithoutProperties","_excluded","_objectSpread","convertIRtcConfigurationToRTCConfiguration","_x20","_x21","_convertHttpResponseToPublishResponse","_callee0","publishResponse","_context0","_x22","_x23","iceServers","bundlePolicy","iceCandidatePoolSize","urls","username","credential","iceTransportPolicy","rtcpMuxPolicy","_convertHttpResponseToSetRemoteDescriptionResponse","_callee1","_context1","_x24","_convertHttpResponseToAddIceCandidatesResponse","_callee10","_context10","_x25","_convertHttpResponseToDestroyStreamResponse","_callee11","_context11","_x26","DiscoveryService","_discoverNearbyEndPoints","asString","endPoints","text","map","_discoverClosestEndPoint","failedRequests","propagateFailureIfAllRequestsFailed","buildDiscoveryUrl","discoverNearbyEndPoints","ping","time","Discovery","_precacheClosestEndPointDiscovery","resolveEndPointPromise","discoverClosestEndPointWithCaching","_discoverClosestEndPointWithCaching","discoveryService","cachedValue","_cache","discoverClosestEndPoint","precacheClosestEndPointDiscovery","NetworkStates","WebPlayer","manifestURI","handleStreamFailure","_videoElement","_kind","_manifestURI","encodeURI","replace","_options","_player","_lastReloadTime","_handleStreamFailure","ChunkedStreaming","phenixWebPlayer","_this$_player","_this$_player2","playerOptions","bandwidthToStartAt","errorObject","canReload","code","severity","errors","RECOVERABLE","reloadIfAble","_this$_videoElement$b","_this$_videoElement$b2","currentTime","networkState","NetworkNoSource","dataBuffered","statistics","trueCurrentTime","originStartTime","isNative","deliveryType","NetworkLoading","NetworkIdle","NetworkEmpty","hasElapsedMinTimeSinceLastReload","minTimeBeforeNextReload","reload","ShakaPlayer","_monitoredStatistics","estimatedBandwidth","playTime","shaka","Player","loadPlayer","abr","defaultBandwidthEstimate","manifest","retryParameters","streaming","liveSyncPanicThreshold","bufferingGoal","bufferBehind","maxAttempts","backoffFactor","unload","destroy","playerConfig","_this$_player4","configure","errorHandler","_this$_player3","load","play","HlsPlayer","hlsPlayer","enableWorker","maxBufferLength","backBufferLength","liveSyncDuration","liveDurationInfinity","liveMaxLatencyDuration","Infinity","highBufferWatchdogPeriod","loadSource","attachMedia","canPlayType","media","offsetWidth","offsetHeight","streamController","_hlsPlayer","_phenixWebPlayer","_shaka","_start","offerSdp","loaded","_pending","player","_play","dashManifestUrlMatch","hlsManifestUrlMatch","manifestUrl","playlistUrl","shouldUseNativeHls","preferNative","ChunkedStreamPlaybackMode","VideoFrameDetector","isRequestAnimationFrameSupported","startTime","resolved","timeoutId","ChunkedStreamSubscriber","channelContext","chunkedStreamPlaybackMode","_channelContext","_chunkedStreamPlaybackMode","_createOfferDescripti","mapSubscribeStatusToExists","mapSubscribeStatusToChannelStatus","applyStatus","applySessionAndStreamPropertiesToVideoElement","roundTripTime","retryOnStreamFailure","monitor","Stopped","_monitorFailureCount","ConnectionError","_monitorDisposables","_this3$_channelContex","_this3$_channelContex2","_this3$_channelContex3","_this3$_channelContex4","_this3$_channelContex5","newStreamStatistics","Live","_streamStatistics","paused","Playing","Paused","isRenderingFrames","SdpParser","_sdp","sdpSplitByLines","sdpSplitByTracks","_audioCodec","applyCodec","_videoCodec","_isAudioTrackEnabled","isTrackByTypeEnabled","_isVideoTrackEnabled","sdpSectionForType","sdpTrack","_sdpSplitByLines$find","rtmap","sdpLine","usedCodecLine","RtcConfigurationManager","RtcConnectionMonitor","estimatedRoundTripTime","_estimatedRoundTripTime","_tracksToMonitor","getCurrentOfferDisabled","parsedSDP","_estimatedAudioCodec","audioCodec","_estimatedVideoCodec","videoCodec","isInitialSubscriptionCallback","foreground","_isMonitorRunning","_monitorGeneration","_updateTimeout","updateStatistic","_rtcStatistic","_updateStatistic","getKindForSafari11","generation","timeoutHandle","statsPromise","timeoutPromise","stats","lastPacketReceivedTimestamp","getStatsPromiseBasedDisabled","updateStatisticLegacy","id","report","currentRoundTripTime","mediaType","codecId","mimeType","_this2$_rtcStatistic$","_this2$_rtcStatistic$2","_this2$_rtcStatistic$3","_this2$_rtcStatistic$4","_this2$_rtcStatistic$5","_this2$_rtcStatistic$6","_this2$_rtcStatistic$7","bytesDelta","bytesReceived","timeDelta","bitrate","ssrc","packetsLost","packetsReceived","getCodecByType","framesDecoded","fps","_updateStatisticLegacy","getStatsLegacy","names","stat","_this3$_rtcStatistic$","_this3$_rtcStatistic$2","VideoCodec","TransformMessageType","TransformMessageDataType","FrameTimingInformationManager","context","Map","canProcessFrameTimingInformation","setupVideoElementHandling","renderedFrameTimingInformationSubject","setupFrameTimingInformationTransform","trackId","decodedFrameTimingInformationSubject","isEnabledSubject","H264","registerRoute","FrameTimingInformation","handleFrameTimingMessage","_transformName","_Object$entries","entries","_Object$entries$_i","_slicedToArray","rtpTimestamp","metadata","rtpTimestampNumber","_decodedFrameTimingIn","_decodedFrameTimingIn2","frameTimingInformation","timecode","receiveTimestamp","sourceTimestamp","ingestTimestamp","encodeTimestamp","transcodeTimestamp","playbackState","_currentPlaybackState","_decodedFrameTimingInformationByRtpTimestamp","videoElementSubject","clear","_videoElementDisposables","setupVideoEventListeners","_armVideoFrameCallback","_step","timestampsToDelete","_iterator","_createForOfIteratorHelper","s","_step$value","frameTiming","renderTimestamp","performance","timeOrigin","err","_i2","_timestampsToDelete","delete","onPlaying","onPause","onStalled","onWaiting","onEnded","onError","_armedVideoFrameCallbackId","cancelVideoFrameCallback","handleVideoFrameCallback","Worker_fn","TransformPipelineMessageRouter","messageType","routeMessage","_messageRoutes","Chunk","Metadata","once","_arrayLikeToArray","_unsupportedIterableToArray","_n","F","InsertableStreams","streamTransformContext","createTransformPipelineWorkerForTrack","TransformStreamPipelineWorker","terminate","TransformMessageRouter","videoTrackReceiver","videoTrackMediaStreamTrack","audioTrackReceiver","audioTrackMediaStreamTrack","_configureEncodedStreamPipeline","addTrackTransforms","configureRTCRtpScriptTransform","configureEncodedStreams","transformFunctionName","postMessage","AddTransform","configureRTCRtpScriptTransformForTrack","trackReceiver","trackMediaStreamTrack","trackTransformPipelineWorker","transform","_ref3","PipelineConfigured","all","_ref4","configureEncodedStreamsForTrack","actions","encodedReceiverStreams","_ref5","ConfigurePipeline","source","readable","sink","transfer","transformedStream","transformer","TransformStream","chunk","controller","processor","generator","pipeThrough","pipeTo","removeTrack","audioPumper","Audio","srcObject","appendChild","removeChild","AudioCodec","Uint8Array","annexBFourByteStartCode","SkipFrame","SurrogateFrameDataManager","OPUS","_dummyAudioSilentPerCodec","buffer","AAC","_singleZeroByte","_isSafari","_surrogate28x16H264IFrame","_dummy2x2VideoIFramePerCodec","VP8","VP9","_isAndroidChrome","_surrogate28x16PFrameFrameNumber","_surrogate28x16PFrameFrameNumberReset","_surrogate28x16H264PFrame","_dummy2x2VideoPFramePerCodec","_SurrogateFrameDataManager","isAndroid","surrogateH26428x16IFrame","surrogateH26428x16PFrame","EncodedMediaTransformManager","EncodedVideoChunk","encodedVideoStreamCallback","EncodedAudioChunk","encodedAudioStreamCallback","_encodedAudioStreamCallback","getInvalidSurrogateAudioData","getSurrogateAudioSilentPerCodec","_encodedVideoStreamCallback","surrogate","getInvalidSurrogateVideoIFrame","getInvalidSurrogateVideoPFrame","getSurrogateVideoIFramePerCodec","getSurrogateVideoPFramePerCodec","VideoCodecMapping","videoCodecType","videoCodecString","toUpperCase","AudioCodecMapping","audioCodecType","audioCodecString","ownKeys","keys","filter","getOwnPropertyDescriptor","getOwnPropertyDescriptors","defineProperties","RealTimeStreamSubscriber","peerConnectionContext","frameTimingInformationContext","_peerConnectionContext","_streamTransformContext","_frameTimingInformationContext","listenOnStreamSetup","playMediaStreamInVideoElement","requiresEncodedInsertableStreams","_ref3$","subscribeOptions","clientOfferDisabled","supportsSetConfiguration","supportsGetConfiguration","forceGarbageCollectionOnRestart","skipGarbageCollectionOnMobileDevices","forceGarbageCollection","applyRtcConfiguration","submitCandidatesTimeout","cancelDiscovery","candidate","_this$_channelContext","addIceCandidates","retryCallback","navigatorIsOnLine","reconnectPeerConnection","mediaStreamPromise","onTrackDisabled","streams","trackListener","answer","mapSetRemoteDescriptionStatusToChannelStatus","success","_peerConnection$curre","_this$_channelContext2","_peerConnection$getTr","_peerConnection$getTr2","parsedRemoteDescription","convertVideoCodecTypeToVideoCodec","convertAudioCodecTypeToAudioCodec","receivers","getVideoTracks","supportsGetTransceivers","transceiver","getAudioTracks","createEncodedStreamPipeline","frameTimingInformationManagerContext","encodedMediaTransformManagerContext","configureEncodedStreamPipeline","_InsertableStreams$co","configureInsertableStreamTransformation","rtcConnectionMonitor","rtcConnectionMonitorStatisticSubscription","rtcStatistic","audioTrackFailed","videoTrackFailed","Reconnecting","Offline","_applyRtcConfiguration","optionalPeerConnection","newRtcConfiguration","truncateIceServers","UnsupportedFeature","maximalNumberOfPeerConnectionReconnectAttempts","automaticallyReconnectPeerConnection","_peerConnection$curre2","isClientOfferFlow","iceRestart","offer","_mediaStream$getTrack","hasActiveTracks","some","readyState","StreamSubscriberFactory","tokenCapabilities","hasStreaming","hasOnDemand","OndDemand","Channel","channelContextOptions","streamTransformContextOptions","_tokenContext","_stateContext","_readOnlyPeerConnection","_readOnlyState","_readOnlyExists","_readOnlyAutoMuted","_readOnlyAutoPaused","_readOnlyTokenExpiring","_readOnlyAuthorized","_readOnlyOnline","_readOnlyLoading","_readOnlyPlaying","_readOnlyStandby","_readOnlyStopped","_readOnlyTargetLag","_readOnlyLag","_readOnlyBitrateLimit","_readOnlyResolution","_readOnlyFailureCount","_readOnlyEndPoint","_readOnlyStream","_readOnlyRtcStatistics","_readOnlyMediaStream","_sessionTelemetry","_videoMetaDataChangedHandler","handleVideoMetaDataChanged","configureFrameTimingInformation","_readOnlyIsFrameTimingInformationEnabled","_readOnlyDecodedFrameTimingInformation","_readOnlyRenderedFrameTimingInformation","setupListenerForTimeToFirstTime","setupListenerForRebuffering","restartAfterStop","onVideoResolutionChanges","getTime","limitBitrate","destroyStreamOnUnmount","removeWindowEventListener","automaticRetryOnFailure","lastBackgroundDuration","getLastBackgroundDuration","shouldForceRestart","isStreamDeletedByPlatform","restartOnForeground","isRetryableState","_streamSubscriber","isSubscriberHealthy","isHealthy","pause","videoWidth","videoHeight","_stop","processStop","cleanUpResources","_resume","muted","_dispose","stop","processStart","ClientStartError","isStreamHealthy","_processStart","isRecovery","_StreamTrackTransform","_StreamTrackTransform2","_valid","_validationResult","_EncodedStreamSink$va","_valid2","_validationResult2","_EncodedStreamSink$va2","_valid3","_validationResult3","hasTransformStreamCallback","hasEncodedStreamSink","handleStreamFailureCallback","validateMediaStreamTrackTransform","validateEncodedStreamSink","isInsertableStreamsSupported","getUri","clearCachedClosestEndpoint","fail","getRetryInterval","_restartAfterStop","frameTimingInformationCapability","capability","isChannelFrameTimingInformationSupported","option","trim","_playMediaStreamInVideoElement","playPromise","_this8","hasAudioTrack","automaticallyMuteVideoOnPlayFailureOff","Channels","initialized","channelOptions","optionsWithRealTimeSubscribeCallbacks","PublisherState","PublisherContext","publisherDisposables","publisherInitialization","publishing","generateScreenName","startReconnectionAttemptsTimeInMilliseconds","applyUnauthorized","applyNotFound","applyUnhandledError","NotFound","RtcPublishMonitor","parsedLocalDescription","_availableTracks","isAudioTrackEnabled","isVideoTrackEnabled","lastPacketSentTimestamp","_this2$_availableTrac","bytesSent","packetsSent","retransmittedBytesSent","firCount","frameHeight","frameWidth","framesEncoded","framesSent","headerBytesSent","hugeFramesSent","pliCount","qpSum","totalEncodeTime","totalEncodedBytesTarget","RealTimePublisher","publisherContext","_publisherContext","publish","mapPublishStatusToPublisherStatus","applyPublishStatus","addStream","_this$_publisherConte","mapAddIceCandidatesStatusToPublisherStatus","applyAddIceCandidatesStatus","_createAnswerDescript","mapSetRemoteDescriptionStatusToPublisherStatus","applySetRemoteDescriptionStatus","_this$_publisherConte2","Publishing","rtcPublishMonitor","reconnectPeerConnectionTimeout","Publisher","_publisherStartTime","_readOnlyToken","_readOnlyPublishing","streamPublisher","mediaTrack","_this5$_peerConnectio","sender","_sender$track","replaceTrack","Publishers"],"sourceRoot":""}